Hi all,

> the attached patch deals with the fact that the Fortran 2018 standard
> marks two features as "deleted" (i.e. no longer supported), namely
> arithmetic IFs and nonblock DO constructs. Both have been obsolescent
> since the 90s (and have been warned about by gfortran with appropriate
> flags).
>
> Here's what the patch does:
> 1) It rejects those features with -std=f2018, giving a hard error.
> 2) It gives a warning with default flags (previously this happened
> only with -std=f2008 etc, but not with -std=gnu).

here is a slightly updated version of the patch. While the previous
one had to duplicate every invocation of gfc_notify_std like this:

if (!gfc_notify_std (GFC_STD_F2018_DEL, ...)) ...
if (!gfc_notify_std (GFC_STD_F95_OBS, ...)) ...

the new version extends gfc_notify_std, such that it works not only
with a single GFC_STD_* flag, but can handle combinations of those.
For such a situation, where a single feature can belong to several
GFC_STD_* classes, one potentially needs to throw different error or
warning messages, depending on the -std= option. The invocation of
gfc_notify_std then simplifies to:

if (!gfc_notify_std (GFC_STD_F95_OBS | GFC_STD_F2018_DEL, ...)) ...

The patch still regtests cleanly. Ok for trunk?

Btw, with the arrival of the F2018 standard, I wonder whether it
actually makes sense to keep the option -std=f2008ts, or to remove it
in favor of -std=f2018, since the two Technical Specifications covered
by this flag are now part of F2018 (and pretty much the main part!).
Any opinions on this?

Cheers,
Janus



2018-05-20  Janus Weil  <ja...@gcc.gnu.org>

    PR fortran/85841
    * error.c (notify_std_msg): New function.
    (gfc_notify_std): Adjust such that it can handle combinations of
    GFC_STD_* flags in the 'std' argument, not just a single one.
    * match.c (match_arithmetic_if, gfc_match_if): Reject arithmetic if
    in Fortran 2018.
    (gfc_match_stopcode): Adjust checks for standard version.
    * options.c (set_default_std_flags): Warn for F2018 deleted features
    by default.
    (gfc_handle_option): F2018 deleted features are allowed in earlier
    standards.
    * symbol.c (gfc_define_st_label, gfc_reference_st_label): Reject
    nonblock do constructs in Fortran 2018.


2018-05-20  Janus Weil  <ja...@gcc.gnu.org>

    PR fortran/85841
    * gfortran.dg/g77/19990826-3.f: Add option "-std=legacy".
    * gfortran.dg/g77/20020307-1.f: Ditto.
    * gfortran.dg/g77/980310-3.f: Ditto.
    * gfortran.dg/goacc/loop-1-2.f95: Ditto.
    * gfortran.dg/goacc/loop-1.f95: Ditto.
    * gfortran.dg/gomp/appendix-a/a.6.1.f90: Ditto.
    * gfortran.dg/gomp/appendix-a/a.6.2.f90: Ditto.
    * gfortran.dg/gomp/do-1.f90: Ditto.
    * gfortran.dg/gomp/omp_do1.f90: Ditto.
    * gfortran.dg/pr17229.f: Ditto.
    * gfortran.dg/pr37243.f: Ditto.
    * gfortran.dg/pr49721-1.f: Ditto.
    * gfortran.dg/pr58484.f: Ditto.
    * gfortran.dg/pr81175.f: Ditto.
    * gfortran.dg/pr81723.f: Ditto.
    * gfortran.dg/predcom-2.f: Ditto.
    * gfortran.dg/vect/Ofast-pr50414.f90: Ditto.
    * gfortran.dg/vect/cost-model-pr34445a.f: Ditto.
    * gfortran.dg/vect/fast-math-mgrid-resid.f: Ditto.
    * gfortran.dg/vect/pr52580.f: Ditto.
Index: gcc/fortran/error.c
===================================================================
--- gcc/fortran/error.c	(revision 260420)
+++ gcc/fortran/error.c	(working copy)
@@ -842,6 +842,40 @@ gfc_notification_std (int std)
 }
 
 
