This patch moves some option settings from process_options to finish_options, making them avoid global state in the process, in preparation for moving parts of the target option override hook to be called from finish_options as well. (The idea is to minimize the amount of code in process_options above the call to targetm.target_option.override. Reordering code in the course of splitting the struct-based code from the global-state code is unavoidable, but moving this code now reduces the amount of reordering involved. I've checked the lang_hooks.post_options implementations and believe moving the target code past them should be safe.)
Bootstrapped with no regressions on x86_64-unknown-linux-gnu. Applied to mainline. 2011-05-11 Joseph Myers <jos...@codesourcery.com> * opts.c (finish_options): Move warning settings from process_options. * toplev.c (process_options): Move warning settings to finish_options. Index: gcc/toplev.c =================================================================== --- gcc/toplev.c (revision 173620) +++ gcc/toplev.c (working copy) @@ -1253,29 +1253,6 @@ process_options (void) maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT; - /* This replaces set_Wunused. */ - if (warn_unused_function == -1) - warn_unused_function = warn_unused; - if (warn_unused_label == -1) - warn_unused_label = warn_unused; - /* Wunused-parameter is enabled if both -Wunused -Wextra are enabled. */ - if (warn_unused_parameter == -1) - warn_unused_parameter = (warn_unused && extra_warnings); - if (warn_unused_variable == -1) - warn_unused_variable = warn_unused; - /* Wunused-but-set-parameter is enabled if both -Wunused -Wextra are - enabled. */ - if (warn_unused_but_set_parameter == -1) - warn_unused_but_set_parameter = (warn_unused && extra_warnings); - if (warn_unused_but_set_variable == -1) - warn_unused_but_set_variable = warn_unused; - if (warn_unused_value == -1) - warn_unused_value = warn_unused; - - /* This replaces set_Wextra. */ - if (warn_uninitialized == -1) - warn_uninitialized = extra_warnings; - /* Allow the front end to perform consistency checks and do further initialization based on the command line options. This hook also sets the original filename if appropriate (e.g. foo.i -> foo.c) Index: gcc/opts.c =================================================================== --- gcc/opts.c (revision 173620) +++ gcc/opts.c (working copy) @@ -807,6 +807,31 @@ finish_options (struct gcc_options *opts if (!opts->x_flag_tree_vectorize || !opts->x_flag_tree_loop_if_convert) maybe_set_param_value (PARAM_MAX_STORES_TO_SINK, 0, opts->x_param_values, opts_set->x_param_values); + + /* This replaces set_Wunused. */ + if (opts->x_warn_unused_function == -1) + opts->x_warn_unused_function = opts->x_warn_unused; + if (opts->x_warn_unused_label == -1) + opts->x_warn_unused_label = opts->x_warn_unused; + /* Wunused-parameter is enabled if both -Wunused -Wextra are enabled. */ + if (opts->x_warn_unused_parameter == -1) + opts->x_warn_unused_parameter = (opts->x_warn_unused + && opts->x_extra_warnings); + if (opts->x_warn_unused_variable == -1) + opts->x_warn_unused_variable = opts->x_warn_unused; + /* Wunused-but-set-parameter is enabled if both -Wunused -Wextra are + enabled. */ + if (opts->x_warn_unused_but_set_parameter == -1) + opts->x_warn_unused_but_set_parameter = (opts->x_warn_unused + && opts->x_extra_warnings); + if (opts->x_warn_unused_but_set_variable == -1) + opts->x_warn_unused_but_set_variable = opts->x_warn_unused; + if (opts->x_warn_unused_value == -1) + opts->x_warn_unused_value = opts->x_warn_unused; + + /* This replaces set_Wextra. */ + if (opts->x_warn_uninitialized == -1) + opts->x_warn_uninitialized = opts->x_extra_warnings; } #define LEFT_COLUMN 27 -- Joseph S. Myers jos...@codesourcery.com