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 <anl...@gmx.de> 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 <anl...@gmx.de> 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