+/* Return a string describing the nature of a standard violation
+ * and/or the relevant version of the standard.  */
+
+char const*
+notify_std_msg(int std)
+{
+
+  if (std & GFC_STD_F2018_DEL)
+    return _("Fortran 2018 deleted feature:");
+  else if (std & GFC_STD_F2018_OBS)
+    return _("Fortran 2018 obsolescent feature:");
+  else if (std & GFC_STD_F2018)
+    return _("Fortran 2018:");
+  else if (std & GFC_STD_F2008_TS)
+    return "TS 29113/TS 18508:";
+  else if (std & GFC_STD_F2008_OBS)
+    return _("Fortran 2008 obsolescent feature:");
+  else if (std & GFC_STD_F2008)
+    return "Fortran 2008:";
+  else if (std & GFC_STD_F2003)
+    return "Fortran 2003:";
+  else if (std & GFC_STD_GNU)
+    return _("GNU Extension:");
+  else if (std & GFC_STD_LEGACY)
+    return _("Legacy Extension:");
+  else if (std & GFC_STD_F95_OBS)
+    return _("Obsolescent feature:");
+  else if (std & GFC_STD_F95_DEL)
+    return _("Deleted feature:");
+  else
+    gcc_unreachable ();
+}
+
+
 /* Possibly issue a warning/error about use of a nonstandard (or deleted)
    feature.  An error/warning will be issued if the currently selected
    standard does not contain the requested bits.  Return false if
@@ -851,55 +885,24 @@ bool
 gfc_notify_std (int std, const char *gmsgid, ...)
 {
   va_list argp;
-  bool warning;
   const char *msg, *msg2;
   char *buffer;
 
-  warning = ((gfc_option.warn_std & std) != 0) && !inhibit_warnings;
-  if ((gfc_option.allow_std & std) != 0 && !warning)
+  /* Determine whether an error or a warning is needed.  */
+  const int wstd = std & gfc_option.warn_std;    /* Standard to warn about.  */
+  const int estd = std & ~gfc_option.allow_std;  /* Standard to error about.  */
+  const bool warning = (wstd != 0) && !inhibit_warnings;
+  const bool error = (estd != 0);
+
+  if (!error && !warning)
     return true;
-
   if (suppress_errors)
-    return warning ? true : false;
+    return !error;
 
-  switch (std)
-  {
-    case GFC_STD_F2018_DEL:
-      msg = _("Fortran 2018 deleted feature:");
-      break;
-    case GFC_STD_F2018_OBS:
-      msg = _("Fortran 2018 obsolescent feature:");
-      break;
-    case GFC_STD_F2018:
-      msg = _("Fortran 2018:");
-      break;
-    case GFC_STD_F2008_TS:
-      msg = "TS 29113/TS 18508:";
-      break;
-    case GFC_STD_F2008_OBS:
-      msg = _("Fortran 2008 obsolescent feature:");
-      break;
-    case GFC_STD_F2008:
-      msg = "Fortran 2008:";
-      break;
-    case GFC_STD_F2003:
-      msg = "Fortran 2003:";
-      break;
-    case GFC_STD_GNU:
-      msg = _("GNU Extension:");
-      break;
-    case GFC_STD_LEGACY:
-      msg = _("Legacy Extension:");
-      break;
-    case GFC_STD_F95_OBS:
-      msg = _("Obsolescent feature:");
-      break;
-    case GFC_STD_F95_DEL:
-      msg = _("Deleted feature:");
-      break;
-    default:
-      gcc_unreachable ();
-  }
+  if (error)
+    msg = notify_std_msg (estd);
+  else
+    msg = notify_std_msg (wstd);
 
   msg2 = _(gmsgid);
   buffer = (char *) alloca (strlen (msg) + strlen (msg2) + 2);
@@ -908,13 +911,16 @@ gfc_notify_std (int std, const char *gmsgid, ...)
   strcat (buffer, msg2);
 
   va_start (argp, gmsgid);
-  if (warning)
+  if (error)
+    gfc_error_opt (0, buffer, argp);
+  else
     gfc_warning (0, buffer, argp);
-  else
-    gfc_error_opt (0, buffer, argp);
   va_end (argp);
 
-  return (warning && !warnings_are_errors) ? true : false;
+  if (error)
+    return false;
+  else
+    return (warning && !warnings_are_errors);
 }
 
 
Index: gcc/fortran/match.c
===================================================================
--- gcc/fortran/match.c	(revision 260420)
+++ gcc/fortran/match.c	(working copy)
@@ -1442,7 +1442,8 @@ match_arithmetic_if (void)
       return MATCH_ERROR;
     }
 
