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:
Joseph Myers 2010-11-24 00:54:26 +00:00 committed by Joseph Myers
parent c98cd5bff6
commit 299404a1ec
16 changed files with 291 additions and 193 deletions

View File

@ -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.

View File

@ -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) \

View File

@ -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.

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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_:

View File

@ -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
{

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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

View 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 } */

View File

@ -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;

View File

@ -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.