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)