-  if (!gfc_notify_std (GFC_STD_F95_OBS, "Arithmetic IF statement at %C"))
+  if (!gfc_notify_std (GFC_STD_F95_OBS | GFC_STD_F2018_DEL,
+		       "Arithmetic IF statement at %C"))
     return MATCH_ERROR;
 
   new_st.op = EXEC_ARITHMETIC_IF;
@@ -1522,7 +1523,8 @@ gfc_match_if (gfc_statement *if_type)
 	  return MATCH_ERROR;
 	}
 
-      if (!gfc_notify_std (GFC_STD_F95_OBS, "Arithmetic IF statement at %C"))
+      if (!gfc_notify_std (GFC_STD_F95_OBS | GFC_STD_F2018_DEL,
+			   "Arithmetic IF statement at %C"))
 	return MATCH_ERROR;
 
       new_st.op = EXEC_ARITHMETIC_IF;
@@ -2939,11 +2941,12 @@ gfc_match_stopcode (gfc_statement st)
 
   /* Set f95 for -std=f95.  */
   f95 = gfc_option.allow_std == (GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77
-				 | GFC_STD_F2008_OBS);
+				 | GFC_STD_F2008_OBS | GFC_STD_F2018_DEL);
 
   /* Set f03 for -std=f2003.  */
   f03 = gfc_option.allow_std == (GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77
-				 | GFC_STD_F2008_OBS | GFC_STD_F2003);
+				 | GFC_STD_F2008_OBS | GFC_STD_F2003
+				 | GFC_STD_F2018_DEL);
 
   /* Look for a blank between STOP and the stop-code for F2008 or later.  */
   if (gfc_current_form != FORM_FIXED && !(f95 || f03))
Index: gcc/fortran/options.c
===================================================================
--- gcc/fortran/options.c	(revision 260420)
+++ gcc/fortran/options.c	(working copy)
@@ -44,7 +44,7 @@ set_default_std_flags (void)
     | GFC_STD_F2003 | GFC_STD_F2008 | GFC_STD_F95 | GFC_STD_F77
     | GFC_STD_F2008_OBS | GFC_STD_F2008_TS | GFC_STD_GNU | GFC_STD_LEGACY
     | GFC_STD_F2018 | GFC_STD_F2018_DEL | GFC_STD_F2018_OBS;
-  gfc_option.warn_std = GFC_STD_F95_DEL | GFC_STD_LEGACY;
+  gfc_option.warn_std = GFC_STD_F2018_DEL | GFC_STD_F95_DEL | GFC_STD_LEGACY;
 }
 
 
