Created attachment 56152 [details] Minimal source code demonstrating issue. Compiler Explorer link with complete reproducer: https://godbolt.org/z/dd45enhWe module third_party_module integer :: some_param common /not_my_code/ some_param end module third_party_module module foo use third_party_module interface module subroutine bar() end subroutine bar end interface end module foo submodule (foo) foo_submod contains module procedure bar end procedure bar end submodule foo_submod Compiling the above minimal program like: gfortran -std=f2018 -c foo.f90 gives the following warnings: foo.f90:3:22: 3 | common /not_my_code/ some_param | 1 Warning: Fortran 2018 obsolescent feature: COMMON block at (1) foo.f90:14:14: 14 | submodule (foo) foo_submod | 1 Warning: Fortran 2018 obsolescent feature: COMMON block at (1) The first warning is expected, but the second one is a false positive. I came across this when building with a library outside of my control, so I cannot remove the problem common block (actually this was with MPI, and it happens with all the major implementations as the common block is required for technical reasons). If the submodule is removed, the extra warning disappears. The warning also appears when building the submodule separately (in a different file and having already built the parent module). It also only appears to be this warning, and not other F2018 obsolescent feature warnings (e.g. labeled DO statements), or other warnings enabled at `-Wall` for instance.
(In reply to zed.three from comment #0) > Warning: Fortran 2018 obsolescent feature: COMMON block at (1) > foo.f90:14:14: > > 14 | submodule (foo) foo_submod > | 1 > Warning: Fortran 2018 obsolescent feature: COMMON block at (1) > Not sure I would call this a false positive as the locus is pointing at module 'foo', and 'foo' contains a common block.
The common block is in 'third_party_module', rather than 'foo', unless you mean that it is visible from 'foo'? It is still a surprising warning in this location at any rate!
On Thu, Oct 19, 2023 at 05:20:46PM +0000, zed.three at gmail dot com wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111880 > > --- Comment #2 from zed.three at gmail dot com --- > The common block is in 'third_party_module', rather than 'foo', > unless you mean that it is visible from 'foo'? Exactly. 'not_my_code' is in the namespace for foo through use association of third_party_module. It seems that trying to hide 'not_my_code' with PRIVATE or 'use third_party_module, only : some_param' in foo does not mute the warning. Likely, due to -std=f2018 and F2018, Sec. 4.2.
Potential fix: diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 81a14653a04..962274f5d25 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -986,8 +986,8 @@ resolve_common_vars (gfc_common_head *common_block, bool named_common) /* gfc_add_in_common may have been called before, but the reported errors have been ignored to continue parsing. - We do the checks again here. */ - if (!csym->attr.use_assoc) + We do the checks again here, unless the symbol is USE associated. */ + if (!csym->attr.use_assoc && !csym->attr.used_in_submodule) { gfc_add_in_common (&csym->attr, csym->name, &common_block->where); gfc_notify_std (GFC_STD_F2018_OBS, "COMMON block at %L",
(In reply to anlauf from comment #4) > Potential fix: Regtests ok.
Submitted: https://gcc.gnu.org/pipermail/fortran/2023-November/059954.html
The master branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>: https://gcc.gnu.org/g:c9d029ba2ceb435e31492c1f3f0fd3edf0e386be commit r14-5859-gc9d029ba2ceb435e31492c1f3f0fd3edf0e386be Author: Harald Anlauf <anlauf@gmx.de> Date: Thu Nov 23 22:48:38 2023 +0100 Fortran: avoid obsolescence warning for COMMON with submodule [PR111880] gcc/fortran/ChangeLog: PR fortran/111880 * resolve.cc (resolve_common_vars): Do not call gfc_add_in_common for symbols that are USE associated or used in a submodule. gcc/testsuite/ChangeLog: PR fortran/111880 * gfortran.dg/pr111880.f90: New test.
The releases/gcc-13 branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>: https://gcc.gnu.org/g:ff96ddf43bcfe5c37a85118a68dcac87ce33c8d9 commit r13-8111-gff96ddf43bcfe5c37a85118a68dcac87ce33c8d9 Author: Harald Anlauf <anlauf@gmx.de> Date: Thu Nov 23 22:48:38 2023 +0100 Fortran: avoid obsolescence warning for COMMON with submodule [PR111880] gcc/fortran/ChangeLog: PR fortran/111880 * resolve.cc (resolve_common_vars): Do not call gfc_add_in_common for symbols that are USE associated or used in a submodule. gcc/testsuite/ChangeLog: PR fortran/111880 * gfortran.dg/pr111880.f90: New test. (cherry picked from commit c9d029ba2ceb435e31492c1f3f0fd3edf0e386be)
The releases/gcc-12 branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>: https://gcc.gnu.org/g:17cbec6e8ea8817b6240837bb1f1bf74f1b9bdcd commit r12-10022-g17cbec6e8ea8817b6240837bb1f1bf74f1b9bdcd Author: Harald Anlauf <anlauf@gmx.de> Date: Thu Nov 23 22:48:38 2023 +0100 Fortran: avoid obsolescence warning for COMMON with submodule [PR111880] gcc/fortran/ChangeLog: PR fortran/111880 * resolve.cc (resolve_common_vars): Do not call gfc_add_in_common for symbols that are USE associated or used in a submodule. gcc/testsuite/ChangeLog: PR fortran/111880 * gfortran.dg/pr111880.f90: New test. (cherry picked from commit c9d029ba2ceb435e31492c1f3f0fd3edf0e386be)
The releases/gcc-11 branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>: https://gcc.gnu.org/g:246760b37f1239b3b97c20fb4a914f21154389a3 commit r11-11119-g246760b37f1239b3b97c20fb4a914f21154389a3 Author: Harald Anlauf <anlauf@gmx.de> Date: Thu Nov 23 22:48:38 2023 +0100 Fortran: avoid obsolescence warning for COMMON with submodule [PR111880] gcc/fortran/ChangeLog: PR fortran/111880 * resolve.c (resolve_common_vars): Do not call gfc_add_in_common for symbols that are USE associated or used in a submodule. gcc/testsuite/ChangeLog: PR fortran/111880 * gfortran.dg/pr111880.f90: New test. (cherry picked from commit c9d029ba2ceb435e31492c1f3f0fd3edf0e386be)
Fixed on all open branches. Closing.