summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog56
-rw-r--r--gcc/Makefile.in9
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-opts.c6
-rw-r--r--gcc/common.opt57
-rw-r--r--gcc/flags.h24
-rw-r--r--gcc/haifa-sched.c13
-rw-r--r--gcc/opts-global.c33
-rw-r--r--gcc/opts.c238
-rw-r--r--gcc/opts.h6
-rw-r--r--gcc/rtl.h3
-rw-r--r--gcc/stor-layout.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/opts-5.c5
-rw-r--r--gcc/toplev.c21
-rw-r--r--gcc/tree.h2
16 files changed, 291 insertions, 193 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9b2206b11f9..b7309ab1068 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,61 @@
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.
* flags.h (strip_off_ending, fast_math_flags_set_p,
fast_math_flags_struct_set_p): 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,5 +1,10 @@
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.
* c-common.h (struct visibility_flags, visibility_options):
Declare here.
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=<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
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<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
{
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=<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
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 <joseph@codesourcery.com>
+
+ * gcc.dg/opts-5.c: New test.
+
2010-11-23 Jeffrey Yasskin <jyasskin@google.com>
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=<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.