re PR fortran/87919 (Incorrect fortran handling of -fno-* options)
authorFritz Reese <fritzoreese@gmail.com>
Mon, 3 Dec 2018 17:10:50 +0000 (17:10 +0000)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 3 Dec 2018 17:10:50 +0000 (18:10 +0100)
PR fortran/87919
* options.c (SET_FLAG, SET_BITFLAG, SET_BITFLAG2): New macros.
(set_dec_flags): Set/unset DEC and std flags according to value.
(post_dec_flags, set_init_local_zero): New functions.
(gfc_init_options): Use set_init_local_zero and post_dec_flags.
(gfc_handle_options) <case OPT_fcheck_array_temporaries>: Use
SET_BITFLAG.
<case OPT_finit_local_zero>: Use set_init_local_zero.
<case OPT_fdec>: Pass value to set_dec_flags.
<case OPT_fdec_structure>: Remove.

Co-Authored-By: Mark Eggleston <mark.eggleston@codethink.co.uk>
From-SVN: r266761

gcc/fortran/ChangeLog
gcc/fortran/options.c

index 1101507..b9fcfd6 100644 (file)
@@ -1,12 +1,16 @@
 2018-12-03  Fritz Reese  <fritzoreese@gmail.com>
-            Mark Eggleston <mark.eggleston@codethink.co.uk>
+           Mark Eggleston  <mark.eggleston@codethink.co.uk>
 
        PR fortran/87919
        * 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-*).
+       (post_dec_flags, set_init_local_zero): New functions.
+       (gfc_init_options): Use set_init_local_zero and post_dec_flags.
+       (gfc_handle_options) <case OPT_fcheck_array_temporaries>: Use
+       SET_BITFLAG.
+       <case OPT_finit_local_zero>: Use set_init_local_zero.
+       <case OPT_fdec>: Pass value to set_dec_flags.
+       <case OPT_fdec_structure>: Remove.
 
 2018-11-30  Thomas Schwinge  <thomas@codesourcery.com>
 
index b35bed3..48e35e3 100644 (file)
@@ -147,11 +147,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.  */
@@ -261,6 +257,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)
@@ -644,7 +643,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:
@@ -694,12 +693,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_:
@@ -798,12 +792,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;
     }
 
@@ -895,3 +885,7 @@ gfc_get_option_string (void)
   result[--pos] = '\0';
   return result;
 }
+
+#undef SET_BITFLAG
+#undef SET_BITFLAG2
+#undef SET_FLAG