Commit 67e9518e by Janus Weil

re PR fortran/85841 ([F2018] reject deleted features)

2018-05-21  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/85841
	* libgfortran.h: New macros GFC_STD_OPT_*.
	* 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): Use GFC_STD_OPT_* macros.
	* 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-21  Janus Weil  <janus@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.

From-SVN: r260433
parent f3f7cefe
2018-05-21 Janus Weil <janus@gcc.gnu.org>
PR fortran/85841
* libgfortran.h: New macros GFC_STD_OPT_*.
* 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): Use GFC_STD_OPT_* macros.
* 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 Paul Thomas <pault@gcc.gnu.org> 2018-05-20 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80657 PR fortran/80657
......
...@@ -842,6 +842,40 @@ gfc_notification_std (int std) ...@@ -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) /* Possibly issue a warning/error about use of a nonstandard (or deleted)
feature. An error/warning will be issued if the currently selected feature. An error/warning will be issued if the currently selected
standard does not contain the requested bits. Return false if standard does not contain the requested bits. Return false if
...@@ -851,55 +885,24 @@ bool ...@@ -851,55 +885,24 @@ bool
gfc_notify_std (int std, const char *gmsgid, ...) gfc_notify_std (int std, const char *gmsgid, ...)
{ {
va_list argp; va_list argp;
bool warning;
const char *msg, *msg2; const char *msg, *msg2;
char *buffer; char *buffer;
warning = ((gfc_option.warn_std & std) != 0) && !inhibit_warnings; /* Determine whether an error or a warning is needed. */
if ((gfc_option.allow_std & std) != 0 && !warning) const int wstd = std & gfc_option.warn_std; /* Standard to warn about. */
return true; 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) if (suppress_errors)
return warning ? true : false; return !error;
switch (std) if (error)
{ msg = notify_std_msg (estd);
case GFC_STD_F2018_DEL: else
msg = _("Fortran 2018 deleted feature:"); msg = notify_std_msg (wstd);
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 ();
}
msg2 = _(gmsgid); msg2 = _(gmsgid);
buffer = (char *) alloca (strlen (msg) + strlen (msg2) + 2); buffer = (char *) alloca (strlen (msg) + strlen (msg2) + 2);
...@@ -908,13 +911,16 @@ gfc_notify_std (int std, const char *gmsgid, ...) ...@@ -908,13 +911,16 @@ gfc_notify_std (int std, const char *gmsgid, ...)
strcat (buffer, msg2); strcat (buffer, msg2);
va_start (argp, gmsgid); va_start (argp, gmsgid);
if (warning) if (error)
gfc_warning (0, buffer, argp);
else
gfc_error_opt (0, buffer, argp); gfc_error_opt (0, buffer, argp);
else
gfc_warning (0, buffer, argp);
va_end (argp); va_end (argp);
return (warning && !warnings_are_errors) ? true : false; if (error)
return false;
else
return (warning && !warnings_are_errors);
} }
......
...@@ -37,6 +37,16 @@ along with GCC; see the file COPYING3. If not see ...@@ -37,6 +37,16 @@ along with GCC; see the file COPYING3. If not see
#define GFC_STD_F77 (1<<0) /* Included in F77, but not deleted or #define GFC_STD_F77 (1<<0) /* Included in F77, but not deleted or
obsolescent in later standards. */ obsolescent in later standards. */
/* Combinations of the above flags that specify which classes of features
* are allowed with a certain -std option. */
#define GFC_STD_OPT_F95 (GFC_STD_F77 | GFC_STD_F95 | GFC_STD_F95_OBS \
| GFC_STD_F2008_OBS | GFC_STD_F2018_OBS \
| GFC_STD_F2018_DEL)
#define GFC_STD_OPT_F03 (GFC_STD_OPT_F95 | GFC_STD_F2003)
#define GFC_STD_OPT_F08 (GFC_STD_OPT_F03 | GFC_STD_F2008)
#define GFC_STD_OPT_F08TS (GFC_STD_OPT_F08 | GFC_STD_F2008_TS)
#define GFC_STD_OPT_F18 ((GFC_STD_OPT_F08TS | GFC_STD_F2018) \
& (~GFC_STD_F2018_DEL))
/* Bitmasks for the various FPE that can be enabled. These need to be straight integers /* Bitmasks for the various FPE that can be enabled. These need to be straight integers
e.g., 8 instead of (1<<3), because they will be included in Fortran source. */ e.g., 8 instead of (1<<3), because they will be included in Fortran source. */
......
...@@ -1442,7 +1442,8 @@ match_arithmetic_if (void) ...@@ -1442,7 +1442,8 @@ match_arithmetic_if (void)
return MATCH_ERROR; 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; return MATCH_ERROR;
new_st.op = EXEC_ARITHMETIC_IF; new_st.op = EXEC_ARITHMETIC_IF;
...@@ -1522,7 +1523,8 @@ gfc_match_if (gfc_statement *if_type) ...@@ -1522,7 +1523,8 @@ gfc_match_if (gfc_statement *if_type)
return MATCH_ERROR; 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; return MATCH_ERROR;
new_st.op = EXEC_ARITHMETIC_IF; new_st.op = EXEC_ARITHMETIC_IF;
...@@ -2938,12 +2940,10 @@ gfc_match_stopcode (gfc_statement st) ...@@ -2938,12 +2940,10 @@ gfc_match_stopcode (gfc_statement st)
bool f95, f03; bool f95, f03;
/* Set f95 for -std=f95. */ /* Set f95 for -std=f95. */
f95 = gfc_option.allow_std == (GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77 f95 = (gfc_option.allow_std == GFC_STD_OPT_F95);
| GFC_STD_F2008_OBS);
/* Set f03 for -std=f2003. */ /* Set f03 for -std=f2003. */
f03 = gfc_option.allow_std == (GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77 f03 = (gfc_option.allow_std == GFC_STD_OPT_F03);
| GFC_STD_F2008_OBS | GFC_STD_F2003);
/* Look for a blank between STOP and the stop-code for F2008 or later. */ /* Look for a blank between STOP and the stop-code for F2008 or later. */
if (gfc_current_form != FORM_FIXED && !(f95 || f03)) if (gfc_current_form != FORM_FIXED && !(f95 || f03))
......
...@@ -44,7 +44,7 @@ set_default_std_flags (void) ...@@ -44,7 +44,7 @@ set_default_std_flags (void)
| GFC_STD_F2003 | GFC_STD_F2008 | GFC_STD_F95 | GFC_STD_F77 | 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_F2008_OBS | GFC_STD_F2008_TS | GFC_STD_GNU | GFC_STD_LEGACY
| GFC_STD_F2018 | GFC_STD_F2018_DEL | GFC_STD_F2018_OBS; | 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;
} }
...@@ -705,8 +705,7 @@ gfc_handle_option (size_t scode, const char *arg, int value, ...@@ -705,8 +705,7 @@ gfc_handle_option (size_t scode, const char *arg, int value,
break; break;
case OPT_std_f95: case OPT_std_f95:
gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77 gfc_option.allow_std = GFC_STD_OPT_F95;
| GFC_STD_F2008_OBS;
gfc_option.warn_std = GFC_STD_F95_OBS; gfc_option.warn_std = GFC_STD_F95_OBS;
gfc_option.max_continue_fixed = 19; gfc_option.max_continue_fixed = 19;
gfc_option.max_continue_free = 39; gfc_option.max_continue_free = 39;
...@@ -716,8 +715,7 @@ gfc_handle_option (size_t scode, const char *arg, int value, ...@@ -716,8 +715,7 @@ gfc_handle_option (size_t scode, const char *arg, int value,
break; break;
case OPT_std_f2003: case OPT_std_f2003:
gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77 gfc_option.allow_std = GFC_STD_OPT_F03;
| GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008_OBS;
gfc_option.warn_std = GFC_STD_F95_OBS; gfc_option.warn_std = GFC_STD_F95_OBS;
gfc_option.max_identifier_length = 63; gfc_option.max_identifier_length = 63;
warn_ampersand = 1; warn_ampersand = 1;
...@@ -725,8 +723,7 @@ gfc_handle_option (size_t scode, const char *arg, int value, ...@@ -725,8 +723,7 @@ gfc_handle_option (size_t scode, const char *arg, int value,
break; break;
case OPT_std_f2008: case OPT_std_f2008:
gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77 gfc_option.allow_std = GFC_STD_OPT_F08;
| GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008 | GFC_STD_F2008_OBS;
gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS; gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS;
gfc_option.max_identifier_length = 63; gfc_option.max_identifier_length = 63;
warn_ampersand = 1; warn_ampersand = 1;
...@@ -734,9 +731,7 @@ gfc_handle_option (size_t scode, const char *arg, int value, ...@@ -734,9 +731,7 @@ gfc_handle_option (size_t scode, const char *arg, int value,
break; break;
case OPT_std_f2008ts: case OPT_std_f2008ts:
gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77 gfc_option.allow_std = GFC_STD_OPT_F08TS;
| GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008 | GFC_STD_F2008_OBS
| GFC_STD_F2008_TS;
gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS; gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS;
gfc_option.max_identifier_length = 63; gfc_option.max_identifier_length = 63;
warn_ampersand = 1; warn_ampersand = 1;
...@@ -744,9 +739,7 @@ gfc_handle_option (size_t scode, const char *arg, int value, ...@@ -744,9 +739,7 @@ gfc_handle_option (size_t scode, const char *arg, int value,
break; break;
case OPT_std_f2018: case OPT_std_f2018:
gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77 gfc_option.allow_std = GFC_STD_OPT_F18;
| GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008 | GFC_STD_F2008_OBS
| GFC_STD_F2008_TS | GFC_STD_F2018 | GFC_STD_F2018_OBS;
gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS
| GFC_STD_F2018_OBS; | GFC_STD_F2018_OBS;
gfc_option.max_identifier_length = 63; gfc_option.max_identifier_length = 63;
......
...@@ -2721,9 +2721,9 @@ gfc_define_st_label (gfc_st_label *lp, gfc_sl_type type, locus *label_locus) ...@@ -2721,9 +2721,9 @@ gfc_define_st_label (gfc_st_label *lp, gfc_sl_type type, locus *label_locus)
lp->defined = type; lp->defined = type;
if (lp->referenced == ST_LABEL_DO_TARGET && type != ST_LABEL_DO_TARGET if (lp->referenced == ST_LABEL_DO_TARGET && type != ST_LABEL_DO_TARGET
&& !gfc_notify_std (GFC_STD_F95_OBS, "DO termination statement " && !gfc_notify_std (GFC_STD_F95_OBS | GFC_STD_F2018_DEL,
"which is not END DO or CONTINUE with " "DO termination statement which is not END DO"
"label %d at %C", labelno)) " or CONTINUE with label %d at %C", labelno))
return; return;
break; break;
...@@ -2778,8 +2778,8 @@ gfc_reference_st_label (gfc_st_label *lp, gfc_sl_type type) ...@@ -2778,8 +2778,8 @@ gfc_reference_st_label (gfc_st_label *lp, gfc_sl_type type)
} }
if (lp->referenced == ST_LABEL_DO_TARGET && type == ST_LABEL_DO_TARGET if (lp->referenced == ST_LABEL_DO_TARGET && type == ST_LABEL_DO_TARGET
&& !gfc_notify_std (GFC_STD_F95_OBS, "Shared DO termination label %d " && !gfc_notify_std (GFC_STD_F95_OBS | GFC_STD_F2018_DEL,
"at %C", labelno)) "Shared DO termination label %d at %C", labelno))
return false; return false;
if (lp->referenced != ST_LABEL_DO_TARGET) if (lp->referenced != ST_LABEL_DO_TARGET)
......
2018-05-21 Janus Weil <janus@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.
2018-05-20 Paul Thomas <pault@gcc.gnu.org> 2018-05-20 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80657 PR fortran/80657
......
c { dg-do compile } c { dg-do compile }
c { dg-options "-std=legacy" }
* Date: Thu, 19 Aug 1999 10:02:32 +0200 * Date: Thu, 19 Aug 1999 10:02:32 +0200
* From: Frederic Devernay <devernay@istar.fr> * From: Frederic Devernay <devernay@istar.fr>
* Organization: ISTAR * Organization: ISTAR
...@@ -64,7 +65,7 @@ C ...@@ -64,7 +65,7 @@ C
IF(M2.LT.64)INDE=5 IF(M2.LT.64)INDE=5
IF(M2.LT.32)INDE=4 IF(M2.LT.32)INDE=4
DO 3 NUN =3,INUN 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 N10=2**NUN
N20=2**NDE N20=2**NDE
NDIF=(N10-N20) NDIF=(N10-N20)
......
c { dg-do compile } c { dg-do compile }
c { dg-options "-std=legacy" }
SUBROUTINE SWEEP SUBROUTINE SWEEP
PARAMETER(MAXDIM=4,MAXVEC=4**3*8,MAXT=20) PARAMETER(MAXDIM=4,MAXVEC=4**3*8,MAXT=20)
REAL(KIND=8) B,W1,W2,BNORM,BINV,WT,W0,C1,C2,R1,R2 REAL(KIND=8) B,W1,W2,BNORM,BINV,WT,W0,C1,C2,R1,R2
...@@ -6,7 +7,7 @@ c { dg-do compile } ...@@ -6,7 +7,7 @@ c { dg-do compile }
DIMENSION BNORM(MAXVEC),BINV(MAXVEC),WT(MAXVEC),W0(MAXVEC) DIMENSION BNORM(MAXVEC),BINV(MAXVEC),WT(MAXVEC),W0(MAXVEC)
DIMENSION C1(MAXVEC),C2(MAXVEC),R1(MAXVEC),R2(MAXVEC) DIMENSION C1(MAXVEC),C2(MAXVEC),R1(MAXVEC),R2(MAXVEC)
DO 200 ILAT=1,2**IDIM 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 DO 220 I2=1,IDIM
CALL INTACT(ILAT,I1,I1,W1) CALL INTACT(ILAT,I1,I1,W1)
220 CONTINUE 220 CONTINUE
......
c { dg-do compile } c { dg-do compile }
c { dg-options "-std=legacy" }
c c
c This demonstrates a problem with g77 and pic on x86 where c This demonstrates a problem with g77 and pic on x86 where
c egcs 1.0.1 and earlier will generate bogus assembler output. c egcs 1.0.1 and earlier will generate bogus assembler output.
...@@ -128,7 +129,7 @@ c compute right side vector in resulting linear equations ...@@ -128,7 +129,7 @@ c compute right side vector in resulting linear equations
c c
basl = dlog10(2.0d0) basl = dlog10(2.0d0)
do 240 i = low,igh 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) tb = b(i,j)
ta = a(i,j) ta = a(i,j)
if (ta .eq. 0.0d0) go to 220 if (ta .eq. 0.0d0) go to 220
...@@ -242,7 +243,7 @@ c ...@@ -242,7 +243,7 @@ c
ir = wk(i,1) ir = wk(i,1)
fi = 2.0d0**ir fi = 2.0d0**ir
if (i .lt. low) fi = 1.0d0 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) jc = cscale(j)
fj = 2.0d0**jc fj = 2.0d0**jc
if (j .le. igh) go to 390 if (j .le. igh) go to 390
......
! See also loop-1.f95. ! See also loop-1.f95.
! { dg-additional-options "-std=legacy" }
program test program test
call test1 call test1
...@@ -32,14 +33,12 @@ subroutine test1 ...@@ -32,14 +33,12 @@ subroutine test1
do 300 d = 1, 30, 6 do 300 d = 1, 30, 6
i = d i = d
300 a(i) = 1 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 *-*-* } 33 }
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 32 }
!$acc loop !$acc loop
do d = 1, 30, 5 do d = 1, 30, 5
i = d i = d
a(i) = 2 a(i) = 2
end do 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 } ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 38 }
!$acc loop !$acc loop
do i = 1, 30 do i = 1, 30
...@@ -150,8 +149,7 @@ subroutine test1 ...@@ -150,8 +149,7 @@ subroutine test1
do i = 1, 3 do i = 1, 3
do r = 4, 6 do r = 4, 6
end do 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 *-*-* } 150 }
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 151 }
end do end do
! Both seq and independent are not allowed ! Both seq and independent are not allowed
......
! See also loop-1-2.f95. ! See also loop-1-2.f95.
! { dg-additional-options "-std=legacy" }
module test module test
implicit none implicit none
...@@ -32,14 +33,12 @@ subroutine test1 ...@@ -32,14 +33,12 @@ subroutine test1
do 300 d = 1, 30, 6 do 300 d = 1, 30, 6
i = d i = d
300 a(i) = 1 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 *-*-* } 33 }
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 32 }
!$acc loop !$acc loop
do d = 1, 30, 5 do d = 1, 30, 5
i = d i = d
a(i) = 2 a(i) = 2
end do 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 } ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 38 }
!$acc loop !$acc loop
do i = 1, 30 do i = 1, 30
...@@ -150,8 +149,7 @@ subroutine test1 ...@@ -150,8 +149,7 @@ subroutine test1
do i = 1, 3 do i = 1, 3
do r = 4, 6 do r = 4, 6
end do 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 *-*-* } 150 }
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 151 }
end do end do
! Both seq and independent are not allowed ! Both seq and independent are not allowed
......
! { dg-do compile } ! { dg-do compile }
! { dg-options "-std=legacy" }
SUBROUTINE WORK(I, J) SUBROUTINE WORK(I, J)
INTEGER I,J INTEGER I,J
......
! { dg-do compile } ! { dg-do compile }
! { dg-additional-options "-std=legacy" }
SUBROUTINE WORK(I, J) SUBROUTINE WORK(I, J)
INTEGER I,J INTEGER I,J
......
! { dg-do compile } ! { 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) subroutine foo (i, j, k, s, a)
integer :: i, j, k, s, a(100), l integer :: i, j, k, s, a(100), l
......
! { dg-do compile } ! { dg-do compile }
! { dg-options "-fopenmp -std=gnu" } ! { dg-options "-fopenmp -std=legacy" }
subroutine foo subroutine foo
integer :: i, j integer :: i, j
integer, dimension (30) :: a integer, dimension (30) :: a
...@@ -24,11 +24,11 @@ subroutine foo ...@@ -24,11 +24,11 @@ subroutine foo
i = i + 1 i = i + 1
end do end do
!$omp do !$omp do
do 300 d = 1, 30, 6 ! { dg-warning "Deleted feature: Loop variable" } do 300 d = 1, 30, 6
i = d i = d
300 a(i) = 1 300 a(i) = 1
!$omp do !$omp do
do d = 1, 30, 5 ! { dg-warning "Deleted feature: Loop variable" } do d = 1, 30, 5
i = d i = d
a(i) = 2 a(i) = 2
end do end do
......
! PR fortran/17229 ! PR fortran/17229
! { dg-do run } ! { dg-do run }
! { dg-options "-std=legacy" }
integer i integer i
logical l logical l
l = .false. l = .false.
i = -1 i = -1
if (l) if (i) 999,999,999 ! { dg-warning "Obsolescent feature" } if (l) if (i) 999,999,999
l = .true. l = .true.
if (l) if (i) 10,999,999 ! { dg-warning "Obsolescent feature" } if (l) if (i) 10,999,999
go to 999 go to 999
10 i = 0 10 i = 0
if (l) if (i) 999,20,999 ! { dg-warning "Obsolescent feature" } if (l) if (i) 999,20,999
go to 999 go to 999
20 i = 1 20 i = 1
if (l) if (i) 999,999,30 ! { dg-warning "Obsolescent feature" } if (l) if (i) 999,999,30
go to 999 go to 999
999 STOP 1 999 STOP 1
......
! PR rtl-optimization/37243 ! PR rtl-optimization/37243
! { dg-do run } ! { dg-do run }
! { dg-options "-std=legacy" }
! { dg-add-options ieee } ! { dg-add-options ieee }
! Check if register allocator handles IR flattening correctly. ! Check if register allocator handles IR flattening correctly.
SUBROUTINE SCHMD(V,M,N,LDV) SUBROUTINE SCHMD(V,M,N,LDV)
...@@ -13,10 +14,10 @@ ...@@ -13,10 +14,10 @@
DO 160 I = 1,M DO 160 I = 1,M
DUMI = ZERO DUMI = ZERO
DO 100 K = 1,N 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) DUMI = ONE/ SQRT(DUMI)
DO 120 K = 1,N 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 IF (I .EQ. M) GO TO 160
I1 = I+1 I1 = I+1
DO 140 J = I1,M DO 140 J = I1,M
...@@ -34,15 +35,15 @@ ...@@ -34,15 +35,15 @@
220 J = J+1 220 J = J+1
IF (J .GT. N) GO TO 320 IF (J .GT. N) GO TO 320
DO 240 K = 1,N 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) CALL DAXPY(N,DUM,V(1,I),1,V(1,I),1)
260 CONTINUE 260 CONTINUE
DUMI = ZERO DUMI = ZERO
DO 280 K = 1,N 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 IF ( ABS(DUMI) .LT. TOL) GO TO 220
DO 300 K = 1,N 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 GO TO 200
320 END 320 END
program main program main
......
! PR middle-end/49721 ! PR middle-end/49721
! { dg-do compile } ! { dg-do compile }
! { dg-options "-O3 -funroll-loops" } ! { dg-options "-O3 -funroll-loops -std=legacy" }
subroutine midbloc6(c,a2,a2i,q) subroutine midbloc6(c,a2,a2i,q)
parameter (ndim2=6) parameter (ndim2=6)
......
! { dg-do compile } ! { dg-do compile }
! { dg-options "-O2" } ! { dg-options "-O2 -std=legacy" }
SUBROUTINE UMPSE(AIBJ,NOC,NDIM,NOCA,NVIRA,NOCCA,E2) SUBROUTINE UMPSE(AIBJ,NOC,NDIM,NOCA,NVIRA,NOCCA,E2)
DIMENSION AIBJ(NOC,NDIM,*) DIMENSION AIBJ(NOC,NDIM,*)
DO 20 MA=1,NVIRA DO 20 MA=1,NVIRA
......
! { dg-do compile } ! { dg-do compile }
! { dg-options "-Ofast -fwrapv" } ! { dg-options "-Ofast -fwrapv -std=legacy" }
! { dg-additional-options "-march=broadwell" { target x86_64-*-* i?86-*-* } } ! { dg-additional-options "-march=broadwell" { target x86_64-*-* i?86-*-* } }
SUBROUTINE ECPDRA(IC4C,FP,FQ,G) SUBROUTINE ECPDRA(IC4C,FP,FQ,G)
IMPLICIT DOUBLE PRECISION (A-H,O-Z) IMPLICIT DOUBLE PRECISION (A-H,O-Z)
......
! { dg-do compile } ! { dg-do compile }
! { dg-options "-O3 -fno-automatic" } ! { dg-options "-O3 -fno-automatic -std=legacy" }
FUNCTION WWERF(Z) FUNCTION WWERF(Z)
......
! PR 32220, ICE when the loop is not unrolled enough to eliminate all ! PR 32220, ICE when the loop is not unrolled enough to eliminate all
! register copies ! register copies
! { dg-do compile } ! { dg-do compile }
! { dg-options "-O3" } ! { dg-options "-O3 -std=legacy" }
subroutine derv (b,cosxy,thick) subroutine derv (b,cosxy,thick)
c c
......
! { dg-do compile } ! { dg-do compile }
! { dg-options "-std=legacy" }
SUBROUTINE SUB (A,L,YMAX) SUBROUTINE SUB (A,L,YMAX)
DIMENSION A(L) DIMENSION A(L)
......
c { dg-do compile } c { dg-do compile }
c { dg-options "-std=legacy" }
subroutine derv (xx,b,bv,det,r,s,t,ndopt,cosxy,thick,edis, subroutine derv (xx,b,bv,det,r,s,t,ndopt,cosxy,thick,edis,
1 vni,vnt) 1 vni,vnt)
implicit real*8 (a-h,o-z) implicit real*8 (a-h,o-z)
......
! { dg-do compile } ! { dg-do compile }
! { dg-require-effective-target vect_double } ! { 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 "-mprefer-avx128" { target { i?86-*-* x86_64-*-* } } }
! { dg-additional-options "-mzarch" { target { s390*-*-* } } } ! { dg-additional-options "-mzarch" { target { s390*-*-* } } }
......
! { dg-do compile } ! { dg-do compile }
! { dg-options "-std=legacy" }
! { dg-require-effective-target vect_double } ! { dg-require-effective-target vect_double }
SUBROUTINE CALC2 SUBROUTINE CALC2
IMPLICIT REAL*8 (A-H, O-Z) IMPLICIT REAL*8 (A-H, O-Z)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment