The attached patch moves the check for this F2018 obsolescent feature
to a better place where the warning is only emitted when the COMMON is
declared. No warning should be emitted when such a legacy module is
simply used.
Regtested on x86_64-pc-linux-gnu.
OK for trunk?
Thanks,
Harald
2019-02-11 Harald Anlauf <[email protected]>
PR fortran/88299
* resolve.c (resolve_common_blocks,resolve_common_vars): Move
check for obsolent COMMON feature in F2018 to better place.
2019-02-11 Harald Anlauf <[email protected]>
PR fortran/88299
* gfortran.dg/pr88299.f90: New test.
Index: gcc/fortran/resolve.c
===================================================================
--- gcc/fortran/resolve.c (revision 268778)
+++ gcc/fortran/resolve.c (working copy)
@@ -940,7 +940,11 @@
have been ignored to continue parsing.
We do the checks again here. */
if (!csym->attr.use_assoc)
- gfc_add_in_common (&csym->attr, csym->name, &common_block->where);
+ {
+ gfc_add_in_common (&csym->attr, csym->name, &common_block->where);
+ gfc_notify_std (GFC_STD_F2018_OBS, "COMMON block at %L",
+ &common_block->where);
+ }
if (csym->value || csym->attr.data)
{
@@ -998,10 +1002,6 @@
resolve_common_vars (common_root->n.common, true);
- if (!gfc_notify_std (GFC_STD_F2018_OBS, "COMMON block at %L",
- &common_root->n.common->where))
- return;
-
/* The common name is a global name - in Fortran 2003 also if it has a
C binding name, since Fortran 2008 only the C binding name is a global
identifier. */
Index: gcc/testsuite/gfortran.dg/pr88299.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr88299.f90 (nonexistent)
+++ gcc/testsuite/gfortran.dg/pr88299.f90 (working copy)
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! { dg-options "-std=f2018" }
+!
+! PR 85839: [F18] COMMON in a legacy module produces bogus warnings
+! in dependent code
+
+module legacy
+ integer :: major, n
+ common /version/ major ! { dg-warning "obsolescent feature" }
+ public :: n
+ private
+end module legacy
+
+module mod1
+ use legacy, only: n ! No warning expected here
+end module mod1