aboutsummaryrefslogtreecommitdiff
path: root/gcc/opts-common.c
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2019-07-24 20:34:03 +0000
committerMartin Sebor <msebor@gcc.gnu.org>2019-07-24 14:34:03 -0600
commitfa5baeedd47e84b36aff8191bfdf86ee03829a4c (patch)
tree555ecd4cee3204df4576e6ad2ed71999246dd69c /gcc/opts-common.c
parente34616747028ebeb0be867dc6a23682539bfab60 (diff)
downloadgcc-fa5baeedd47e84b36aff8191bfdf86ee03829a4c.zip
gcc-fa5baeedd47e84b36aff8191bfdf86ee03829a4c.tar.gz
gcc-fa5baeedd47e84b36aff8191bfdf86ee03829a4c.tar.bz2
PR driver/80545 - option -Wstringop-overflow not recognized by Fortran
gcc/cp/ChangeLog: PR driver/80545 * decl.c (finish_function): Use lang_mask. gcc/testsuite/ChangeLog: PR driver/80545 * gcc.misc-tests/help.exp: Add tests. * lib/options.exp: Handle C++. gcc/ChangeLog: PR driver/80545 * diagnostic.c (diagnostic_classify_diagnostic): Use lang_mask. (diagnostic_report_diagnostic): Same. * diagnostic.h (diagnostic_context::option_enabled): Add an argument. (diagnostic_context::lang_mask): New data member. * ipa-pure-const.c (suggest_attribute): Use lang_hooks.option_lang_mask (). * opts-common.c (option_enabled): Handle new argument. (get_option_state): Pass an additional argument. * opts.c (print_filtered_help): Print supported languages for unsupported options. Adjust printing of current state. * opts.h (option_enabled): Add argument. * toplev.c (print_switch_values): Use lang_mask. (general_init): Set global_dc->lang_mask. From-SVN: r273771
Diffstat (limited to 'gcc/opts-common.c')
-rw-r--r--gcc/opts-common.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/opts-common.c b/gcc/opts-common.c
index e3f9c54..e2a315b 100644
--- a/gcc/opts-common.c
+++ b/gcc/opts-common.c
@@ -1526,9 +1526,15 @@ option_flag_var (int opt_index, struct gcc_options *opts)
or -1 if it isn't a simple on-off switch. */
int
-option_enabled (int opt_idx, void *opts)
+option_enabled (int opt_idx, unsigned lang_mask, void *opts)
{
const struct cl_option *option = &(cl_options[opt_idx]);
+
+ /* A language-specific option can only be considered enabled when it's
+ valid for the current language. */
+ if (option->flags & CL_LANG_ALL && !(option->flags | lang_mask))
+ return 0;
+
struct gcc_options *optsg = (struct gcc_options *) opts;
void *flag_var = option_flag_var (opt_idx, optsg);
@@ -1598,7 +1604,7 @@ get_option_state (struct gcc_options *opts, int option,
case CLVC_BIT_CLEAR:
case CLVC_BIT_SET:
- state->ch = option_enabled (option, opts);
+ state->ch = option_enabled (option, -1, opts);
state->data = &state->ch;
state->size = 1;
break;