The attached patch moves the check for labeled DO statements to the place where a label is referenced instead of where a label was defined, which lead to false positives.
Regtested on x86_64-pc-linux-gnu. OK for trunk? Thanks, Harald 2019-02-13 Harald Anlauf <anl...@gmx.de> PR fortran/88248 * symbol.c: Move check for labeled DO statement from gfc_define_st_label to gfc_reference_st_label. 2019-02-13 Harald Anlauf <anl...@gmx.de> PR fortran/88248 * gfortran.dg/pr88248.f90: New test.
Index: gcc/fortran/symbol.c =================================================================== --- gcc/fortran/symbol.c (revision 268826) +++ gcc/fortran/symbol.c (working copy) @@ -2743,10 +2743,6 @@ "DO termination statement which is not END DO" " or CONTINUE with label %d at %C", labelno)) return; - if (type == ST_LABEL_DO_TARGET - && !gfc_notify_std (GFC_STD_F2018_OBS, "Labeled DO statement " - "at %L", label_locus)) - return; break; default: @@ -2804,6 +2800,11 @@ "Shared DO termination label %d at %C", labelno)) return false; + if (type == ST_LABEL_DO_TARGET + && !gfc_notify_std (GFC_STD_F2018_OBS, "Labeled DO statement " + "at %L", &gfc_current_locus)) + return false; + if (lp->referenced != ST_LABEL_DO_TARGET) lp->referenced = type; rc = true;
Index: gcc/testsuite/gfortran.dg/pr88248.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr88248.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr88248.f90 (working copy) @@ -0,0 +1,28 @@ +! { dg-do compile } +! { dg-options "-std=f2018" } +! +! PR88248 - [F18] Bogus warning about obsolescent feature: Labeled DO statement +! +program pr88248 + character*80 text ! { dg-warning "Old-style character length" } + f(x) = x ! { dg-warning "Statement function" } + call foo (*99) ! { dg-warning "Alternate-return argument" } + data y / 1.0 / ! { dg-warning "DATA statement" } + goto (1,99) i+1 ! { dg-warning "Computed GOTO" } + ! No warning should be printed below + goto 1 +1 continue + open (10, err=99) + close (10, err=99) + backspace (10, err=99) + endfile (10, err=99) + rewind (10, err=99) + flush (10, err=99) + inquire (10, err=99) + read (*, end=99) text +99 continue +end + +subroutine foobar () +entry bar () ! { dg-warning "ENTRY statement" } +end subroutine foobar