From 299404a1ec3d2dc7e2b19ea79c3e9f3552b6215d Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 24 Nov 2010 00:54:26 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 56 ++++++++ gcc/Makefile.in | 9 +- gcc/c-family/ChangeLog | 5 + gcc/c-family/c-opts.c | 6 +- gcc/common.opt | 57 +++++++- gcc/flags.h | 24 ---- gcc/haifa-sched.c | 13 -- gcc/opts-global.c | 33 ++++- gcc/opts.c | 238 ++++++++++++++++++---------------- gcc/opts.h | 6 +- gcc/rtl.h | 3 - gcc/stor-layout.c | 2 - gcc/testsuite/ChangeLog | 4 + gcc/testsuite/gcc.dg/opts-5.c | 5 + gcc/toplev.c | 21 +-- gcc/tree.h | 2 - 16 files changed, 291 insertions(+), 193 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/opts-5.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b2206b11f9..b7309ab1068 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,59 @@ +2010-11-23 Joseph Myers + + * 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 * flag-types.h (struct visibility_flags): Don't declare here. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index fb914333c17..bf562fa7581 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -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) \ diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 8ca7ba88197..1b14b0ebbbe 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2010-11-23 Joseph Myers + + * c-opts.c (c_common_handle_option): Pass location to + set_struct_debug_option. + 2010-11-23 Joseph Myers * c-common.c (visibility_options): Move from ../opts.c. diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index c5373060c6b..03af07ae8a8 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-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: diff --git a/gcc/common.opt b/gcc/common.opt index 255e6ab979d..e46a27735bb 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -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=. +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=:[,:,...] 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= Make compile reproducible using ; 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= Set the verbosity level of the scheduler fsched2-use-superblocks diff --git a/gcc/flags.h b/gcc/flags.h index 47a93a9f8bd..a3e277cece9 100644 --- a/gcc/flags.h +++ b/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 diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 653561907d0..3bc7dfd16ac 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -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; diff --git a/gcc/opts-global.c b/gcc/opts-global.c index 3ed562d465f..dc462ec354f 100644 --- a/gcc/opts-global.c +++ b/gcc/opts-global.c @@ -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_: diff --git a/gcc/opts.c b/gcc/opts.c index a088bc54840..30994565692 100644 --- a/gcc/opts.c +++ b/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 command line switch. */ +/* Parse a -d 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 { diff --git a/gcc/opts.h b/gcc/opts.h index e819bf38d27..fe7b8faef0d 100644 --- a/gcc/opts.h +++ b/gcc/opts.h @@ -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 diff --git a/gcc/rtl.h b/gcc/rtl.h index d5a674898f3..fdb185cd58d 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -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); diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index a1587a925f3..dc573a2f52f 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -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=. */ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bb3cada80d7..a38ef1082ad 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-11-23 Joseph Myers + + * gcc.dg/opts-5.c: New test. + 2010-11-23 Jeffrey Yasskin PR c++/46527 diff --git a/gcc/testsuite/gcc.dg/opts-5.c b/gcc/testsuite/gcc.dg/opts-5.c new file mode 100644 index 00000000000..ab1e6f91d3c --- /dev/null +++ b/gcc/testsuite/gcc.dg/opts-5.c @@ -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 } */ diff --git a/gcc/toplev.c b/gcc/toplev.c index edbb076f1ea..0d8cd137ec9 100644 --- a/gcc/toplev.c +++ b/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; diff --git a/gcc/tree.h b/gcc/tree.h index 8bc52ec87e2..e8e803df9d3 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -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=. */ -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. -- 2.30.2