On Thu, Nov 8, 2018 at 12:54 PM Jakub Jelinek <ja...@redhat.com> wrote: > > On Thu, Nov 08, 2018 at 12:09:33PM -0500, Fritz Reese wrote: > > > What about the > > > /* Allow legacy code without warnings. */ > > > gfc_option.allow_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL > > > | GFC_STD_GNU | GFC_STD_LEGACY; > > > gfc_option.warn_std &= ~(GFC_STD_LEGACY | GFC_STD_F95_DEL); > > > that is done for value, shouldn't set_dec_flags remove those > > > flags again? Maybe not the allow_std ones, because those are set already > > > by > > > default, perhaps just the warn_std flags? > > > > > > > Sure. I wasn't convinced about this and how it might interplay with > > -std= so I left it alone, but I suppose it makes sense to unsuppress > > the warnings when disabling -fdec. > > Perhaps it might be better not to change the allow_std/warn_std flags > during the option parsing, instead set or clear say flag_dec and > only when option processing is being finalized (gfc_post_options) > check if flag_dec is set and set those. It would change behavior of > -fdec -std=f2018 and similar though. Not sure what users expect. >
Actually, the gcc frontend appears to move -std= before the language-specific options before f951 is even executed regardless of its location compared to the -fdec flags. I don't know if this is a bug or if it is by design -- the feeling I get is that the gcc frontend processes it first since it is recognized before the flang specific options. Therefore, greedily setting the standard options the first time flag_dec appears means the standard information is lost and I believe your suggestion is correct: the standard flags must be set only once in gfc_post_options. In fact the new testcase dec_bitwise_ops_3.f90 is a good test of this: it uses -fdec -fno-dec -std=legacy to avoid warnings for XOR. With the version posted previously, the -std=legacy is overwritten by -fno-dec and warnings still appear. Here's what I'd change from the previous patch to support this: diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index af89a5d2faf..b7f7360215c 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -66,16 +66,6 @@ set_default_std_flags (void) static void set_dec_flags (int value) { - /* Allow legacy code without warnings. - Nb. We do not unset the allowed standards with value == 0 because - they are set by default in set_default_std_flags. */ - if (value) - gfc_option.allow_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL - | GFC_STD_GNU | GFC_STD_LEGACY; - - SET_BITFLAG (gfc_option.warn_std, !value, GFC_STD_LEGACY); - SET_BITFLAG (gfc_option.warn_std, !value, GFC_STD_F95_DEL); - /* Set (or unset) other DEC compatibility extensions. */ SET_BITFLAG (flag_dollar_ok, value, value); SET_BITFLAG (flag_cray_pointer, value, value); @@ -85,6 +75,24 @@ set_dec_flags (int value) SET_BITFLAG (flag_dec_math, value, value); } +/* Finalize DEC flags. */ + +static void +post_dec_flags (int value) +{ + /* Don't warn for legacy code if -fdec is given; however, setting -fno-dec + does not force these warnings. We make one final determination on this + at the end because -std= is always set first; thus, we can avoid + clobbering the user's desired standard settings in gfc_handle_option + e.g. when -fdec and -fno-dec are both given. */ + if (value) + { + gfc_option.allow_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL + | GFC_STD_GNU | GFC_STD_LEGACY; + gfc_option.warn_std &= ~(GFC_STD_LEGACY | GFC_STD_F95_DEL); + } +} + /* Enable (or disable) -finit-local-zero. */ static void @@ -248,6 +256,9 @@ gfc_post_options (const char **pfilename) char *source_path; int i; + /* Finalize DEC flags. */ + post_dec_flags (flag_dec); + /* Excess precision other than "fast" requires front-end support. */ if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD) @@ > Directives are only processed in the current file, so it doesn't really > matter what the included file has as directives. One could even have the > included one be with expected dg-error lines and then include it in > the ones that don't expect any. Good to know, thanks! In that case, I like your suggestion of reducing the test cases to includes. See new the newly attached patch for updated cases. > Anyway, that is all from me, I still don't want to stomp on Fortran > maintainer's review (use my global reviewer's rights for that) and > thus I'm deferring the review to them. When committing, please make sure > to include Mark's email in the ChangeLog next to yours to credit him. Thanks for your comments. I think nobody will feel stomped on since maintainers are sparse and busy. I will certainly make note of Mark's contributions when committing. Attached is the latest version, which builds and regtests cleanly on x86_64-redhat-linux. OK for trunk, 7-branch, and 8-branch? Fritz >From 1cae11a88b29fe521e0e6c6c7c1796a7adb34cad Mon Sep 17 00:00:00 2001 From: Fritz Reese <fritzore...@gmail.com> Date: Mon, 12 Nov 2018 13:57:25 -0500 Subject: [PATCH] PR fortran/87919 Fix handling -fno-* prefix for init-local-zero, check-array-temporaries and dec. gcc/fortran/ * options.c (SET_FLAG, SET_BITFLAG, SET_BITFLAG2): New macros. (set_dec_flags): Set/unset DEC and std flags according to value. (set_init_local_zero): New helper for -finit-local-zero flag group. (gfc_init_options): Fix disabling of init flags, array temporaries check, and dec flags when value is zero (from -fno-*). gcc/testsuiste/ * gfortran.dg/array_temporaries_5.f90: New test. * gfortran.dg/dec_bitwise_ops_3.f90: Ditto. * gfortran.dg/dec_d_lines_3.f: Ditto. * gfortran.dg/dec_exp_4.f90: Ditto. * gfortran.dg/dec_exp_5.f90: Ditto. * gfortran.dg/dec_io_7.f90: Ditto. * gfortran.dg/dec_structure_24.f90: Ditto. * gfortran.dg/dec_structure_25.f90: Ditto. * gfortran.dg/dec_structure_26.f90: Ditto. * gfortran.dg/dec_structure_27.f90: Ditto. * gfortran.dg/dec_type_print_3.f90: Ditto. * gfortran.dg/init_flag_20.f90: Ditto. --- gcc/fortran/options.c | 93 +++++++++++++++-------- gcc/testsuite/gfortran.dg/array_temporaries_5.f90 | 10 +++ gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90 | 29 +++++++ gcc/testsuite/gfortran.dg/dec_d_lines_3.f | 14 ++++ gcc/testsuite/gfortran.dg/dec_exp_4.f90 | 12 +++ gcc/testsuite/gfortran.dg/dec_exp_5.f90 | 11 +++ gcc/testsuite/gfortran.dg/dec_io_7.f90 | 20 +++++ gcc/testsuite/gfortran.dg/dec_structure_24.f90 | 32 ++++++++ gcc/testsuite/gfortran.dg/dec_structure_25.f90 | 11 +++ gcc/testsuite/gfortran.dg/dec_structure_26.f90 | 34 +++++++++ gcc/testsuite/gfortran.dg/dec_structure_27.f90 | 34 +++++++++ gcc/testsuite/gfortran.dg/dec_type_print_3.f90 | 21 +++++ gcc/testsuite/gfortran.dg/init_flag_20.f90 | 15 ++++ 13 files changed, 306 insertions(+), 30 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/array_temporaries_5.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_d_lines_3.f create mode 100644 gcc/testsuite/gfortran.dg/dec_exp_4.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_exp_5.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_io_7.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_structure_24.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_structure_25.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_structure_26.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_structure_27.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_type_print_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/init_flag_20.f90
From 1cae11a88b29fe521e0e6c6c7c1796a7adb34cad Mon Sep 17 00:00:00 2001 From: Fritz Reese <fritzore...@gmail.com> Date: Mon, 12 Nov 2018 13:57:25 -0500 Subject: [PATCH] PR fortran/87919 Fix handling -fno-* prefix for init-local-zero, check-array-temporaries and dec. gcc/fortran/ * options.c (SET_FLAG, SET_BITFLAG, SET_BITFLAG2): New macros. (set_dec_flags): Set/unset DEC and std flags according to value. (set_init_local_zero): New helper for -finit-local-zero flag group. (gfc_init_options): Fix disabling of init flags, array temporaries check, and dec flags when value is zero (from -fno-*). gcc/testsuiste/ * gfortran.dg/array_temporaries_5.f90: New test. * gfortran.dg/dec_bitwise_ops_3.f90: Ditto. * gfortran.dg/dec_d_lines_3.f: Ditto. * gfortran.dg/dec_exp_4.f90: Ditto. * gfortran.dg/dec_exp_5.f90: Ditto. * gfortran.dg/dec_io_7.f90: Ditto. * gfortran.dg/dec_structure_24.f90: Ditto. * gfortran.dg/dec_structure_25.f90: Ditto. * gfortran.dg/dec_structure_26.f90: Ditto. * gfortran.dg/dec_structure_27.f90: Ditto. * gfortran.dg/dec_type_print_3.f90: Ditto. * gfortran.dg/init_flag_20.f90: Ditto. --- gcc/fortran/options.c | 93 +++++++++++++++-------- gcc/testsuite/gfortran.dg/array_temporaries_5.f90 | 10 +++ gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90 | 29 +++++++ gcc/testsuite/gfortran.dg/dec_d_lines_3.f | 14 ++++ gcc/testsuite/gfortran.dg/dec_exp_4.f90 | 12 +++ gcc/testsuite/gfortran.dg/dec_exp_5.f90 | 11 +++ gcc/testsuite/gfortran.dg/dec_io_7.f90 | 20 +++++ gcc/testsuite/gfortran.dg/dec_structure_24.f90 | 32 ++++++++ gcc/testsuite/gfortran.dg/dec_structure_25.f90 | 11 +++ gcc/testsuite/gfortran.dg/dec_structure_26.f90 | 34 +++++++++ gcc/testsuite/gfortran.dg/dec_structure_27.f90 | 34 +++++++++ gcc/testsuite/gfortran.dg/dec_type_print_3.f90 | 21 +++++ gcc/testsuite/gfortran.dg/init_flag_20.f90 | 15 ++++ 13 files changed, 306 insertions(+), 30 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/array_temporaries_5.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_d_lines_3.f create mode 100644 gcc/testsuite/gfortran.dg/dec_exp_4.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_exp_5.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_io_7.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_structure_24.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_structure_25.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_structure_26.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_structure_27.f90 create mode 100644 gcc/testsuite/gfortran.dg/dec_type_print_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/init_flag_20.f90 diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index 73f5389361d..b7f7360215c 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -32,6 +32,20 @@ along with GCC; see the file COPYING3. If not see gfc_option_t gfc_option; +#define SET_FLAG(flag, condition, on_value, off_value) \ + do \ + { \ + if (condition) \ + flag = (on_value); \ + else \ + flag = (off_value); \ + } while (0) + +#define SET_BITFLAG2(m) m + +#define SET_BITFLAG(flag, condition, value) \ + SET_BITFLAG2 (SET_FLAG (flag, condition, (flag | (value)), (flag & ~(value)))) + /* Set flags that control warnings and errors for different Fortran standards to their default values. Keep in sync with @@ -47,29 +61,54 @@ set_default_std_flags (void) gfc_option.warn_std = GFC_STD_F2018_DEL | GFC_STD_F95_DEL | GFC_STD_LEGACY; } - -/* Set all the DEC extension flags. */ +/* Set (or unset) the DEC extension flags. */ static void set_dec_flags (int value) { + /* Set (or unset) other DEC compatibility extensions. */ + SET_BITFLAG (flag_dollar_ok, value, value); + SET_BITFLAG (flag_cray_pointer, value, value); + SET_BITFLAG (flag_dec_structure, value, value); + SET_BITFLAG (flag_dec_intrinsic_ints, value, value); + SET_BITFLAG (flag_dec_static, value, value); + SET_BITFLAG (flag_dec_math, value, value); +} + +/* Finalize DEC flags. */ + +static void +post_dec_flags (int value) +{ + /* Don't warn for legacy code if -fdec is given; however, setting -fno-dec + does not force these warnings. We make one final determination on this + at the end because -std= is always set first; thus, we can avoid + clobbering the user's desired standard settings in gfc_handle_option + e.g. when -fdec and -fno-dec are both given. */ if (value) { - /* Allow legacy code without warnings. */ gfc_option.allow_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL - | GFC_STD_GNU | GFC_STD_LEGACY; + | GFC_STD_GNU | GFC_STD_LEGACY; gfc_option.warn_std &= ~(GFC_STD_LEGACY | GFC_STD_F95_DEL); } - - /* Set other DEC compatibility extensions. */ - flag_dollar_ok |= value; - flag_cray_pointer |= value; - flag_dec_structure |= value; - flag_dec_intrinsic_ints |= value; - flag_dec_static |= value; - flag_dec_math |= value; } +/* Enable (or disable) -finit-local-zero. */ + +static void +set_init_local_zero (int value) +{ + gfc_option.flag_init_integer_value = 0; + gfc_option.flag_init_character_value = (char)0; + + SET_FLAG (gfc_option.flag_init_integer, value, GFC_INIT_INTEGER_ON, + GFC_INIT_INTEGER_OFF); + SET_FLAG (gfc_option.flag_init_logical, value, GFC_INIT_LOGICAL_FALSE, + GFC_INIT_LOGICAL_OFF); + SET_FLAG (gfc_option.flag_init_character, value, GFC_INIT_CHARACTER_ON, + GFC_INIT_CHARACTER_OFF); + SET_FLAG (flag_init_real, value, GFC_INIT_REAL_ZERO, GFC_INIT_REAL_OFF); +} /* Return language mask for Fortran options. */ @@ -107,11 +146,7 @@ gfc_init_options (unsigned int decoded_options_count, gfc_option.flag_preprocessed = 0; gfc_option.flag_d_lines = -1; - gfc_option.flag_init_integer = GFC_INIT_INTEGER_OFF; - gfc_option.flag_init_integer_value = 0; - gfc_option.flag_init_logical = GFC_INIT_LOGICAL_OFF; - gfc_option.flag_init_character = GFC_INIT_CHARACTER_OFF; - gfc_option.flag_init_character_value = (char)0; + set_init_local_zero (0); gfc_option.fpe = 0; /* All except GFC_FPE_INEXACT. */ @@ -221,6 +256,9 @@ gfc_post_options (const char **pfilename) char *source_path; int i; + /* Finalize DEC flags. */ + post_dec_flags (flag_dec); + /* Excess precision other than "fast" requires front-end support. */ if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD) @@ -604,7 +642,7 @@ gfc_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, break; case OPT_fcheck_array_temporaries: - gfc_option.rtcheck |= GFC_RTCHECK_ARRAY_TEMPS; + SET_BITFLAG (gfc_option.rtcheck, value, GFC_RTCHECK_ARRAY_TEMPS); break; case OPT_fd_lines_as_code: @@ -654,12 +692,7 @@ gfc_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, break; case OPT_finit_local_zero: - gfc_option.flag_init_integer = GFC_INIT_INTEGER_ON; - gfc_option.flag_init_integer_value = 0; - flag_init_real = GFC_INIT_REAL_ZERO; - gfc_option.flag_init_logical = GFC_INIT_LOGICAL_FALSE; - gfc_option.flag_init_character = GFC_INIT_CHARACTER_ON; - gfc_option.flag_init_character_value = (char)0; + set_init_local_zero (value); break; case OPT_finit_logical_: @@ -758,12 +791,8 @@ gfc_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, break; case OPT_fdec: - /* Enable all DEC extensions. */ - set_dec_flags (1); - break; - - case OPT_fdec_structure: - flag_dec_structure = 1; + /* Set (or unset) the DEC extension flags. */ + set_dec_flags (value); break; } @@ -855,3 +884,7 @@ gfc_get_option_string (void) result[--pos] = '\0'; return result; } + +#undef SET_BITFLAG +#undef SET_BITFLAG2 +#undef SET_FLAG diff --git a/gcc/testsuite/gfortran.dg/array_temporaries_5.f90 b/gcc/testsuite/gfortran.dg/array_temporaries_5.f90 new file mode 100644 index 00000000000..dd147ba38ed --- /dev/null +++ b/gcc/testsuite/gfortran.dg/array_temporaries_5.f90 @@ -0,0 +1,10 @@ +! { dg-do run } +! { dg-options "-fcheck-array-temporaries -fno-check-array-temporaries" } +! +! PR fortran/87919 +! +! Ensure -fno-check-array-temporaries disables array temporary checking. +! + +! Note that 'include' drops the dg-output check from the original test case. +include 'array_temporaries_2.f90' diff --git a/gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90 b/gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90 new file mode 100644 index 00000000000..c28cf81fc04 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90 @@ -0,0 +1,29 @@ +! { dg-do compile } +! { dg-options "-std=legacy -fdec -fno-dec" } +! +! PR fortran/87919 +! +! Make sure -fno-dec disables bitwise ops and check for the right errors. +! -std=legacy is added to avoid the .XOR. extension warning. +! + +include 'dec_bitwise_ops_1.f90' + +! { dg-error "Operands of logical operator" " " { target *-*-* } 33 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 34 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 35 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 46 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 47 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 48 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 59 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 60 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 61 } +! { dg-error "Operand of .not. operator" " " { target *-*-* } 72 } +! { dg-error "Operand of .not. operator" " " { target *-*-* } 73 } +! { dg-error "Operand of .not. operator" " " { target *-*-* } 74 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 85 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 86 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 87 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 98 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 99 } +! { dg-error "Operands of logical operator" " " { target *-*-* } 100 } diff --git a/gcc/testsuite/gfortran.dg/dec_d_lines_3.f b/gcc/testsuite/gfortran.dg/dec_d_lines_3.f new file mode 100644 index 00000000000..2df4341c0e4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_d_lines_3.f @@ -0,0 +1,14 @@ +! { dg-do compile } +! { dg-options "-ffixed-form -fdec -fno-dec" } +! +! PR fortran/87919 +! +! Ensure -fno-dec disables -fdec, leaving d-lines as code by default. +! + +include 'dec_d_lines_2.f' + +! { dg-error "character in statement label" " " { target *-*-*} 6 } +! { dg-error "Unclassifiable statement" " " { target *-*-*} 6 } +! { dg-error "character in statement label" " " { target *-*-*} 7 } +! { dg-error "Unclassifiable statement" " " { target *-*-*} 7 } diff --git a/gcc/testsuite/gfortran.dg/dec_exp_4.f90 b/gcc/testsuite/gfortran.dg/dec_exp_4.f90 new file mode 100644 index 00000000000..9d8b10db6a7 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_exp_4.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-fdec -fno-dec" } +! +! PR fortran/87919 +! +! Make sure -fno-dec disables -fdec as with dec_exp_2. +! + +include 'dec_exp_2.f90' + +! { dg-error "Missing exponent" "" { target *-*-* } 9 } +! { dg-error "Missing exponent" "" { target *-*-* } 11 } diff --git a/gcc/testsuite/gfortran.dg/dec_exp_5.f90 b/gcc/testsuite/gfortran.dg/dec_exp_5.f90 new file mode 100644 index 00000000000..faf3a9b306b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_exp_5.f90 @@ -0,0 +1,11 @@ +! { dg-do run "xfail *-*-*" } +! { dg-options "-fdec -fno-dec" } +! +! PR fortran/87919 +! +! Make sure -fno-dec disables -fdec as with dec_exp_3. +! + +include 'dec_exp_3.f90' + +! { XFAIL "Bad real number" "" { target *-*-* } 13 } diff --git a/gcc/testsuite/gfortran.dg/dec_io_7.f90 b/gcc/testsuite/gfortran.dg/dec_io_7.f90 new file mode 100644 index 00000000000..4a931c15fe7 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_io_7.f90 @@ -0,0 +1,20 @@ +! { dg-do compile } +! { dg-options "-fdec -fno-dec" } +! +! PR fortran/87919 +! +! Make sure -fno-dec rejects -fdec I/O specifiers as with dec_io_1. +! + +include 'dec_io_1.f90' + +! { dg-error "is a DEC extension" "" { target *-*-* } 12 } +! { dg-error "is a DEC extension" "" { target *-*-* } 24 } +! { dg-error "is a DEC extension" "" { target *-*-* } 58 } +! { dg-error "is a DEC extension" "" { target *-*-* } 64 } +! { dg-error "is a DEC extension" "" { target *-*-* } 68 } +! { dg-error "is a DEC extension" "" { target *-*-* } 74 } +! { dg-error "is a DEC extension" "" { target *-*-* } 78 } +! { dg-error "is a DEC extension" "" { target *-*-* } 84 } +! { dg-error "is a DEC extension" "" { target *-*-* } 90 } +! { dg-error "is a DEC extension" "" { target *-*-* } 96 } diff --git a/gcc/testsuite/gfortran.dg/dec_structure_24.f90 b/gcc/testsuite/gfortran.dg/dec_structure_24.f90 new file mode 100644 index 00000000000..02842b315dc --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_structure_24.f90 @@ -0,0 +1,32 @@ +! { dg-do compile } +! +! PR fortran/87919 +! +! Should fail to compile without the -fdec or -fdec-structure options. +! +! Contributed by Mark Eggleston <mark.eggles...@codethink.com> + +include 'dec_structure_1.f90' + +! { dg-error "-fdec-structure" " " { target *-*-* } 14 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 19 } +! { dg-error "-fdec-structure" " " { target *-*-* } 21 } +! { dg-error "-fdec-structure" " " { target *-*-* } 22 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 25 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 26 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 27 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 28 } +! { dg-error "is not a variable" " " { target *-*-* } 30 } +! { dg-error "Bad character" " " { target *-*-* } 32 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 34 } +! { dg-error "Bad character" " " { target *-*-* } 36 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 38 } +! { dg-error "Bad character" " " { target *-*-* } 40 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 42 } +! { dg-error "Bad character" " " { target *-*-* } 44 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 46 } +! { dg-error "Bad character" " " { target *-*-* } 48 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 50 } +! { dg-error "Bad character" " " { target *-*-* } 52 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 54 } +! { dg-error "function result" " " { target *-*-* } 29 } diff --git a/gcc/testsuite/gfortran.dg/dec_structure_25.f90 b/gcc/testsuite/gfortran.dg/dec_structure_25.f90 new file mode 100644 index 00000000000..a64d85a88a4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_structure_25.f90 @@ -0,0 +1,11 @@ +! { dg-do run } +! { dg-options "-fdec" } +! +! PR fortran/87919 +! +! Should compile and run with the -fdec option. +! +! Contributed by Mark Eggleston <mark.eggles...@codethink.com> +! + +include 'dec_structure_1.f90' diff --git a/gcc/testsuite/gfortran.dg/dec_structure_26.f90 b/gcc/testsuite/gfortran.dg/dec_structure_26.f90 new file mode 100644 index 00000000000..7829103b995 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_structure_26.f90 @@ -0,0 +1,34 @@ +! { dg-do compile } +! { dg-options "-fdec -fno-dec-structure" } +! +! PR fortran/87919 +! +! Should fail to compile with -fdec and -fno-dec-structure. +! +! Contributed by Mark Eggleston <mark.eggles...@codethink.com> +! + +include 'dec_structure_1.f90' + +! { dg-error "-fdec-structure" " " { target *-*-* } 14 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 19 } +! { dg-error "-fdec-structure" " " { target *-*-* } 21 } +! { dg-error "-fdec-structure" " " { target *-*-* } 22 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 25 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 26 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 27 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 28 } +! { dg-error "is not a variable" " " { target *-*-* } 30 } +! { dg-error "Bad character" " " { target *-*-* } 32 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 34 } +! { dg-error "Bad character" " " { target *-*-* } 36 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 38 } +! { dg-error "Bad character" " " { target *-*-* } 40 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 42 } +! { dg-error "Bad character" " " { target *-*-* } 44 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 46 } +! { dg-error "Bad character" " " { target *-*-* } 48 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 50 } +! { dg-error "Bad character" " " { target *-*-* } 52 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 54 } +! { dg-error "function result" " " { target *-*-* } 29 } diff --git a/gcc/testsuite/gfortran.dg/dec_structure_27.f90 b/gcc/testsuite/gfortran.dg/dec_structure_27.f90 new file mode 100644 index 00000000000..1257365deb8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_structure_27.f90 @@ -0,0 +1,34 @@ +! { dg-do compile } +! { dg-options "-fdec-structure -fno-dec-structure" } +! +! PR fortran/87919 +! +! Should fail to compile with -fdec-structure and -fno-dec-structure. +! +! Contributed by Mark Eggleston <mark.eggles...@codethink.com> +! + +include 'dec_structure_1.f90' + +! { dg-error "-fdec-structure" " " { target *-*-* } 14 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 19 } +! { dg-error "-fdec-structure" " " { target *-*-* } 21 } +! { dg-error "-fdec-structure" " " { target *-*-* } 22 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 25 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 26 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 27 } +! { dg-error "Unclassifiable statement" " " { target *-*-* } 28 } +! { dg-error "is not a variable" " " { target *-*-* } 30 } +! { dg-error "Bad character" " " { target *-*-* } 32 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 34 } +! { dg-error "Bad character" " " { target *-*-* } 36 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 38 } +! { dg-error "Bad character" " " { target *-*-* } 40 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 42 } +! { dg-error "Bad character" " " { target *-*-* } 44 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 46 } +! { dg-error "Bad character" " " { target *-*-* } 48 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 50 } +! { dg-error "Bad character" " " { target *-*-* } 52 } +! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 54 } +! { dg-error "function result" " " { target *-*-* } 29 } diff --git a/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 b/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 new file mode 100644 index 00000000000..f766bdf0022 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 @@ -0,0 +1,21 @@ +! { dg-do compile } +! { dg-options "-fdec -fno-dec" } +! +! PR fortran/87919 +! +! Ensure that -fno-dec disables the usage of TYPE as an alias for PRINT. +! + +include 'dec_type_print.f90' + +! { dg-error "Invalid character in name" "" { target *-*-* } 52 } +! { dg-error "Invalid character in name" "" { target *-*-* } 53 } +! { dg-error "Invalid character in name" "" { target *-*-* } 54 } +! { dg-error "Invalid character in name" "" { target *-*-* } 55 } +! { dg-error "Invalid character in name" "" { target *-*-* } 56 } +! { dg-error "Invalid character in name" "" { target *-*-* } 57 } +! { dg-error "Invalid character in name" "" { target *-*-* } 58 } +! { dg-error "Unclassifiable statement" "" { target *-*-* } 59 } +! { dg-error "conflicts with PROCEDURE" "" { target *-*-* } 60 } +! { dg-error "Cannot assign to a named constant" "" { target *-*-* } 80 } + diff --git a/gcc/testsuite/gfortran.dg/init_flag_20.f90 b/gcc/testsuite/gfortran.dg/init_flag_20.f90 new file mode 100644 index 00000000000..6f15c1ace0d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/init_flag_20.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-options "-fbackslash -finit-local-zero -fno-init-local-zero -fdump-tree-original" } +! +! PR fortran/87919 +! +! Make sure -fno-init-local-zero disables -finit-local-zero. +! + +include 'init_flag_1.f90' + +! Make sure no initialization code is generated. +! { dg-final { scan-tree-dump-times "r\[1-4] *= *\[0\{]" 0 "original" } } +! { dg-final { scan-tree-dump-times "l\[12] *= *\[0\{]" 0 "original" } } +! { dg-final { scan-tree-dump-times "i\[1-4] *= *\[0\{]" 0 "original" } } +! { dg-final { scan-tree-dump-times "memmove *\[(]\[^,]*c\[1-4]" 0 "original" } } -- 2.12.2