@@ -706,7 +706,7 @@ gfc_handle_option (size_t scode, const char *arg,
 
     case OPT_std_f95:
       gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77
-			     | GFC_STD_F2008_OBS;
+			     | GFC_STD_F2008_OBS | GFC_STD_F2018_DEL;
       gfc_option.warn_std = GFC_STD_F95_OBS;
       gfc_option.max_continue_fixed = 19;
       gfc_option.max_continue_free = 39;
@@ -717,7 +717,7 @@ gfc_handle_option (size_t scode, const char *arg,
 
     case OPT_std_f2003:
       gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77 
-	| GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008_OBS;
+	| GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008_OBS | GFC_STD_F2018_DEL;
       gfc_option.warn_std = GFC_STD_F95_OBS;
       gfc_option.max_identifier_length = 63;
       warn_ampersand = 1;
@@ -726,7 +726,8 @@ gfc_handle_option (size_t scode, const char *arg,
 
     case OPT_std_f2008:
       gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77 
-	| GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008 | GFC_STD_F2008_OBS;
+	| GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008 | GFC_STD_F2008_OBS
+	| GFC_STD_F2018_DEL;
       gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS;
       gfc_option.max_identifier_length = 63;
       warn_ampersand = 1;
@@ -736,7 +737,7 @@ gfc_handle_option (size_t scode, const char *arg,
     case OPT_std_f2008ts:
       gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77 
 	| GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008 | GFC_STD_F2008_OBS
-	| GFC_STD_F2008_TS;
+	| GFC_STD_F2008_TS | GFC_STD_F2018_DEL;
       gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS;
       gfc_option.max_identifier_length = 63;
       warn_ampersand = 1;
Index: gcc/fortran/symbol.c
===================================================================
--- gcc/fortran/symbol.c	(revision 260420)
+++ gcc/fortran/symbol.c	(working copy)
@@ -2721,9 +2721,9 @@ gfc_define_st_label (gfc_st_label *lp, gfc_sl_type
 	    lp->defined = type;
 
 	  if (lp->referenced == ST_LABEL_DO_TARGET && type != ST_LABEL_DO_TARGET
-      	      && !gfc_notify_std (GFC_STD_F95_OBS, "DO termination statement "
-				  "which is not END DO or CONTINUE with "
-				  "label %d at %C", labelno))
+      	      && !gfc_notify_std (GFC_STD_F95_OBS | GFC_STD_F2018_DEL,
+				  "DO termination statement which is not END DO"
+				  " or CONTINUE with label %d at %C", labelno))
 	    return;
 	  break;
 
@@ -2778,8 +2778,8 @@ gfc_reference_st_label (gfc_st_label *lp, gfc_sl_t
     }
 
   if (lp->referenced == ST_LABEL_DO_TARGET && type == ST_LABEL_DO_TARGET
-      && !gfc_notify_std (GFC_STD_F95_OBS, "Shared DO termination label %d "
-			  "at %C", labelno))
+      && !gfc_notify_std (GFC_STD_F95_OBS | GFC_STD_F2018_DEL,
+			  "Shared DO termination label %d at %C", labelno))
     return false;
 
   if (lp->referenced != ST_LABEL_DO_TARGET)
Index: gcc/testsuite/gfortran.dg/g77/19990826-3.f
===================================================================
--- gcc/testsuite/gfortran.dg/g77/19990826-3.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/g77/19990826-3.f	(working copy)
@@ -1,4 +1,5 @@
 c { dg-do compile }
+c { dg-options "-std=legacy" }
 * Date: Thu, 19 Aug 1999 10:02:32 +0200
 * From: Frederic Devernay <dever...@istar.fr>
 * Organization: ISTAR
@@ -64,7 +65,7 @@ C
       IF(M2.LT.64)INDE=5
       IF(M2.LT.32)INDE=4
       DO 3 NUN =3,INUN
-      DO 3 NDE=3,INDE ! { dg-warning "Obsolescent feature: Shared DO termination" }
+      DO 3 NDE=3,INDE
       N10=2**NUN
       N20=2**NDE
       NDIF=(N10-N20)
Index: gcc/testsuite/gfortran.dg/g77/20020307-1.f
===================================================================
--- gcc/testsuite/gfortran.dg/g77/20020307-1.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/g77/20020307-1.f	(working copy)
@@ -1,4 +1,5 @@
 c { dg-do compile }
+c { dg-options "-std=legacy" }
       SUBROUTINE SWEEP
       PARAMETER(MAXDIM=4,MAXVEC=4**3*8,MAXT=20)
       REAL(KIND=8) B,W1,W2,BNORM,BINV,WT,W0,C1,C2,R1,R2
@@ -6,7 +7,7 @@ c { dg-do compile }
       DIMENSION BNORM(MAXVEC),BINV(MAXVEC),WT(MAXVEC),W0(MAXVEC)
       DIMENSION C1(MAXVEC),C2(MAXVEC),R1(MAXVEC),R2(MAXVEC)
       DO 200 ILAT=1,2**IDIM
-      DO 200 I1=1,IDIM  ! { dg-warning "Obsolescent feature: Shared DO termination" }
+      DO 200 I1=1,IDIM
       DO 220 I2=1,IDIM
       CALL INTACT(ILAT,I1,I1,W1)
 220   CONTINUE
Index: gcc/testsuite/gfortran.dg/g77/980310-3.f
===================================================================
--- gcc/testsuite/gfortran.dg/g77/980310-3.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/g77/980310-3.f	(working copy)
@@ -1,4 +1,5 @@
 c { dg-do compile }
+c { dg-options "-std=legacy" }
 c
 c This demonstrates a problem with g77 and pic on x86 where 
 c egcs 1.0.1 and earlier will generate bogus assembler output.
@@ -128,7 +129,7 @@ c     compute right side vector in resulting linea
 c
       basl = dlog10(2.0d0)
       do 240 i = low,igh
-         do 240 j = low,igh ! { dg-warning "Obsolescent feature: Shared DO termination" }
+         do 240 j = low,igh
             tb = b(i,j)
             ta = a(i,j)
             if (ta .eq. 0.0d0) go to 220
@@ -242,7 +243,7 @@ c
          ir = wk(i,1)
          fi = 2.0d0**ir
          if (i .lt. low) fi = 1.0d0
-         do 400 j =low,n ! { dg-warning "Obsolescent feature: Shared DO termination" }
+         do 400 j =low,n
             jc = cscale(j)
             fj = 2.0d0**jc
             if (j .le. igh) go to 390
Index: gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95
===================================================================
--- gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95	(revision 260420)
+++ gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95	(working copy)
@@ -1,4 +1,5 @@
 ! See also loop-1.f95.
+! { dg-additional-options "-std=legacy" }
 
 program test
   call test1
@@ -32,14 +33,12 @@ subroutine test1
   do 300 d = 1, 30, 6
       i = d
   300 a(i) = 1
-  ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 32 }
-  ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 32 }
+  ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 33 }
   !$acc loop
   do d = 1, 30, 5
        i = d
       a(i) = 2
   end do
