mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 03:30:29 +08:00
common.opt (initial_max_fld_align, [...]): New Variable entries.
* common.opt (initial_max_fld_align, flag_debug_asm, flag_dump_rtl_in_asm, flag_dump_all_passed, rtl_dump_and_exit, flag_print_asm_name, graph_dump_format, help_printed, help_columns, flag_opts_finished): New Variable entries. (fdbg-cnt-list, fdbg-cnt=, fdebug-prefix-map=, frandom-seed, frandom-seed=): Mark deferred. (fsched-verbose=): Use UInteger and Var. * flags.h (set_struct_debug_option, flag_print_asm_name, rtl_dump_and_exit, flag_debug_asm, flag_dump_rtl_in_asm, graph_dump_format): Don't declare here. * haifa-sched.c (sched_verbose_param, fix_sched_param): Remove. * opts-global.c: Include dbgcnt.h and debug.h. (decode_options): Pass location to finish_options. (handle_common_deferred_options): Check flag_dump_all_passed. Handle OPT_fdbg_cnt_, OPT_fdbg_cnt_list, OPT_fdebug_prefix_map_, OPT_frandom_seed and OPT_frandom_seed_. Don't assert on OPT_fstack_limit. * opts.c: Don't include toplev.h, dbgcnt.h or debug.h. (set_struct_debug_option): Add location_t parameter. Update recursive call. Use error_at. (default_options_optimization): Use error_at. (finish_options): Add location_t parameter. Use opts->x_flag_opts_finished instead of first_time_p. Use opts->x_optimize instead of optimize. Use error_at. Pass location to inform. (print_filtered_help): Use opts->x_help_printed to track what options have been printed. (print_specific_help): Use opts->x_help_columns to track number of columns. (common_handle_option): Pass locations and gcc_options pointers to more functions. Use warning_at instead of fnotice and warning. Don't handle OPT_fdbg_cnt_, OPT_fdbg_cnt_list or OPT_fdebug_prefix_map_. Use error_at. Set opts->x_initial_max_fld_align; don't set maximum_field_alignment. Don't handle OPT_frandom_seed or OPT_frandom_seed_. Don't handle OPT_fsched_verbose_. (handle_param): Add location_r parameter. Use error_at. (set_debug_level): Add location_r parameter. Use error_at and warning_at. (setup_core_dumping): Add diagnostic_context parameter. (decode_d_option): Add gcc_options, location_t and diagnostic_context parameters and use them instead of global state. Use warning_at. (enable_warning_as_error): Use error_at. * opts.h (finish_options): Update prototype. (set_struct_debug_option): Declare here. * rtl.h (fix_sched_param): Remove. * stor-layout.c (initial_max_fld_align): Remove. * toplev.c (rtl_dump_and_exit, flag_print_asm_name, graph_dump_format, flag_debug_asm, flag_dump_rtl_in_asm): Remove. (process_options): Set maximum_field_alignment. * tree.h (initial_max_fld_align) Don't declare here. * Makefile.in (opts.o, opts-global.o): Update dependencies. c-family: * c-opts.c (c_common_handle_option): Pass location to set_struct_debug_option. testsuite: * gcc.dg/opts-5.c: New test. From-SVN: r167106
This commit is contained in:
parent
c98cd5bff6
commit
299404a1ec
@ -1,3 +1,59 @@
|
||||
2010-11-23 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* common.opt (initial_max_fld_align, flag_debug_asm,
|
||||
flag_dump_rtl_in_asm, flag_dump_all_passed, rtl_dump_and_exit,
|
||||
flag_print_asm_name, graph_dump_format, help_printed,
|
||||
help_columns, flag_opts_finished): New Variable entries.
|
||||
(fdbg-cnt-list, fdbg-cnt=, fdebug-prefix-map=, frandom-seed,
|
||||
frandom-seed=): Mark deferred.
|
||||
(fsched-verbose=): Use UInteger and Var.
|
||||
* flags.h (set_struct_debug_option, flag_print_asm_name,
|
||||
rtl_dump_and_exit, flag_debug_asm, flag_dump_rtl_in_asm,
|
||||
graph_dump_format): Don't declare here.
|
||||
* haifa-sched.c (sched_verbose_param, fix_sched_param): Remove.
|
||||
* opts-global.c: Include dbgcnt.h and debug.h.
|
||||
(decode_options): Pass location to finish_options.
|
||||
(handle_common_deferred_options): Check flag_dump_all_passed.
|
||||
Handle OPT_fdbg_cnt_, OPT_fdbg_cnt_list, OPT_fdebug_prefix_map_,
|
||||
OPT_frandom_seed and OPT_frandom_seed_. Don't assert on
|
||||
OPT_fstack_limit.
|
||||
* opts.c: Don't include toplev.h, dbgcnt.h or debug.h.
|
||||
(set_struct_debug_option): Add location_t parameter. Update
|
||||
recursive call. Use error_at.
|
||||
(default_options_optimization): Use error_at.
|
||||
(finish_options): Add location_t parameter. Use
|
||||
opts->x_flag_opts_finished instead of first_time_p. Use
|
||||
opts->x_optimize instead of optimize. Use error_at. Pass
|
||||
location to inform.
|
||||
(print_filtered_help): Use opts->x_help_printed to track what
|
||||
options have been printed.
|
||||
(print_specific_help): Use opts->x_help_columns to track number of
|
||||
columns.
|
||||
(common_handle_option): Pass locations and gcc_options pointers to
|
||||
more functions. Use warning_at instead of fnotice and warning.
|
||||
Don't handle OPT_fdbg_cnt_, OPT_fdbg_cnt_list or
|
||||
OPT_fdebug_prefix_map_. Use error_at. Set
|
||||
opts->x_initial_max_fld_align; don't set maximum_field_alignment.
|
||||
Don't handle OPT_frandom_seed or OPT_frandom_seed_. Don't handle
|
||||
OPT_fsched_verbose_.
|
||||
(handle_param): Add location_r parameter. Use error_at.
|
||||
(set_debug_level): Add location_r parameter. Use error_at and
|
||||
warning_at.
|
||||
(setup_core_dumping): Add diagnostic_context parameter.
|
||||
(decode_d_option): Add gcc_options, location_t and
|
||||
diagnostic_context parameters and use them instead of global
|
||||
state. Use warning_at.
|
||||
(enable_warning_as_error): Use error_at.
|
||||
* opts.h (finish_options): Update prototype.
|
||||
(set_struct_debug_option): Declare here.
|
||||
* rtl.h (fix_sched_param): Remove.
|
||||
* stor-layout.c (initial_max_fld_align): Remove.
|
||||
* toplev.c (rtl_dump_and_exit, flag_print_asm_name,
|
||||
graph_dump_format, flag_debug_asm, flag_dump_rtl_in_asm): Remove.
|
||||
(process_options): Set maximum_field_alignment.
|
||||
* tree.h (initial_max_fld_align) Don't declare here.
|
||||
* Makefile.in (opts.o, opts-global.o): Update dependencies.
|
||||
|
||||
2010-11-23 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* flag-types.h (struct visibility_flags): Don't declare here.
|
||||
|
@ -2823,15 +2823,14 @@ fold-const.o : fold-const.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
|
||||
$(GIMPLE_H) realmpfr.h $(TREE_FLOW_H)
|
||||
diagnostic.o : diagnostic.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
|
||||
version.h $(INPUT_H) intl.h $(DIAGNOSTIC_H) diagnostic.def
|
||||
opts.o : opts.c $(OPTS_H) $(OPTIONS_H) $(TOPLEV_H) $(DIAGNOSTIC_CORE_H) $(CONFIG_H) $(SYSTEM_H) \
|
||||
opts.o : opts.c $(OPTS_H) $(OPTIONS_H) $(DIAGNOSTIC_CORE_H) $(CONFIG_H) $(SYSTEM_H) \
|
||||
coretypes.h $(TREE_H) $(TM_H) $(RTL_H) \
|
||||
$(DIAGNOSTIC_H) $(INSN_ATTR_H) intl.h $(TARGET_H) \
|
||||
$(FLAGS_H) $(PARAMS_H) $(DBGCNT_H) debug.h \
|
||||
opts-diagnostic.h
|
||||
$(FLAGS_H) $(PARAMS_H) opts-diagnostic.h
|
||||
opts-global.o : opts-global.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
|
||||
$(DIAGNOSTIC_H) $(OPTS_H) $(FLAGS_H) $(GGC_H) $(TREE_H) langhooks.h \
|
||||
$(TM_H) $(RTL_H) $(LTO_STREAMER_H) output.h $(PLUGIN_H) $(TOPLEV_H) \
|
||||
$(TREE_PASS_H)
|
||||
$(TM_H) $(RTL_H) $(DBGCNT_H) debug.h $(LTO_STREAMER_H) output.h \
|
||||
$(PLUGIN_H) $(TOPLEV_H) $(TREE_PASS_H)
|
||||
opts-common.o : opts-common.c $(OPTS_H) $(FLAGS_H) $(CONFIG_H) $(SYSTEM_H) \
|
||||
coretypes.h intl.h $(DIAGNOSTIC_H) $(TM_H)
|
||||
targhooks.o : targhooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-11-23 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* c-opts.c (c_common_handle_option): Pass location to
|
||||
set_struct_debug_option.
|
||||
|
||||
2010-11-23 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* c-common.c (visibility_options): Move from ../opts.c.
|
||||
|
@ -654,16 +654,16 @@ c_common_handle_option (size_t scode, const char *arg, int value,
|
||||
break;
|
||||
|
||||
case OPT_femit_struct_debug_baseonly:
|
||||
set_struct_debug_option (&global_options, "base");
|
||||
set_struct_debug_option (&global_options, loc, "base");
|
||||
break;
|
||||
|
||||
case OPT_femit_struct_debug_reduced:
|
||||
set_struct_debug_option (&global_options,
|
||||
set_struct_debug_option (&global_options, loc,
|
||||
"dir:ord:sys,dir:gen:any,ind:base");
|
||||
break;
|
||||
|
||||
case OPT_femit_struct_debug_detailed_:
|
||||
set_struct_debug_option (&global_options, arg);
|
||||
set_struct_debug_option (&global_options, loc, arg);
|
||||
break;
|
||||
|
||||
case OPT_idirafter:
|
||||
|
@ -147,6 +147,51 @@ enum debug_info_levels debug_info_level = DINFO_LEVEL_NONE
|
||||
Variable
|
||||
bool use_gnu_debug_info_extensions
|
||||
|
||||
; Original value of maximum field alignment in bytes, specified via
|
||||
; -fpack-struct=<value>.
|
||||
Variable
|
||||
unsigned int initial_max_fld_align = TARGET_DEFAULT_PACK_STRUCT
|
||||
|
||||
; -dA causes debug commentary information to be produced in
|
||||
; the generated assembly code (to make it more readable). This option
|
||||
; is generally only of use to those who actually need to read the
|
||||
; generated assembly code (perhaps while debugging the compiler itself).
|
||||
; Currently, this switch is only used by dwarf2out.c; however, it is intended
|
||||
; to be a catchall for printing debug information in the assembler file.
|
||||
Variable
|
||||
int flag_debug_asm
|
||||
|
||||
; -dP causes the rtl to be emitted as a comment in assembly.
|
||||
Variable
|
||||
int flag_dump_rtl_in_asm
|
||||
|
||||
; Whether -da was passed (used only in handle_common_deferred_options).
|
||||
Variable
|
||||
bool flag_dump_all_passed
|
||||
|
||||
; Other flags saying which kinds of debugging dump have been requested.
|
||||
|
||||
Variable
|
||||
int rtl_dump_and_exit
|
||||
|
||||
Variable
|
||||
int flag_print_asm_name
|
||||
|
||||
Variable
|
||||
enum graph_dump_types graph_dump_format = no_graph
|
||||
|
||||
; Which options have been printed by --help.
|
||||
Variable
|
||||
char *help_printed
|
||||
|
||||
; The number of columns for --help output.
|
||||
Variable
|
||||
unsigned int help_columns
|
||||
|
||||
; Whether this options structure has been through finish_options
|
||||
Variable
|
||||
bool flag_opts_finished
|
||||
|
||||
###
|
||||
Driver
|
||||
|
||||
@ -823,15 +868,15 @@ Common Report Var(flag_data_sections) Optimization
|
||||
Place data items into their own section
|
||||
|
||||
fdbg-cnt-list
|
||||
Common Report
|
||||
Common Report Var(common_deferred_options) Defer
|
||||
List all available debugging counters with their limits and counts.
|
||||
|
||||
fdbg-cnt=
|
||||
Common RejectNegative Joined
|
||||
Common RejectNegative Joined Var(common_deferred_options) Defer
|
||||
-fdbg-cnt=<counter>:<limit>[,<counter>:<limit>,...] Set the debug counter limit.
|
||||
|
||||
fdebug-prefix-map=
|
||||
Common Joined RejectNegative
|
||||
Common Joined RejectNegative Var(common_deferred_options) Defer
|
||||
Map one directory name to another in debug information
|
||||
|
||||
; Nonzero for -fdefer-pop: don't pop args after each function call
|
||||
@ -1401,10 +1446,10 @@ Common Report Var(flag_profile_values)
|
||||
Insert code to profile values of expressions
|
||||
|
||||
frandom-seed
|
||||
Common
|
||||
Common Var(common_deferred_options) Defer
|
||||
|
||||
frandom-seed=
|
||||
Common Joined RejectNegative
|
||||
Common Joined RejectNegative Var(common_deferred_options) Defer
|
||||
-frandom-seed=<string> Make compile reproducible using <string>
|
||||
|
||||
; This switch causes the command line that was used to create an
|
||||
@ -1474,7 +1519,7 @@ Common Report Var(flag_schedule_speculative_load_dangerous) Optimization
|
||||
Allow speculative motion of more loads
|
||||
|
||||
fsched-verbose=
|
||||
Common RejectNegative Joined
|
||||
Common RejectNegative Joined UInteger Var(sched_verbose_param)
|
||||
-fsched-verbose=<number> Set the verbosity level of the scheduler
|
||||
|
||||
fsched2-use-superblocks
|
||||
|
24
gcc/flags.h
24
gcc/flags.h
@ -33,8 +33,6 @@ extern const char *const debug_type_names[];
|
||||
|
||||
extern void strip_off_ending (char *, int);
|
||||
extern int base_of_path (const char *path, const char **base_out);
|
||||
extern void set_struct_debug_option (struct gcc_options *opts,
|
||||
const char *value);
|
||||
|
||||
/* Run the second compilation of -fcompare-debug. Not defined using
|
||||
Var in common.opt because this is used in Ada code and so must be
|
||||
@ -60,18 +58,9 @@ extern bool fast_math_flags_struct_set_p (struct cl_optimization *);
|
||||
set to the default value of -Wstrict_aliasing=level. */
|
||||
|
||||
extern void set_Wstrict_aliasing (struct gcc_options *opts, int onoff);
|
||||
|
||||
/* Nonzero for -dp: annotate the assembly with a comment describing the
|
||||
pattern and alternative used. */
|
||||
|
||||
extern int flag_print_asm_name;
|
||||
|
||||
/* Now the symbols that are set with `-f' switches. */
|
||||
|
||||
/* Nonzero if we are only using compiler to check syntax errors. */
|
||||
|
||||
extern int rtl_dump_and_exit;
|
||||
|
||||
/* True if printing into -fdump-final-insns= dump. */
|
||||
|
||||
extern bool final_insns_dump_p;
|
||||
@ -80,20 +69,9 @@ extern bool final_insns_dump_p;
|
||||
|
||||
extern int flag_permissive;
|
||||
|
||||
/* -dA causes debug information to be produced in
|
||||
the generated assembly code (to make it more readable). This option
|
||||
is generally only of use to those who actually need to read the
|
||||
generated assembly code (perhaps while debugging the compiler itself).
|
||||
Currently, this switch is only used by dwarfout.c; however, it is intended
|
||||
to be a catchall for printing debug information in the assembler file. */
|
||||
|
||||
extern int flag_debug_asm;
|
||||
|
||||
/* Generate code for GNU or NeXT Objective-C runtime environment. */
|
||||
|
||||
extern int flag_next_runtime;
|
||||
|
||||
extern int flag_dump_rtl_in_asm;
|
||||
|
||||
/* Other basic status info about current function. */
|
||||
|
||||
@ -142,8 +120,6 @@ extern struct target_flag_state *this_target_flag_state;
|
||||
/* Nonzero if we dump in VCG format, not plain text. */
|
||||
extern int dump_for_graph;
|
||||
|
||||
extern enum graph_dump_types graph_dump_format;
|
||||
|
||||
extern enum stack_check_type flag_stack_check;
|
||||
|
||||
/* Returns TRUE if generated code should match ABI version N or
|
||||
|
@ -167,25 +167,12 @@ int issue_rate;
|
||||
N=3: rtl at abort point, control-flow, regions info.
|
||||
N=5: dependences info. */
|
||||
|
||||
static int sched_verbose_param = 0;
|
||||
int sched_verbose = 0;
|
||||
|
||||
/* Debugging file. All printouts are sent to dump, which is always set,
|
||||
either to stderr, or to the dump listing file (-dRS). */
|
||||
FILE *sched_dump = 0;
|
||||
|
||||
/* fix_sched_param() is called from toplev.c upon detection
|
||||
of the -fsched-verbose=N option. */
|
||||
|
||||
void
|
||||
fix_sched_param (const char *param, const char *val)
|
||||
{
|
||||
if (!strcmp (param, "verbose"))
|
||||
sched_verbose_param = atoi (val);
|
||||
else
|
||||
warning (0, "fix_sched_param: unknown param: %s", param);
|
||||
}
|
||||
|
||||
/* This is a placeholder for the scheduler parameters common
|
||||
to all schedulers. */
|
||||
struct common_sched_info_def *common_sched_info;
|
||||
|
@ -30,6 +30,8 @@ along with GCC; see the file COPYING3. If not see
|
||||
#include "langhooks.h"
|
||||
#include "tm.h" /* Required by rtl.h. */
|
||||
#include "rtl.h"
|
||||
#include "dbgcnt.h"
|
||||
#include "debug.h"
|
||||
#include "lto-streamer.h"
|
||||
#include "output.h"
|
||||
#include "plugin.h"
|
||||
@ -326,7 +328,7 @@ decode_options (struct gcc_options *opts, struct gcc_options *opts_set,
|
||||
loc, lang_mask,
|
||||
&handlers, dc);
|
||||
|
||||
finish_options (opts, opts_set);
|
||||
finish_options (opts, opts_set, loc);
|
||||
}
|
||||
|
||||
/* Process common options that have been deferred until after the
|
||||
@ -340,6 +342,9 @@ handle_common_deferred_options (void)
|
||||
VEC(cl_deferred_option,heap) *vec
|
||||
= (VEC(cl_deferred_option,heap) *) common_deferred_options;
|
||||
|
||||
if (flag_dump_all_passed)
|
||||
enable_rtl_dump_file ();
|
||||
|
||||
FOR_EACH_VEC_ELT (cl_deferred_option, vec, i, opt)
|
||||
{
|
||||
switch (opt->opt_index)
|
||||
@ -352,6 +357,18 @@ handle_common_deferred_options (void)
|
||||
fix_register (opt->arg, 0, 0);
|
||||
break;
|
||||
|
||||
case OPT_fdbg_cnt_:
|
||||
dbg_cnt_process_opt (opt->arg);
|
||||
break;
|
||||
|
||||
case OPT_fdbg_cnt_list:
|
||||
dbg_cnt_list_all_counters ();
|
||||
break;
|
||||
|
||||
case OPT_fdebug_prefix_map_:
|
||||
add_debug_prefix_map (opt->arg);
|
||||
break;
|
||||
|
||||
case OPT_fdump_:
|
||||
if (!dump_switch_p (opt->arg))
|
||||
error ("unrecognized command line option %<-fdump-%s%>", opt->arg);
|
||||
@ -378,10 +395,20 @@ handle_common_deferred_options (void)
|
||||
#endif
|
||||
break;
|
||||
|
||||
case OPT_frandom_seed:
|
||||
/* The real switch is -fno-random-seed. */
|
||||
if (!opt->value)
|
||||
set_random_seed (NULL);
|
||||
break;
|
||||
|
||||
case OPT_frandom_seed_:
|
||||
set_random_seed (opt->arg);
|
||||
break;
|
||||
|
||||
case OPT_fstack_limit:
|
||||
/* The real switch is -fno-stack-limit. */
|
||||
gcc_assert (!opt->value);
|
||||
stack_limit_rtx = NULL_RTX;
|
||||
if (!opt->value)
|
||||
stack_limit_rtx = NULL_RTX;
|
||||
break;
|
||||
|
||||
case OPT_fstack_limit_register_:
|
||||
|
238
gcc/opts.c
238
gcc/opts.c
@ -37,14 +37,11 @@ along with GCC; see the file COPYING3. If not see
|
||||
#include "opts.h"
|
||||
#include "options.h"
|
||||
#include "flags.h"
|
||||
#include "toplev.h" /* For set_random_seed and enable_rtl_dump_file. */
|
||||
#include "params.h"
|
||||
#include "diagnostic.h"
|
||||
#include "opts-diagnostic.h"
|
||||
#include "insn-attr.h" /* For INSN_SCHEDULING and DELAY_SLOTS. */
|
||||
#include "target.h"
|
||||
#include "dbgcnt.h"
|
||||
#include "debug.h"
|
||||
|
||||
/* Run the second compilation of -fcompare-debug. Not defined using
|
||||
Var in common.opt because this is used in Ada code and so must be
|
||||
@ -59,7 +56,8 @@ int flag_compare_debug;
|
||||
? ((string += sizeof prefix - 1), 1) : 0)
|
||||
|
||||
void
|
||||
set_struct_debug_option (struct gcc_options *opts, const char *spec)
|
||||
set_struct_debug_option (struct gcc_options *opts, location_t loc,
|
||||
const char *spec)
|
||||
{
|
||||
/* various labels for comparison */
|
||||
static const char dfn_lbl[] = "dfn:", dir_lbl[] = "dir:", ind_lbl[] = "ind:";
|
||||
@ -96,8 +94,10 @@ set_struct_debug_option (struct gcc_options *opts, const char *spec)
|
||||
else if (MATCH (base_lbl, spec))
|
||||
files = DINFO_STRUCT_FILE_BASE;
|
||||
else
|
||||
error ("argument %qs to %<-femit-struct-debug-detailed%> not recognized",
|
||||
spec);
|
||||
error_at (loc,
|
||||
"argument %qs to %<-femit-struct-debug-detailed%> "
|
||||
"not recognized",
|
||||
spec);
|
||||
|
||||
/* Effect the specification. */
|
||||
if (usage == DINFO_USAGE_NUM_ENUMS)
|
||||
@ -124,20 +124,23 @@ set_struct_debug_option (struct gcc_options *opts, const char *spec)
|
||||
}
|
||||
|
||||
if (*spec == ',')
|
||||
set_struct_debug_option (opts, spec+1);
|
||||
set_struct_debug_option (opts, loc, spec+1);
|
||||
else
|
||||
{
|
||||
/* No more -femit-struct-debug-detailed specifications.
|
||||
Do final checks. */
|
||||
if (*spec != '\0')
|
||||
error ("argument %qs to %<-femit-struct-debug-detailed%> unknown",
|
||||
spec);
|
||||
error_at (loc,
|
||||
"argument %qs to %<-femit-struct-debug-detailed%> unknown",
|
||||
spec);
|
||||
if (opts->x_debug_struct_ordinary[DINFO_USAGE_DIR_USE]
|
||||
< opts->x_debug_struct_ordinary[DINFO_USAGE_IND_USE]
|
||||
|| opts->x_debug_struct_generic[DINFO_USAGE_DIR_USE]
|
||||
< opts->x_debug_struct_generic[DINFO_USAGE_IND_USE])
|
||||
error ("%<-femit-struct-debug-detailed=dir:...%> must allow at least"
|
||||
" as much as %<-femit-struct-debug-detailed=ind:...%>");
|
||||
error_at (loc,
|
||||
"%<-femit-struct-debug-detailed=dir:...%> must allow "
|
||||
"at least as much as "
|
||||
"%<-femit-struct-debug-detailed=ind:...%>");
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,12 +197,15 @@ DEF_VEC_P(char_p);
|
||||
DEF_VEC_ALLOC_P(char_p,heap);
|
||||
|
||||
static void handle_param (struct gcc_options *opts,
|
||||
struct gcc_options *opts_set, const char *carg);
|
||||
struct gcc_options *opts_set, location_t loc,
|
||||
const char *carg);
|
||||
static void set_debug_level (enum debug_info_type type, int extended,
|
||||
const char *arg, struct gcc_options *opts,
|
||||
struct gcc_options *opts_set);
|
||||
struct gcc_options *opts_set,
|
||||
location_t loc);
|
||||
static void set_fast_math_flags (struct gcc_options *opts, int set);
|
||||
static void decode_d_option (const char *arg);
|
||||
static void decode_d_option (const char *arg, struct gcc_options *opts,
|
||||
location_t loc, diagnostic_context *dc);
|
||||
static void set_unsafe_math_optimizations_flags (struct gcc_options *opts,
|
||||
int set);
|
||||
static void enable_warning_as_error (const char *arg, int value,
|
||||
@ -535,8 +541,9 @@ default_options_optimization (struct gcc_options *opts,
|
||||
{
|
||||
const int optimize_val = integral_argument (opt->arg);
|
||||
if (optimize_val == -1)
|
||||
error ("argument to %qs should be a non-negative integer",
|
||||
"-O");
|
||||
error_at (loc,
|
||||
"argument to %qs should be a non-negative integer",
|
||||
"-O");
|
||||
else
|
||||
{
|
||||
opts->x_optimize = optimize_val;
|
||||
@ -604,15 +611,18 @@ default_options_optimization (struct gcc_options *opts,
|
||||
ofast, lang_mask, handlers, loc, dc);
|
||||
}
|
||||
|
||||
/* After all options have been read into OPTS and OPTS_SET, finalize
|
||||
settings of those options and diagnose incompatible
|
||||
/* After all options at LOC have been read into OPTS and OPTS_SET,
|
||||
finalize settings of those options and diagnose incompatible
|
||||
combinations. */
|
||||
void
|
||||
finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
|
||||
location_t loc)
|
||||
{
|
||||
static bool first_time_p = true;
|
||||
enum unwind_info_type ui_except;
|
||||
|
||||
/* These assertions are because of the use of target hooks that
|
||||
still access global data rather than being passed an options
|
||||
structure pointer. */
|
||||
gcc_assert (opts == &global_options);
|
||||
gcc_assert (opts_set = &global_options_set);
|
||||
|
||||
@ -651,12 +661,12 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
if (!opts->x_flag_unit_at_a_time)
|
||||
{
|
||||
if (opts->x_flag_section_anchors && opts_set->x_flag_section_anchors)
|
||||
error ("section anchors must be disabled when unit-at-a-time "
|
||||
"is disabled");
|
||||
error_at (loc, "section anchors must be disabled when unit-at-a-time "
|
||||
"is disabled");
|
||||
opts->x_flag_section_anchors = 0;
|
||||
if (opts->x_flag_toplevel_reorder == 1)
|
||||
error ("toplevel reorder must be disabled when unit-at-a-time "
|
||||
"is disabled");
|
||||
error_at (loc, "toplevel reorder must be disabled when unit-at-a-time "
|
||||
"is disabled");
|
||||
opts->x_flag_toplevel_reorder = 0;
|
||||
}
|
||||
|
||||
@ -667,7 +677,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
/* Unless the user has asked for section anchors, we disable toplevel
|
||||
reordering at -O0 to disable transformations that might be surprising
|
||||
to end users and to get -fno-toplevel-reorder tested. */
|
||||
if (!optimize
|
||||
if (!opts->x_optimize
|
||||
&& opts->x_flag_toplevel_reorder == 2
|
||||
&& !(opts->x_flag_section_anchors && opts_set->x_flag_section_anchors))
|
||||
{
|
||||
@ -677,21 +687,21 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
if (!opts->x_flag_toplevel_reorder)
|
||||
{
|
||||
if (opts->x_flag_section_anchors && opts_set->x_flag_section_anchors)
|
||||
error ("section anchors must be disabled when toplevel reorder"
|
||||
" is disabled");
|
||||
error_at (loc, "section anchors must be disabled when toplevel reorder"
|
||||
" is disabled");
|
||||
opts->x_flag_section_anchors = 0;
|
||||
}
|
||||
|
||||
if (first_time_p)
|
||||
if (!opts->x_flag_opts_finished)
|
||||
{
|
||||
if (opts->x_flag_pie)
|
||||
opts->x_flag_pic = opts->x_flag_pie;
|
||||
if (opts->x_flag_pic && !opts->x_flag_pie)
|
||||
opts->x_flag_shlib = 1;
|
||||
first_time_p = false;
|
||||
opts->x_flag_opts_finished = false;
|
||||
}
|
||||
|
||||
if (optimize == 0)
|
||||
if (opts->x_optimize == 0)
|
||||
{
|
||||
/* Inlining does not work if not optimizing,
|
||||
so force it not to be done. */
|
||||
@ -711,7 +721,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
&& opts->x_flag_reorder_blocks_and_partition
|
||||
&& (ui_except == UI_SJLJ || ui_except == UI_TARGET))
|
||||
{
|
||||
inform (input_location,
|
||||
inform (loc,
|
||||
"-freorder-blocks-and-partition does not work "
|
||||
"with exceptions on this architecture");
|
||||
opts->x_flag_reorder_blocks_and_partition = 0;
|
||||
@ -726,7 +736,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
&& opts->x_flag_reorder_blocks_and_partition
|
||||
&& (ui_except == UI_SJLJ || ui_except == UI_TARGET))
|
||||
{
|
||||
inform (input_location,
|
||||
inform (loc,
|
||||
"-freorder-blocks-and-partition does not support "
|
||||
"unwind info on this architecture");
|
||||
opts->x_flag_reorder_blocks_and_partition = 0;
|
||||
@ -743,7 +753,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
&& targetm.unwind_tables_default
|
||||
&& (ui_except == UI_SJLJ || ui_except == UI_TARGET))))
|
||||
{
|
||||
inform (input_location,
|
||||
inform (loc,
|
||||
"-freorder-blocks-and-partition does not work "
|
||||
"on this architecture");
|
||||
opts->x_flag_reorder_blocks_and_partition = 0;
|
||||
@ -758,7 +768,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
if (!targetm.ira_cover_classes
|
||||
&& opts->x_flag_ira_algorithm == IRA_ALGORITHM_CB)
|
||||
{
|
||||
inform (input_location,
|
||||
inform (loc,
|
||||
"-fira-algorithm=CB does not work on this architecture");
|
||||
opts->x_flag_ira_algorithm = IRA_ALGORITHM_PRIORITY;
|
||||
}
|
||||
@ -787,7 +797,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
errors later. */
|
||||
opts->x_flag_whole_program = 0;
|
||||
#else
|
||||
error ("LTO support has not been enabled in this configuration");
|
||||
error_at (loc, "LTO support has not been enabled in this configuration");
|
||||
#endif
|
||||
}
|
||||
if ((opts->x_flag_lto_partition_balanced != 0) + (opts->x_flag_lto_partition_1to1 != 0)
|
||||
@ -796,7 +806,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
if ((opts->x_flag_lto_partition_balanced != 0)
|
||||
+ (opts->x_flag_lto_partition_1to1 != 0)
|
||||
+ (opts->x_flag_lto_partition_none != 0) > 1)
|
||||
error ("only one -flto-partition value can be specified");
|
||||
error_at (loc, "only one -flto-partition value can be specified");
|
||||
}
|
||||
|
||||
/* We initialize opts->x_flag_split_stack to -1 so that targets can set a
|
||||
@ -807,8 +817,8 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
{
|
||||
if (!targetm.supports_split_stack (true))
|
||||
{
|
||||
error ("%<-fsplit-stack%> is not supported by "
|
||||
"this compiler configuration");
|
||||
error_at (loc, "%<-fsplit-stack%> is not supported by "
|
||||
"this compiler configuration");
|
||||
opts->x_flag_split_stack = 0;
|
||||
}
|
||||
}
|
||||
@ -873,7 +883,6 @@ print_filtered_help (unsigned int include_flags,
|
||||
{
|
||||
unsigned int i;
|
||||
const char *help;
|
||||
static char *printed = NULL;
|
||||
bool found = false;
|
||||
bool displayed = false;
|
||||
|
||||
@ -900,8 +909,8 @@ print_filtered_help (unsigned int include_flags,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!printed)
|
||||
printed = XCNEWVAR (char, cl_options_count);
|
||||
if (!opts->x_help_printed)
|
||||
opts->x_help_printed = XCNEWVAR (char, cl_options_count);
|
||||
|
||||
for (i = 0; i < cl_options_count; i++)
|
||||
{
|
||||
@ -930,10 +939,10 @@ print_filtered_help (unsigned int include_flags,
|
||||
|
||||
found = true;
|
||||
/* Skip switches that have already been printed. */
|
||||
if (printed[i])
|
||||
if (opts->x_help_printed[i])
|
||||
continue;
|
||||
|
||||
printed[i] = true;
|
||||
opts->x_help_printed[i] = true;
|
||||
|
||||
help = option->help;
|
||||
if (help == NULL)
|
||||
@ -1041,7 +1050,6 @@ print_specific_help (unsigned int include_flags,
|
||||
const char * descrip_extra = "";
|
||||
size_t i;
|
||||
unsigned int flag;
|
||||
static unsigned int columns = 0;
|
||||
|
||||
/* Sanity check: Make sure that we do not have more
|
||||
languages than we have bits available to enumerate them. */
|
||||
@ -1049,7 +1057,7 @@ print_specific_help (unsigned int include_flags,
|
||||
|
||||
/* If we have not done so already, obtain
|
||||
the desired maximum width of the output. */
|
||||
if (columns == 0)
|
||||
if (opts->x_help_columns == 0)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
@ -1059,12 +1067,12 @@ print_specific_help (unsigned int include_flags,
|
||||
int value = atoi (p);
|
||||
|
||||
if (value > 0)
|
||||
columns = value;
|
||||
opts->x_help_columns = value;
|
||||
}
|
||||
|
||||
if (columns == 0)
|
||||
if (opts->x_help_columns == 0)
|
||||
/* Use a reasonable default. */
|
||||
columns = 80;
|
||||
opts->x_help_columns = 80;
|
||||
}
|
||||
|
||||
/* Decide upon the title for the options that we are going to display. */
|
||||
@ -1130,7 +1138,8 @@ print_specific_help (unsigned int include_flags,
|
||||
}
|
||||
|
||||
printf ("%s%s:\n", description, descrip_extra);
|
||||
print_filtered_help (include_flags, exclude_flags, any_flags, columns, opts);
|
||||
print_filtered_help (include_flags, exclude_flags, any_flags,
|
||||
opts->x_help_columns, opts);
|
||||
}
|
||||
|
||||
/* Handle target- and language-independent options. Return zero to
|
||||
@ -1160,7 +1169,7 @@ common_handle_option (struct gcc_options *opts,
|
||||
switch (code)
|
||||
{
|
||||
case OPT__param:
|
||||
handle_param (opts, opts_set, arg);
|
||||
handle_param (opts, opts_set, loc, arg);
|
||||
break;
|
||||
|
||||
case OPT__help:
|
||||
@ -1290,17 +1299,18 @@ common_handle_option (struct gcc_options *opts,
|
||||
if (strncasecmp (a, "c", len) == 0)
|
||||
* pflags |= lang_flag;
|
||||
else
|
||||
fnotice (stderr,
|
||||
"warning: --help argument %.*s is ambiguous, please be more specific\n",
|
||||
len, a);
|
||||
warning_at (loc, 0,
|
||||
"--help argument %q.*s is ambiguous, "
|
||||
"please be more specific",
|
||||
len, a);
|
||||
}
|
||||
}
|
||||
else if (lang_flag != 0)
|
||||
* pflags |= lang_flag;
|
||||
else
|
||||
fnotice (stderr,
|
||||
"warning: unrecognized argument to --help= option: %.*s\n",
|
||||
len, a);
|
||||
warning_at (loc, 0,
|
||||
"unrecognized argument to --help= option: %q.*s",
|
||||
len, a);
|
||||
|
||||
if (comma == NULL)
|
||||
break;
|
||||
@ -1370,7 +1380,7 @@ common_handle_option (struct gcc_options *opts,
|
||||
break;
|
||||
|
||||
case OPT_d:
|
||||
decode_d_option (arg);
|
||||
decode_d_option (arg, opts, loc, dc);
|
||||
break;
|
||||
|
||||
case OPT_fcall_used_:
|
||||
@ -1383,15 +1393,12 @@ common_handle_option (struct gcc_options *opts,
|
||||
break;
|
||||
|
||||
case OPT_fdbg_cnt_:
|
||||
dbg_cnt_process_opt (arg);
|
||||
break;
|
||||
|
||||
case OPT_fdbg_cnt_list:
|
||||
dbg_cnt_list_all_counters ();
|
||||
/* Deferred. */
|
||||
break;
|
||||
|
||||
case OPT_fdebug_prefix_map_:
|
||||
add_debug_prefix_map (arg);
|
||||
/* Deferred. */
|
||||
break;
|
||||
|
||||
case OPT_fdiagnostics_show_location_:
|
||||
@ -1421,7 +1428,7 @@ common_handle_option (struct gcc_options *opts,
|
||||
else if (!strcmp (arg, "fast"))
|
||||
opts->x_flag_fp_contract_mode = FP_CONTRACT_FAST;
|
||||
else
|
||||
error ("unknown floating point contraction style \"%s\"", arg);
|
||||
error_at (loc, "unknown floating point contraction style \"%s\"", arg);
|
||||
break;
|
||||
|
||||
case OPT_fexcess_precision_:
|
||||
@ -1430,7 +1437,7 @@ common_handle_option (struct gcc_options *opts,
|
||||
else if (!strcmp (arg, "standard"))
|
||||
opts->x_flag_excess_precision_cmdline = EXCESS_PRECISION_STANDARD;
|
||||
else
|
||||
error ("unknown excess precision style \"%s\"", arg);
|
||||
error_at (loc, "unknown excess precision style \"%s\"", arg);
|
||||
break;
|
||||
|
||||
case OPT_ffast_math:
|
||||
@ -1468,12 +1475,11 @@ common_handle_option (struct gcc_options *opts,
|
||||
|
||||
case OPT_fpack_struct_:
|
||||
if (value <= 0 || (value & (value - 1)) || value > 16)
|
||||
error ("structure alignment must be a small power of two, not %d", value);
|
||||
error_at (loc,
|
||||
"structure alignment must be a small power of two, not %d",
|
||||
value);
|
||||
else
|
||||
{
|
||||
initial_max_fld_align = value;
|
||||
maximum_field_alignment = value * BITS_PER_UNIT;
|
||||
}
|
||||
opts->x_initial_max_fld_align = value;
|
||||
break;
|
||||
|
||||
case OPT_fplugin_:
|
||||
@ -1544,7 +1550,7 @@ common_handle_option (struct gcc_options *opts,
|
||||
else if (!strcmp(arg, "protected"))
|
||||
opts->x_default_visibility = VISIBILITY_PROTECTED;
|
||||
else
|
||||
error ("unrecognized visibility value \"%s\"", arg);
|
||||
error_at (loc, "unrecognized visibility value \"%s\"", arg);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1552,16 +1558,16 @@ common_handle_option (struct gcc_options *opts,
|
||||
/* The real switch is -fno-random-seed. */
|
||||
if (value)
|
||||
return false;
|
||||
set_random_seed (NULL);
|
||||
/* Deferred. */
|
||||
break;
|
||||
|
||||
case OPT_frandom_seed_:
|
||||
set_random_seed (arg);
|
||||
/* Deferred. */
|
||||
break;
|
||||
|
||||
case OPT_fsched_verbose_:
|
||||
#ifdef INSN_SCHEDULING
|
||||
fix_sched_param ("verbose", arg);
|
||||
/* Handled with Var in common.opt. */
|
||||
break;
|
||||
#else
|
||||
return false;
|
||||
@ -1593,7 +1599,7 @@ common_handle_option (struct gcc_options *opts,
|
||||
? STATIC_BUILTIN_STACK_CHECK
|
||||
: GENERIC_STACK_CHECK;
|
||||
else
|
||||
warning (0, "unknown stack check parameter \"%s\"", arg);
|
||||
warning_at (loc, 0, "unknown stack check parameter \"%s\"", arg);
|
||||
break;
|
||||
|
||||
case OPT_fstack_limit:
|
||||
@ -1622,7 +1628,7 @@ common_handle_option (struct gcc_options *opts,
|
||||
else if (!strcmp (arg, "local-exec"))
|
||||
opts->x_flag_tls_default = TLS_MODEL_LOCAL_EXEC;
|
||||
else
|
||||
warning (0, "unknown tls-model \"%s\"", arg);
|
||||
warning_at (loc, 0, "unknown tls-model \"%s\"", arg);
|
||||
break;
|
||||
|
||||
case OPT_fira_algorithm_:
|
||||
@ -1631,7 +1637,7 @@ common_handle_option (struct gcc_options *opts,
|
||||
else if (!strcmp (arg, "priority"))
|
||||
opts->x_flag_ira_algorithm = IRA_ALGORITHM_PRIORITY;
|
||||
else
|
||||
warning (0, "unknown ira algorithm \"%s\"", arg);
|
||||
warning_at (loc, 0, "unknown ira algorithm \"%s\"", arg);
|
||||
break;
|
||||
|
||||
case OPT_fira_region_:
|
||||
@ -1642,41 +1648,44 @@ common_handle_option (struct gcc_options *opts,
|
||||
else if (!strcmp (arg, "mixed"))
|
||||
opts->x_flag_ira_region = IRA_REGION_MIXED;
|
||||
else
|
||||
warning (0, "unknown ira region \"%s\"", arg);
|
||||
warning_at (loc, 0, "unknown ira region \"%s\"", arg);
|
||||
break;
|
||||
|
||||
case OPT_g:
|
||||
set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, arg, opts, opts_set);
|
||||
set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, arg, opts, opts_set,
|
||||
loc);
|
||||
break;
|
||||
|
||||
case OPT_gcoff:
|
||||
set_debug_level (SDB_DEBUG, false, arg, opts, opts_set);
|
||||
set_debug_level (SDB_DEBUG, false, arg, opts, opts_set, loc);
|
||||
break;
|
||||
|
||||
case OPT_gdwarf_:
|
||||
if (value < 2 || value > 4)
|
||||
error ("dwarf version %d is not supported", value);
|
||||
error_at (loc, "dwarf version %d is not supported", value);
|
||||
else
|
||||
dwarf_version = value;
|
||||
set_debug_level (DWARF2_DEBUG, false, "", opts, opts_set);
|
||||
set_debug_level (DWARF2_DEBUG, false, "", opts, opts_set, loc);
|
||||
break;
|
||||
|
||||
case OPT_ggdb:
|
||||
set_debug_level (NO_DEBUG, 2, arg, opts, opts_set);
|
||||
set_debug_level (NO_DEBUG, 2, arg, opts, opts_set, loc);
|
||||
break;
|
||||
|
||||
case OPT_gstabs:
|
||||
case OPT_gstabs_:
|
||||
set_debug_level (DBX_DEBUG, code == OPT_gstabs_, arg, opts, opts_set);
|
||||
set_debug_level (DBX_DEBUG, code == OPT_gstabs_, arg, opts, opts_set,
|
||||
loc);
|
||||
break;
|
||||
|
||||
case OPT_gvms:
|
||||
set_debug_level (VMS_DEBUG, false, arg, opts, opts_set);
|
||||
set_debug_level (VMS_DEBUG, false, arg, opts, opts_set, loc);
|
||||
break;
|
||||
|
||||
case OPT_gxcoff:
|
||||
case OPT_gxcoff_:
|
||||
set_debug_level (XCOFF_DEBUG, code == OPT_gxcoff_, arg, opts, opts_set);
|
||||
set_debug_level (XCOFF_DEBUG, code == OPT_gxcoff_, arg, opts, opts_set,
|
||||
loc);
|
||||
break;
|
||||
|
||||
case OPT_pedantic_errors:
|
||||
@ -1713,7 +1722,7 @@ common_handle_option (struct gcc_options *opts,
|
||||
/* Handle --param NAME=VALUE. */
|
||||
static void
|
||||
handle_param (struct gcc_options *opts, struct gcc_options *opts_set,
|
||||
const char *carg)
|
||||
location_t loc, const char *carg)
|
||||
{
|
||||
char *equal, *arg;
|
||||
int value;
|
||||
@ -1721,12 +1730,13 @@ handle_param (struct gcc_options *opts, struct gcc_options *opts_set,
|
||||
arg = xstrdup (carg);
|
||||
equal = strchr (arg, '=');
|
||||
if (!equal)
|
||||
error ("%s: --param arguments should be of the form NAME=VALUE", arg);
|
||||
error_at (loc, "%s: --param arguments should be of the form NAME=VALUE",
|
||||
arg);
|
||||
else
|
||||
{
|
||||
value = integral_argument (equal + 1);
|
||||
if (value == -1)
|
||||
error ("invalid --param value %qs", equal + 1);
|
||||
error_at (loc, "invalid --param value %qs", equal + 1);
|
||||
else
|
||||
{
|
||||
*equal = '\0';
|
||||
@ -1807,11 +1817,12 @@ fast_math_flags_struct_set_p (struct cl_optimization *opt)
|
||||
|
||||
/* Handle a debug output -g switch for options OPTS
|
||||
(OPTS_SET->x_write_symbols storing whether a debug type was passed
|
||||
explicitly). EXTENDED is true or false to support extended output
|
||||
(2 is special and means "-ggdb" was given). */
|
||||
explicitly), location LOC. EXTENDED is true or false to support
|
||||
extended output (2 is special and means "-ggdb" was given). */
|
||||
static void
|
||||
set_debug_level (enum debug_info_type type, int extended, const char *arg,
|
||||
struct gcc_options *opts, struct gcc_options *opts_set)
|
||||
struct gcc_options *opts, struct gcc_options *opts_set,
|
||||
location_t loc)
|
||||
{
|
||||
opts->x_use_gnu_debug_info_extensions = extended;
|
||||
|
||||
@ -1831,7 +1842,7 @@ set_debug_level (enum debug_info_type type, int extended, const char *arg,
|
||||
}
|
||||
|
||||
if (opts->x_write_symbols == NO_DEBUG)
|
||||
warning (0, "target system does not support debug output");
|
||||
warning_at (loc, 0, "target system does not support debug output");
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1840,8 +1851,8 @@ set_debug_level (enum debug_info_type type, int extended, const char *arg,
|
||||
if (opts_set->x_write_symbols != NO_DEBUG
|
||||
&& opts->x_write_symbols != NO_DEBUG
|
||||
&& type != opts->x_write_symbols)
|
||||
error ("debug format \"%s\" conflicts with prior selection",
|
||||
debug_type_names[type]);
|
||||
error_at (loc, "debug format \"%s\" conflicts with prior selection",
|
||||
debug_type_names[type]);
|
||||
opts->x_write_symbols = type;
|
||||
opts_set->x_write_symbols = type;
|
||||
}
|
||||
@ -1856,19 +1867,20 @@ set_debug_level (enum debug_info_type type, int extended, const char *arg,
|
||||
{
|
||||
int argval = integral_argument (arg);
|
||||
if (argval == -1)
|
||||
error ("unrecognised debug output level \"%s\"", arg);
|
||||
error_at (loc, "unrecognised debug output level \"%s\"", arg);
|
||||
else if (argval > 3)
|
||||
error ("debug output level %s is too high", arg);
|
||||
error_at (loc, "debug output level %s is too high", arg);
|
||||
else
|
||||
opts->x_debug_info_level = (enum debug_info_levels) argval;
|
||||
}
|
||||
}
|
||||
|
||||
/* Arrange to dump core on error. (The regular error message is still
|
||||
printed first, except in the case of abort ().) */
|
||||
/* Arrange to dump core on error for diagnostic context DC. (The
|
||||
regular error message is still printed first, except in the case of
|
||||
abort ().) */
|
||||
|
||||
static void
|
||||
setup_core_dumping (void)
|
||||
setup_core_dumping (diagnostic_context *dc)
|
||||
{
|
||||
#ifdef SIGABRT
|
||||
signal (SIGABRT, SIG_DFL);
|
||||
@ -1883,13 +1895,15 @@ setup_core_dumping (void)
|
||||
fatal_error ("setting core file size limit to maximum: %m");
|
||||
}
|
||||
#endif
|
||||
diagnostic_abort_on_error (global_dc);
|
||||
diagnostic_abort_on_error (dc);
|
||||
}
|
||||
|
||||
/* Parse a -d<ARG> command line switch. */
|
||||
/* Parse a -d<ARG> command line switch for OPTS, location LOC,
|
||||
diagnostic context DC. */
|
||||
|
||||
static void
|
||||
decode_d_option (const char *arg)
|
||||
decode_d_option (const char *arg, struct gcc_options *opts,
|
||||
location_t loc, diagnostic_context *dc)
|
||||
{
|
||||
int c;
|
||||
|
||||
@ -1897,20 +1911,20 @@ decode_d_option (const char *arg)
|
||||
switch (c = *arg++)
|
||||
{
|
||||
case 'A':
|
||||
flag_debug_asm = 1;
|
||||
opts->x_flag_debug_asm = 1;
|
||||
break;
|
||||
case 'p':
|
||||
flag_print_asm_name = 1;
|
||||
opts->x_flag_print_asm_name = 1;
|
||||
break;
|
||||
case 'P':
|
||||
flag_dump_rtl_in_asm = 1;
|
||||
flag_print_asm_name = 1;
|
||||
opts->x_flag_dump_rtl_in_asm = 1;
|
||||
opts->x_flag_print_asm_name = 1;
|
||||
break;
|
||||
case 'v':
|
||||
graph_dump_format = vcg;
|
||||
opts->x_graph_dump_format = vcg;
|
||||
break;
|
||||
case 'x':
|
||||
rtl_dump_and_exit = 1;
|
||||
opts->x_rtl_dump_and_exit = 1;
|
||||
break;
|
||||
case 'D': /* These are handled by the preprocessor. */
|
||||
case 'I':
|
||||
@ -1919,14 +1933,14 @@ decode_d_option (const char *arg)
|
||||
case 'U':
|
||||
break;
|
||||
case 'H':
|
||||
setup_core_dumping ();
|
||||
setup_core_dumping (dc);
|
||||
break;
|
||||
case 'a':
|
||||
enable_rtl_dump_file ();
|
||||
opts->x_flag_dump_all_passed = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
warning (0, "unrecognized gcc debugging option: %c", c);
|
||||
warning_at (loc, 0, "unrecognized gcc debugging option: %c", c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1952,7 +1966,7 @@ enable_warning_as_error (const char *arg, int value, unsigned int lang_mask,
|
||||
option_index = find_opt (new_option, lang_mask);
|
||||
if (option_index == OPT_SPECIAL_unknown)
|
||||
{
|
||||
error ("-Werror=%s: no option -%s", arg, new_option);
|
||||
error_at (loc, "-Werror=%s: no option -%s", arg, new_option);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -299,7 +299,8 @@ extern bool target_handle_option (struct gcc_options *opts,
|
||||
const struct cl_option_handlers *handlers,
|
||||
diagnostic_context *dc);
|
||||
extern void finish_options (struct gcc_options *opts,
|
||||
struct gcc_options *opts_set);
|
||||
struct gcc_options *opts_set,
|
||||
location_t loc);
|
||||
extern void default_options_optimization (struct gcc_options *opts,
|
||||
struct gcc_options *opts_set,
|
||||
struct cl_decoded_option *decoded_options,
|
||||
@ -308,4 +309,7 @@ extern void default_options_optimization (struct gcc_options *opts,
|
||||
unsigned int lang_mask,
|
||||
const struct cl_option_handlers *handlers,
|
||||
diagnostic_context *dc);
|
||||
extern void set_struct_debug_option (struct gcc_options *opts,
|
||||
location_t loc,
|
||||
const char *value);
|
||||
#endif
|
||||
|
@ -2387,9 +2387,6 @@ extern void schedule_insns (void);
|
||||
/* In sched-ebb.c. */
|
||||
extern void schedule_ebbs (void);
|
||||
|
||||
/* In haifa-sched.c. */
|
||||
extern void fix_sched_param (const char *, const char *);
|
||||
|
||||
/* In sel-sched-dump.c. */
|
||||
extern void sel_sched_fix_param (const char *param, const char *val);
|
||||
|
||||
|
@ -50,8 +50,6 @@ tree sizetype_tab[(int) TYPE_KIND_LAST];
|
||||
/* If nonzero, this is an upper limit on alignment of structure fields.
|
||||
The value is measured in bits. */
|
||||
unsigned int maximum_field_alignment = TARGET_DEFAULT_PACK_STRUCT * BITS_PER_UNIT;
|
||||
/* ... and its original value in bytes, specified via -fpack-struct=<value>. */
|
||||
unsigned int initial_max_fld_align = TARGET_DEFAULT_PACK_STRUCT;
|
||||
|
||||
/* Nonzero if all REFERENCE_TYPEs are internal and hence should be allocated
|
||||
in the address spaces' address_mode, not pointer_mode. Set only by
|
||||
|
@ -1,3 +1,7 @@
|
||||
2010-11-23 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* gcc.dg/opts-5.c: New test.
|
||||
|
||||
2010-11-23 Jeffrey Yasskin <jyasskin@google.com>
|
||||
|
||||
PR c++/46527
|
||||
|
5
gcc/testsuite/gcc.dg/opts-5.c
Normal file
5
gcc/testsuite/gcc.dg/opts-5.c
Normal file
@ -0,0 +1,5 @@
|
||||
/* -fstack-limit should be rejected without an ICE. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fstack-limit" } */
|
||||
|
||||
/* { dg-error "unrecognized command line option" "" { target *-*-* } 0 } */
|
21
gcc/toplev.c
21
gcc/toplev.c
@ -141,12 +141,6 @@ int main_input_baselength;
|
||||
|
||||
const struct gcc_debug_hooks *debug_hooks;
|
||||
|
||||
/* Other flags saying which kinds of debugging dump have been requested. */
|
||||
|
||||
int rtl_dump_and_exit;
|
||||
int flag_print_asm_name;
|
||||
enum graph_dump_types graph_dump_format;
|
||||
|
||||
/* True if this is the lto front end. This is used to disable
|
||||
gimple generation and lowering passes that are normally run on the
|
||||
output of a front end. These passes must be bypassed for lto since
|
||||
@ -184,19 +178,6 @@ int flag_next_runtime = 0;
|
||||
|
||||
int flag_permissive = 0;
|
||||
|
||||
/* -dA causes debug commentary information to be produced in
|
||||
the generated assembly code (to make it more readable). This option
|
||||
is generally only of use to those who actually need to read the
|
||||
generated assembly code (perhaps while debugging the compiler itself).
|
||||
Currently, this switch is only used by dwarfout.c; however, it is intended
|
||||
to be a catchall for printing debug information in the assembler file. */
|
||||
|
||||
int flag_debug_asm = 0;
|
||||
|
||||
/* -dP causes the rtl to be emitted as a comment in assembly. */
|
||||
|
||||
int flag_dump_rtl_in_asm = 0;
|
||||
|
||||
/* When non-NULL, indicates that whenever space is allocated on the
|
||||
stack, the resulting stack pointer must not pass this
|
||||
address---that is, for stacks that grow downward, the stack pointer
|
||||
@ -1606,6 +1587,8 @@ process_options (void)
|
||||
This can happen with incorrect pre-processed input. */
|
||||
debug_hooks = &do_nothing_debug_hooks;
|
||||
|
||||
maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT;
|
||||
|
||||
/* This replaces set_Wunused. */
|
||||
if (warn_unused_function == -1)
|
||||
warn_unused_function = warn_unused;
|
||||
|
@ -4503,8 +4503,6 @@ extern void finalize_size_functions (void);
|
||||
|
||||
/* If nonzero, an upper limit on alignment of structure fields, in bits, */
|
||||
extern unsigned int maximum_field_alignment;
|
||||
/* and its original value in bytes, specified via -fpack-struct=<value>. */
|
||||
extern unsigned int initial_max_fld_align;
|
||||
|
||||
/* Concatenate two lists (chains of TREE_LIST nodes) X and Y
|
||||
by making the last node in X point to Y.
|
||||
|
Loading…
x
Reference in New Issue
Block a user