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 <[email protected]>
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 <[email protected]>
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