-  ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 38 }
   ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 38 }
   !$acc loop
   do i = 1, 30
@@ -150,8 +149,7 @@ subroutine test1
     do i = 1, 3
         do r = 4, 6
         end do
-        ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 151 }
-        ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 151 }
+        ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 150 }
     end do
 
     ! Both seq and independent are not allowed
Index: gcc/testsuite/gfortran.dg/goacc/loop-1.f95
===================================================================
--- gcc/testsuite/gfortran.dg/goacc/loop-1.f95	(revision 260420)
+++ gcc/testsuite/gfortran.dg/goacc/loop-1.f95	(working copy)
@@ -1,4 +1,5 @@
 ! See also loop-1-2.f95.
+! { dg-additional-options "-std=legacy" }
 
 module test
   implicit none
@@ -32,14 +33,12 @@ subroutine test1
   do 300 d = 1, 30, 6
       i = d
   300 a(i) = 1
-  ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 32 }
-  ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 32 }
+  ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 33 }
   !$acc loop
   do d = 1, 30, 5
        i = d
       a(i) = 2
   end do
-  ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 38 }
   ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 38 }
   !$acc loop
   do i = 1, 30
@@ -150,8 +149,7 @@ subroutine test1
     do i = 1, 3
         do r = 4, 6
         end do
-        ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 151 }
-        ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 151 }
+        ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 150 }
     end do
 
     ! Both seq and independent are not allowed
Index: gcc/testsuite/gfortran.dg/gomp/appendix-a/a.6.1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/gomp/appendix-a/a.6.1.f90	(revision 260420)
+++ gcc/testsuite/gfortran.dg/gomp/appendix-a/a.6.1.f90	(working copy)
@@ -1,4 +1,5 @@
 ! { dg-do compile }
+! { dg-options "-std=legacy" }
 
       SUBROUTINE WORK(I, J)
       INTEGER I,J
Index: gcc/testsuite/gfortran.dg/gomp/appendix-a/a.6.2.f90
===================================================================
--- gcc/testsuite/gfortran.dg/gomp/appendix-a/a.6.2.f90	(revision 260420)
+++ gcc/testsuite/gfortran.dg/gomp/appendix-a/a.6.2.f90	(working copy)
@@ -1,4 +1,5 @@
 ! { dg-do compile }
+! { dg-additional-options "-std=legacy" }
 
         SUBROUTINE WORK(I, J)
         INTEGER I,J
Index: gcc/testsuite/gfortran.dg/gomp/do-1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/gomp/do-1.f90	(revision 260420)
+++ gcc/testsuite/gfortran.dg/gomp/do-1.f90	(working copy)
@@ -1,5 +1,5 @@
 ! { dg-do compile }
-! { dg-options "-O -fopenmp -fdump-tree-omplower" }
+! { dg-options "-O -fopenmp -fdump-tree-omplower -std=legacy" }
 
 subroutine foo (i, j, k, s, a)
   integer :: i, j, k, s, a(100), l
Index: gcc/testsuite/gfortran.dg/gomp/omp_do1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/gomp/omp_do1.f90	(revision 260420)
+++ gcc/testsuite/gfortran.dg/gomp/omp_do1.f90	(working copy)
@@ -1,5 +1,5 @@
 ! { dg-do compile }
-! { dg-options "-fopenmp -std=gnu" }
+! { dg-options "-fopenmp -std=legacy" }
 subroutine foo
   integer :: i, j
   integer, dimension (30) :: a
@@ -24,11 +24,11 @@ subroutine foo
     i = i + 1
   end do
 !$omp do
