https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88248

--- Comment #6 from Harald Anlauf <anlauf at gmx dot de> ---
Moving the check from gfc_define_st_label to gfc_reference_st_label:

Index: symbol.c
===================================================================
--- symbol.c    (revision 268826)
+++ 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;

fixes the issue for me.  It consequently needs adjustment to the test case
f2018_obs.f90, since it references the line with the "do 99 ..." instead
of the do termination line.

I am wondering about the location of the error marker.  E.g. for

subroutine gfcbug151 ()
  do 99 i = 1, 10
99   continue
end subroutine gfcbug151

I get:

gfcbug151.f90:2:17:

    2 |   do 99 i = 1, 10
      |                 1
Warning: Fortran 2018 obsolescent feature: Labeled DO statement at (1)

But I think this is ok.

Should I submit the above, or are there better suggestions?

Reply via email to