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

Reply via email to