-  do 300 d = 1, 30, 6 ! { dg-warning "Deleted feature: Loop variable" }
+  do 300 d = 1, 30, 6
     i = d
 300 a(i) = 1
 !$omp do
-  do d = 1, 30, 5 ! { dg-warning "Deleted feature: Loop variable" }
+  do d = 1, 30, 5
     i = d
     a(i) = 2
   end do
Index: gcc/testsuite/gfortran.dg/pr17229.f
===================================================================
--- gcc/testsuite/gfortran.dg/pr17229.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/pr17229.f	(working copy)
@@ -1,5 +1,6 @@
 ! PR fortran/17229
 ! { dg-do run }
+! { dg-options "-std=legacy" }
 
       integer i
       logical l
@@ -6,18 +7,18 @@
 
       l = .false.
       i = -1
-      if (l) if (i) 999,999,999 ! { dg-warning "Obsolescent feature" }
+      if (l) if (i) 999,999,999
 
       l = .true.
-      if (l) if (i) 10,999,999 ! { dg-warning "Obsolescent feature" }
+      if (l) if (i) 10,999,999
       go to 999
 
    10 i = 0
-      if (l) if (i) 999,20,999 ! { dg-warning "Obsolescent feature" }
+      if (l) if (i) 999,20,999
       go to 999
 
    20 i = 1
-      if (l) if (i) 999,999,30 ! { dg-warning "Obsolescent feature" }
+      if (l) if (i) 999,999,30
       go to 999
 
   999 STOP 1
Index: gcc/testsuite/gfortran.dg/pr37243.f
===================================================================
--- gcc/testsuite/gfortran.dg/pr37243.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/pr37243.f	(working copy)
@@ -1,5 +1,6 @@
 ! PR rtl-optimization/37243
 ! { dg-do run }
+! { dg-options "-std=legacy" }
 ! { dg-add-options ieee }
 ! Check if register allocator handles IR flattening correctly.
       SUBROUTINE SCHMD(V,M,N,LDV)
@@ -13,10 +14,10 @@
       DO 160 I = 1,M
       DUMI = ZERO
       DO 100 K = 1,N
-  100 DUMI = DUMI+V(K,I)*V(K,I) ! { dg-warning "Obsolescent feature: DO termination statement which is not END DO or CONTINUE" }
+  100 DUMI = DUMI+V(K,I)*V(K,I)
       DUMI = ONE/ SQRT(DUMI)
       DO 120 K = 1,N
-  120 V(K,I) = V(K,I)*DUMI ! { dg-warning "Obsolescent feature: DO termination statement which is not END DO or CONTINUE" }
+  120 V(K,I) = V(K,I)*DUMI
       IF (I .EQ. M) GO TO 160
       I1 = I+1
       DO 140 J = I1,M
@@ -34,15 +35,15 @@
   220 J = J+1
       IF (J .GT. N) GO TO 320
       DO 240 K = 1,N
-  240 V(K,I) = ZERO ! { dg-warning "Obsolescent feature: DO termination statement which is not END DO or CONTINUE" }
+  240 V(K,I) = ZERO
       CALL DAXPY(N,DUM,V(1,I),1,V(1,I),1)
   260 CONTINUE
       DUMI = ZERO
       DO 280 K = 1,N
-  280 DUMI = DUMI+V(K,I)*V(K,I) ! { dg-warning "Obsolescent feature: DO termination statement which is not END DO or CONTINUE" }
+  280 DUMI = DUMI+V(K,I)*V(K,I)
       IF ( ABS(DUMI) .LT. TOL) GO TO 220
       DO 300 K = 1,N
-  300 V(K,I) = V(K,I)*DUMI ! { dg-warning "Obsolescent feature: DO termination statement which is not END DO or CONTINUE" }
+  300 V(K,I) = V(K,I)*DUMI
       GO TO 200
   320 END
       program main
Index: gcc/testsuite/gfortran.dg/pr49721-1.f
===================================================================
--- gcc/testsuite/gfortran.dg/pr49721-1.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/pr49721-1.f	(working copy)
@@ -1,6 +1,6 @@
 ! PR middle-end/49721
 ! { dg-do compile }
-! { dg-options "-O3 -funroll-loops" }
+! { dg-options "-O3 -funroll-loops -std=legacy" }
 
       subroutine midbloc6(c,a2,a2i,q)
       parameter (ndim2=6)
