#include "params.h"
#include "diagnostic.h"
#include "opts-diagnostic.h"
-#include "tm_p.h" /* For OPTIMIZATION_OPTIONS. */
#include "insn-attr.h" /* For INSN_SCHEDULING. */
#include "target.h"
#include "tree-pass.h"
set after target options have been processed. */
flag_short_enums = 2;
- /* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
- modify it. */
+ /* Initialize target_flags before
+ targetm.target_option.optimization so the latter can modify
+ it. */
target_flags = targetm.default_target_flags;
/* Some targets have ABI-specified unwind tables. */
lto_clear_user_options ();
#endif
-#ifdef OPTIMIZATION_OPTIONS
/* Allow default optimizations to be specified on a per-machine basis. */
- OPTIMIZATION_OPTIONS (optimize, optimize_size);
-#endif
+ targetm.target_option.optimization (optimize, optimize_size);
read_cmdline_options (*decoded_options, *decoded_options_count, lang_mask,
&handlers);
check option consistency. */
if (flag_lto && flag_whopr)
error ("-flto and -fwhopr are mutually exclusive");
+
+ /* We initialize flag_split_stack to -1 so that targets can set a
+ default value if they choose based on other options. */
+ if (flag_split_stack == -1)
+ flag_split_stack = 0;
+ else
+ {
+ if (!targetm.supports_split_stack (true))
+ {
+ error ("%<-fsplit-stack%> is not supported by "
+ "this compiler configuration");
+ flag_split_stack = 0;
+ }
+ }
}
#define LEFT_COLUMN 27
verbose = true;
break;
- case OPT_fhelp:
case OPT__help:
{
unsigned int all_langs_mask = (1U << cl_lang_count) - 1;
break;
}
- case OPT_ftarget_help:
case OPT__target_help:
print_specific_help (CL_TARGET, CL_UNDOCUMENTED, 0);
exit_after_options = true;
targetm.help ();
break;
- case OPT_fhelp_:
case OPT__help_:
{
const char * a = arg;
break;
}
- case OPT_fversion:
case OPT__version:
exit_after_options = true;
break;
break;
case OPT_Wlarger_than_:
- /* This form corresponds to -Wlarger-than-.
- Kept for backward compatibility.
- Don't use it as the first argument of warning(). */
-
- case OPT_Wlarger_than_eq:
larger_than_size = value;
warn_larger_than = value != -1;
break;
break;
case OPT_aux_info:
- case OPT_aux_info_:
aux_info_file_name = arg;
flag_gen_aux_info = 1;
break;
break;
case OPT_finline_limit_:
- case OPT_finline_limit_eq:
set_param_value ("max-inline-insns-single", value / 2);
set_param_value ("max-inline-insns-auto", value / 2);
break;
warning (0, "unknown stack check parameter \"%s\"", arg);
break;
- case OPT_fstack_check:
- /* This is the same as the "specific" mode above. */
- if (value)
- flag_stack_check = STACK_CHECK_BUILTIN
- ? FULL_BUILTIN_STACK_CHECK
- : STACK_CHECK_STATIC_BUILTIN
- ? STATIC_BUILTIN_STACK_CHECK
- : GENERIC_STACK_CHECK;
- else
- flag_stack_check = NO_STACK_CHECK;
- break;
-
case OPT_fstack_limit:
/* The real switch is -fno-stack-limit. */
if (value)
global_dc->inhibit_warnings = true;
break;
- case OPT_fsee:
- case OPT_fcse_skip_blocks:
- case OPT_floop_optimize:
- case OPT_frerun_loop_opt:
- case OPT_fsched2_use_traces:
- case OPT_fstrength_reduce:
- case OPT_ftree_store_copy_prop:
- case OPT_fforce_addr:
- case OPT_ftree_salias:
- case OPT_ftree_store_ccp:
- case OPT_Wunreachable_code:
- case OPT_fargument_alias:
- case OPT_fargument_noalias:
- case OPT_fargument_noalias_anything:
- case OPT_fargument_noalias_global:
- /* These are no-ops, preserved for backward compatibility. */
- break;
-
case OPT_fuse_linker_plugin:
/* No-op. Used by the driver and passed to us because it starts with f.*/
break;
}
else
{
+ const struct cl_option *option = &cl_options[option_index];
const diagnostic_t kind = value ? DK_ERROR : DK_WARNING;
+ if (option->alias_target != N_OPTS)
+ option_index = option->alias_target;
+ if (option_index == OPT_SPECIAL_ignore)
+ return;
diagnostic_classify_diagnostic (global_dc, option_index, kind,
UNKNOWN_LOCATION);
if (kind == DK_ERROR)