This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[RFA]: Slight toplev.c initialization rearrangement
- From: Neil Booth <neil at daikokuya dot co dot uk>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 13 Aug 2002 21:35:15 +0100
- Subject: [RFA]: Slight toplev.c initialization rearrangement
Current initialization is a bit awkward. This is due to our
delaying debug initialization until reading the first line
of a file for the C family front ends, so that we can get
the true original name if it is preprocessed. However,
we need debug initialized before processing -D, -imacros etc.
on the command line.
To have any hope of moving the -D, -U, -A and imacros out of
cpplib to the front end in a clean way, this needs to change,
and debug info needs to be initialized earlier. This in turn
means that the first line of the file needs to be read in
earlier; namely in the post_options hook.
As a step towards doing this, I need to rearrange things in
toplev.c a bit. It makes initialization a little clearer,
IMO.
I'm bootstrapping this; OK to apply on success?
Neil.
* toplev.c (parse_options_and_default_flags): Don't call
post_options here.
(general_init): Initialize GC, pools and tree hash here,
instead of lang_independent_init.
(lang_independent_init): Rename backend_init.
(do_compile): Call post_options hook; exit early if there
have been errors after switch processing.
(toplev_main): Update.
Index: toplev.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/toplev.c,v
retrieving revision 1.667
diff -u -p -r1.667 toplev.c
--- toplev.c 4 Aug 2002 22:45:20 -0000 1.667
+++ toplev.c 13 Aug 2002 20:13:07 -0000
@@ -97,10 +97,10 @@ extern tree last_assemble_variable_decl;
extern void reg_alloc PARAMS ((void));
static void general_init PARAMS ((char *));
-static bool parse_options_and_default_flags PARAMS ((int, char **));
-static void do_compile PARAMS ((int));
+static void parse_options_and_default_flags PARAMS ((int, char **));
+static void do_compile PARAMS ((void));
static void process_options PARAMS ((void));
-static void lang_independent_init PARAMS ((int));
+static void backend_init PARAMS ((void));
static int lang_dependent_init PARAMS ((const char *));
static void init_asm_output PARAMS ((const char *));
static void finalize PARAMS ((void));
@@ -4723,6 +4723,12 @@ general_init (argv0)
/* Initialize the diagnostics reporting machinery, so option parsing
can give warnings and errors. */
diagnostic_initialize (global_dc);
+
+ /* Initialize the garbage-collector, string pools and tree type hash
+ table. */
+ init_ggc ();
+ init_stringpool ();
+ init_ttree ();
}
/* Parse command line options and set default flag values, called
@@ -4731,7 +4737,7 @@ general_init (argv0)
and identifier hashtables etc. are not initialized yet.
Return non-zero to suppress compiler back end initialization. */
-static bool
+static void
parse_options_and_default_flags (argc, argv)
int argc;
char **argv;
@@ -4968,10 +4974,6 @@ parse_options_and_default_flags (argc, a
if (flag_really_no_inline == 2)
flag_really_no_inline = flag_no_inline;
-
- /* All command line options have been parsed; allow the front end to
- perform consistency checks, etc. */
- return (*lang_hooks.post_options) ();
}
/* Process the options that have been parsed. */
@@ -5151,21 +5153,10 @@ process_options ()
flag_trapping_math = 1;
}
-/* Language-independent initialization, before language-dependent
- initialization. */
+/* Initialize the compiler back end. */
static void
-lang_independent_init (no_backend)
- int no_backend;
+backend_init ()
{
- /* Initialize the garbage-collector, and string pools. */
- init_ggc ();
-
- init_stringpool ();
- init_ttree ();
-
- if (no_backend)
- return;
-
/* init_emit_once uses reg_raw_mode and therefore must be called
after init_regs which initialized reg_raw_mode. */
init_regs ();
@@ -5305,12 +5296,19 @@ finalize ()
/* Initialize the compiler, and compile the input file. */
static void
-do_compile (no_backend)
- int no_backend;
+do_compile ()
{
+ /* All command line options have been parsed; allow the front end to
+ perform consistency checks, etc. */
+ bool no_backend = (*lang_hooks.post_options) ();
+
/* The bulk of command line switch processing. */
process_options ();
+ /* If an error has already occurred, give up. */
+ if (errorcount)
+ return;
+
if (aux_base_name)
/*NOP*/;
else if (filename)
@@ -5320,7 +5318,6 @@ do_compile (no_backend)
aux_base_name = name;
strip_off_ending (name, strlen (name));
}
-
else
aux_base_name = "gccaux";
@@ -5329,9 +5326,9 @@ do_compile (no_backend)
init_timevar ();
timevar_start (TV_TOTAL);
- /* Language-independent initialization. Also sets up GC, identifier
- hashes etc., and the back-end if requested. */
- lang_independent_init (no_backend);
+ /* Set up the back-end if requested. */
+ if (!no_backend)
+ backend_init ();
/* Language-dependent initialization. Returns true on success. */
if (lang_dependent_init (filename))
@@ -5356,18 +5353,16 @@ toplev_main (argc, argv)
int argc;
char **argv;
{
- bool no_backend;
-
/* Initialization of GCC's environment, and diagnostics. */
general_init (argv[0]);
/* Parse the options and do minimal processing; basically just
enough to default flags appropriately. */
- no_backend = parse_options_and_default_flags (argc, argv);
+ parse_options_and_default_flags (argc, argv);
/* Exit early if we can (e.g. -help). */
- if (!errorcount && !exit_after_options)
- do_compile (no_backend);
+ if (!exit_after_options)
+ do_compile ();
if (errorcount || sorrycount)
return (FATAL_EXIT_CODE);