diff options
author | Harald Anlauf <anlauf@gmx.de> | 2025-01-25 19:59:56 +0100 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2025-01-25 21:17:18 +0100 |
commit | 8fd2158acac181a308126ad7b798b478eb3b7087 (patch) | |
tree | 6d67fe15a02f8e32497bca974a54fe8bd59e5035 /gcc/fortran/trans-decl.cc | |
parent | e2f024f586e99fb63dd49e0603f52d1cb765a77e (diff) | |
download | gcc-8fd2158acac181a308126ad7b798b478eb3b7087.zip gcc-8fd2158acac181a308126ad7b798b478eb3b7087.tar.gz gcc-8fd2158acac181a308126ad7b798b478eb3b7087.tar.bz2 |
Fortran: fix issues with variables in BLOCK DATA [PR58857]
PR fortran/58857
gcc/fortran/ChangeLog:
* class.cc (gfc_find_derived_vtab): Declare some frontend generated
variables and procedures (_vtab, _copy, _deallocate) as artificial.
(find_intrinsic_vtab): Likewise.
* trans-decl.cc (check_block_data_decls): New helper function.
(gfc_generate_block_data): Use it to emit warnings for variables
declared in a BLOCK DATA program unit but not in a COMMON block.
gcc/testsuite/ChangeLog:
* gfortran.dg/uncommon_block_data_2.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-decl.cc')
-rw-r--r-- | gcc/fortran/trans-decl.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index 97bb0a4..b8fc9a1 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -8295,6 +8295,26 @@ gfc_generate_constructors (void) #endif } + +/* Helper function for checking of variables declared in a BLOCK DATA program + unit. */ + +static void +check_block_data_decls (gfc_symbol * sym) +{ + if (warn_unused_variable + && sym->attr.flavor == FL_VARIABLE + && !sym->attr.in_common + && !sym->attr.artificial) + { + gfc_warning (OPT_Wunused_variable, + "Symbol %qs at %L is declared in a BLOCK DATA " + "program unit but is not in a COMMON block", + sym->name, &sym->declared_at); + } +} + + /* Translates a BLOCK DATA program unit. This means emitting the commons contained therein plus their initializations. We also emit a globally visible symbol to make sure that each BLOCK DATA program @@ -8315,6 +8335,9 @@ gfc_generate_block_data (gfc_namespace * ns) /* Process the DATA statements. */ gfc_trans_common (ns); + /* Check for variables declared in BLOCK DATA but not used in COMMON. */ + gfc_traverse_ns (ns, check_block_data_decls); + /* Create a global symbol with the mane of the block data. This is to generate linker errors if the same name is used twice. It is never really used. */ |