https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111880
Bug ID: 111880
Summary: [9/10/11/12/13] False positive warning of obsolescent
COMMON block with Fortran submodule
Product: gcc
Version: 13.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: zed.three at gmail dot com
Target Milestone: ---
Created attachment 56152
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=56152&action=edit
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.