diff options
author | Fritz Reese <fritzoreese@gmail.com> | 2018-12-03 17:10:50 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-12-03 18:10:50 +0100 |
commit | c3e799e123238f1762760bcec2091005603eb4e7 (patch) | |
tree | abb1db0f868bd876c60dd0aa1627a847108afa41 /gcc/fortran/options.c | |
parent | e1976443fb2864f091c5f82d72820b9126ee0241 (diff) | |
download | gcc-c3e799e123238f1762760bcec2091005603eb4e7.zip gcc-c3e799e123238f1762760bcec2091005603eb4e7.tar.gz gcc-c3e799e123238f1762760bcec2091005603eb4e7.tar.bz2 |
re PR fortran/87919 (Incorrect fortran handling of -fno-* options)
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
Diffstat (limited to 'gcc/fortran/options.c')
-rw-r--r-- | gcc/fortran/options.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index b35bed3..48e35e3 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -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 |