This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Yet more opts.c global state avoidance


This patch, relative to a tree with
<http://gcc.gnu.org/ml/gcc-patches/2010-11/msg02368.html> (pending
review) applied, further removes miscellaneous uses of global state in
opts.c, replacing them either with state in the gcc_options structure,
explicitly passed locations and diagnostic contexts, or deferred
options in cases where it didn't seem worth handling them in the
driver and avoiding global state.  Explicit locations are
systematically passed to diagnostic functions throughout opts.c
(however, it may call functions elsewhere that use the diagnostic
function versions without explicit locations).  I also found and fixed
a bug in the previous deferring of some options (an assertion that
could fail because deferring happened before the relevant validation
of options, see the new testcase opts-5.c).

Still to be fixed: a couple of options setting variables used directly
from Ada code (which I propose to handle like "optimize" and
"optimize_size"), and vect_set_verbosity_level needs moving to opts.c
and changing to work on gcc_options structures.

Bootstrapped with no regressions on x86_64-unknown-linux-gnu.  OK to
commit?

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.

c-family:
2010-11-23  Joseph Myers  <joseph@codesourcery.com>

	* c-opts.c (c_common_handle_option): Pass location to
	set_struct_debug_option.

testsuite:
2010-11-23  Joseph Myers  <joseph@codesourcery.com>

	* gcc.dg/opts-5.c: New test.

diff -rupN --exclude=.svn gcc-mainline-0/gcc/Makefile.in gcc-mainline/gcc/Makefile.in
--- gcc-mainline-0/gcc/Makefile.in	2010-11-23 08:13:20.000000000 -0800
+++ gcc-mainline/gcc/Makefile.in	2010-11-23 14:28:47.000000000 -0800
@@ -2823,15 +2823,14 @@ fold-const.o : fold-const.c $(CONFIG_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 -rupN --exclude=.svn gcc-mainline-0/gcc/c-family/c-opts.c gcc-mainline/gcc/c-family/c-opts.c
--- gcc-mainline-0/gcc/c-family/c-opts.c	2010-11-23 08:00:53.000000000 -0800
+++ gcc-mainline/gcc/c-family/c-opts.c	2010-11-23 13:55:18.000000000 -0800
@@ -654,16 +654,16 @@ c_common_handle_option (size_t scode, co
       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 -rupN --exclude=.svn gcc-mainline-0/gcc/common.opt gcc-mainline/gcc/common.opt
--- gcc-mainline-0/gcc/common.opt	2010-11-22 14:05:38.000000000 -0800
+++ gcc-mainline/gcc/common.opt	2010-11-23 14:37:11.000000000 -0800
@@ -147,6 +147,51 @@ enum debug_info_levels debug_info_level 
 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 dwarfout.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) Op
 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_speculat
 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 -rupN --exclude=.svn gcc-mainline-0/gcc/flags.h gcc-mainline/gcc/flags.h
--- gcc-mainline-0/gcc/flags.h	2010-11-23 08:16:16.000000000 -0800
+++ gcc-mainline/gcc/flags.h	2010-11-23 13:54:21.000000000 -0800
@@ -33,8 +33,6 @@ extern const char *const debug_type_name
 
 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
    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_ta
 /* 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 -rupN --exclude=.svn gcc-mainline-0/gcc/haifa-sched.c gcc-mainline/gcc/haifa-sched.c
--- gcc-mainline-0/gcc/haifa-sched.c	2010-11-08 04:32:50.000000000 -0800
+++ gcc-mainline/gcc/haifa-sched.c	2010-11-23 14:37:20.000000000 -0800
@@ -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 -rupN --exclude=.svn gcc-mainline-0/gcc/opts-global.c gcc-mainline/gcc/opts-global.c
--- gcc-mainline-0/gcc/opts-global.c	2010-11-23 08:10:40.000000000 -0800
+++ gcc-mainline/gcc/opts-global.c	2010-11-23 14:28:20.000000000 -0800
@@ -30,6 +30,8 @@ along with GCC; see the file COPYING3.  
 #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
 			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 -rupN --exclude=.svn gcc-mainline-0/gcc/opts.c gcc-mainline/gcc/opts.c
--- gcc-mainline-0/gcc/opts.c	2010-11-23 08:18:48.000000000 -0800
+++ gcc-mainline/gcc/opts.c	2010-11-23 14:44:54.000000000 -0800
@@ -37,14 +37,11 @@ along with GCC; see the file COPYING3.  
 #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_opti
   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_opti
     }
 
   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
 	    {
 	      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
 			 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
   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
   /* 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
   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
       && 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
       && 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
 	      && 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
   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
 	 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
       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
     {
       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 includ
 {
   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 includ
       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 includ
 
       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 includ
   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 includ
 
   /* 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 includ
 	  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 includ
     }
 
   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
   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
 		    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
       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
       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
       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
       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
 
     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
         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
       /* 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
 			     ? 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
       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
       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
       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
 /* 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, 
   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_
 
 /* 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 ty
 	    }
 
 	  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 ty
       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 ty
     {
       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
   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 -rupN --exclude=.svn gcc-mainline-0/gcc/opts.h gcc-mainline/gcc/opts.h
--- gcc-mainline-0/gcc/opts.h	2010-11-23 08:03:40.000000000 -0800
+++ gcc-mainline/gcc/opts.h	2010-11-23 13:54:39.000000000 -0800
@@ -299,7 +299,8 @@ extern bool target_handle_option (struct
 				  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
 					  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 -rupN --exclude=.svn gcc-mainline-0/gcc/rtl.h gcc-mainline/gcc/rtl.h
--- gcc-mainline-0/gcc/rtl.h	2010-11-22 05:28:25.000000000 -0800
+++ gcc-mainline/gcc/rtl.h	2010-11-23 14:36:35.000000000 -0800
@@ -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 -rupN --exclude=.svn gcc-mainline-0/gcc/stor-layout.c gcc-mainline/gcc/stor-layout.c
--- gcc-mainline-0/gcc/stor-layout.c	2010-11-15 04:45:51.000000000 -0800
+++ gcc-mainline/gcc/stor-layout.c	2010-11-23 14:12:55.000000000 -0800
@@ -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 -rupN --exclude=.svn gcc-mainline-0/gcc/testsuite/gcc.dg/opts-5.c gcc-mainline/gcc/testsuite/gcc.dg/opts-5.c
--- gcc-mainline-0/gcc/testsuite/gcc.dg/opts-5.c	1969-12-31 16:00:00.000000000 -0800
+++ gcc-mainline/gcc/testsuite/gcc.dg/opts-5.c	2010-11-23 13:44:08.000000000 -0800
@@ -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 -rupN --exclude=.svn gcc-mainline-0/gcc/toplev.c gcc-mainline/gcc/toplev.c
--- gcc-mainline-0/gcc/toplev.c	2010-11-23 08:15:01.000000000 -0800
+++ gcc-mainline/gcc/toplev.c	2010-11-23 14:17:49.000000000 -0800
@@ -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 -rupN --exclude=.svn gcc-mainline-0/gcc/tree.h gcc-mainline/gcc/tree.h
--- gcc-mainline-0/gcc/tree.h	2010-11-20 16:50:32.000000000 -0800
+++ gcc-mainline/gcc/tree.h	2010-11-23 14:13:51.000000000 -0800
@@ -4496,8 +4496,6 @@ extern void finalize_size_functions (voi
 
 /* 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.

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]