Index: gcc/testsuite/gfortran.dg/pr58484.f
===================================================================
--- gcc/testsuite/gfortran.dg/pr58484.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/pr58484.f	(working copy)
@@ -1,5 +1,5 @@
 ! { dg-do compile }
-! { dg-options "-O2" }
+! { dg-options "-O2 -std=legacy" }
       SUBROUTINE UMPSE(AIBJ,NOC,NDIM,NOCA,NVIRA,NOCCA,E2)
       DIMENSION AIBJ(NOC,NDIM,*)
       DO 20 MA=1,NVIRA
Index: gcc/testsuite/gfortran.dg/pr81175.f
===================================================================
--- gcc/testsuite/gfortran.dg/pr81175.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/pr81175.f	(working copy)
@@ -1,5 +1,5 @@
 ! { dg-do compile }
-! { dg-options "-Ofast -fwrapv" }
+! { dg-options "-Ofast -fwrapv -std=legacy" }
 ! { dg-additional-options "-march=broadwell" { target x86_64-*-* i?86-*-* } }
       SUBROUTINE ECPDRA(IC4C,FP,FQ,G)
       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
Index: gcc/testsuite/gfortran.dg/pr81723.f
===================================================================
--- gcc/testsuite/gfortran.dg/pr81723.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/pr81723.f	(working copy)
@@ -1,5 +1,5 @@
 ! { dg-do compile }
-! { dg-options "-O3 -fno-automatic" }
+! { dg-options "-O3 -fno-automatic -std=legacy" }
 
       FUNCTION WWERF(Z)
 
Index: gcc/testsuite/gfortran.dg/predcom-2.f
===================================================================
--- gcc/testsuite/gfortran.dg/predcom-2.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/predcom-2.f	(working copy)
@@ -1,7 +1,7 @@
 ! PR 32220, ICE when the loop is not unrolled enough to eliminate all 
 !   register copies
 ! { dg-do compile }
-! { dg-options "-O3" }
+! { dg-options "-O3 -std=legacy" }
 
       subroutine derv (b,cosxy,thick)
 c
Index: gcc/testsuite/gfortran.dg/vect/Ofast-pr50414.f90
===================================================================
--- gcc/testsuite/gfortran.dg/vect/Ofast-pr50414.f90	(revision 260420)
+++ gcc/testsuite/gfortran.dg/vect/Ofast-pr50414.f90	(working copy)
@@ -1,4 +1,5 @@
 ! { dg-do compile }
+! { dg-options "-std=legacy" }
 
       SUBROUTINE  SUB  (A,L,YMAX)
       DIMENSION A(L)
Index: gcc/testsuite/gfortran.dg/vect/cost-model-pr34445a.f
===================================================================
--- gcc/testsuite/gfortran.dg/vect/cost-model-pr34445a.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/vect/cost-model-pr34445a.f	(working copy)
@@ -1,4 +1,5 @@
 c { dg-do compile }
+c { dg-options "-std=legacy" }
       subroutine derv (xx,b,bv,det,r,s,t,ndopt,cosxy,thick,edis,
      1                  vni,vnt)
       implicit real*8 (a-h,o-z)
Index: gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f
===================================================================
--- gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f	(working copy)
@@ -1,6 +1,6 @@
 ! { dg-do compile }
 ! { dg-require-effective-target vect_double }
-! { dg-options "-O3 --param vect-max-peeling-for-alignment=0 -fpredictive-commoning -fdump-tree-pcom-details" }
+! { dg-options "-O3 --param vect-max-peeling-for-alignment=0 -fpredictive-commoning -fdump-tree-pcom-details -std=legacy" }
 ! { dg-additional-options "-mprefer-avx128" { target { i?86-*-* x86_64-*-* } } }
 ! { dg-additional-options "-mzarch" { target { s390*-*-* } } }
 
Index: gcc/testsuite/gfortran.dg/vect/pr52580.f
===================================================================
--- gcc/testsuite/gfortran.dg/vect/pr52580.f	(revision 260420)
+++ gcc/testsuite/gfortran.dg/vect/pr52580.f	(working copy)
@@ -1,4 +1,5 @@
 ! { dg-do compile }
+! { dg-options "-std=legacy" }
 ! { dg-require-effective-target vect_double }
       SUBROUTINE CALC2
       IMPLICIT REAL*8	(A-H, O-Z)

Reply via email to