]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Make flow of option processing more readily visible
authorRichard Biener <rguenther@suse.de>
Tue, 5 Oct 2021 10:35:57 +0000 (12:35 +0200)
committerRichard Biener <rguenther@suse.de>
Tue, 5 Oct 2021 11:34:43 +0000 (13:34 +0200)
This moves calls to various option processing stages to one place,
toplev::main.

2021-10-05  Richard Biener  <rguenther@suse.de>

* toplev.c (no_backend): Remove global var.
(process_options): Pass in no_backend, move post_options
langhook call to toplev::main.
(do_compile): Pass in no_backend, move process_options call
to toplev::main.
(toplev::run_self_tests): Check no_backend at the caller.
(toplev::main): Call post_options and process_options
split out from do_compile, do self-tests only if
no_backend is initialized.

gcc/toplev.c

index ec9f998a49bb60ac5cbcfe390a407d160fd946e9..70769087c13821119e1b2d1692a7e55a19d1734e 100644 (file)
@@ -104,8 +104,6 @@ along with GCC; see the file COPYING3.  If not see
 #endif
 
 static void general_init (const char *, bool);
-static void do_compile ();
-static void process_options (void);
 static void backend_init (void);
 static int lang_dependent_init (const char *);
 static void init_asm_output (const char *);
@@ -114,9 +112,6 @@ static void finalize (bool);
 static void crash_signal (int) ATTRIBUTE_NORETURN;
 static void compile_file (void);
 
-/* True if we don't need a backend (e.g. preprocessing only).  */
-static bool no_backend;
-
 /* Decoded options, and number of such options.  */
 struct cl_decoded_option *save_decoded_options;
 unsigned int save_decoded_options_count;
@@ -1233,7 +1228,7 @@ parse_alignment_opts (void)
 
 /* Process the options that have been parsed.  */
 static void
-process_options (void)
+process_options (bool no_backend)
 {
   const char *language_string = lang_hooks.name;
   /* Just in case lang_hooks.post_options ends up calling a debug_hook.
@@ -1242,12 +1237,6 @@ process_options (void)
 
   maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT;
 
-  /* Allow the front end to perform consistency checks and do further
-     initialization based on the command line options.  This hook also
-     sets the original filename if appropriate (e.g. foo.i -> foo.c)
-     so we can correctly initialize debug output.  */
-  no_backend = lang_hooks.post_options (&main_input_filename);
-
   /* Some machines may reject certain combinations of options.  */
   location_t saved_location = input_location;
   input_location = UNKNOWN_LOCATION;
@@ -2145,10 +2134,8 @@ standard_type_bitsize (int bitsize)
 
 /* Initialize the compiler, and compile the input file.  */
 static void
-do_compile ()
+do_compile (bool no_backend)
 {
-  process_options ();
-
   /* Don't do any more if an error has already occurred.  */
   if (!seen_error ())
     {
@@ -2277,11 +2264,6 @@ toplev::start_timevars ()
 void
 toplev::run_self_tests ()
 {
-  if (no_backend)
-    {
-      error_at (UNKNOWN_LOCATION, "self-tests incompatible with %<-E%>");
-      return;
-    }
 #if CHECKING_P
   /* Reset some state.  */
   input_location = UNKNOWN_LOCATION;
@@ -2368,17 +2350,30 @@ toplev::main (int argc, char **argv)
   /* Exit early if we can (e.g. -help).  */
   if (!exit_after_options)
     {
+      /* Allow the front end to perform consistency checks and do further
+        initialization based on the command line options.  This hook also
+        sets the original filename if appropriate (e.g. foo.i -> foo.c)
+        so we can correctly initialize debug output.  */
+      bool no_backend = lang_hooks.post_options (&main_input_filename);
+
+      process_options (no_backend);
+
       if (m_use_TV_TOTAL)
        start_timevars ();
-      do_compile ();
+      do_compile (no_backend);
+
+      if (flag_self_test)
+       {
+         if (no_backend)
+           error_at (UNKNOWN_LOCATION, "self-tests incompatible with %<-E%>");
+         else
+           run_self_tests ();
+       }
     }
 
   if (warningcount || errorcount || werrorcount)
     print_ignored_options ();
 
-  if (flag_self_test)
-    run_self_tests ();
-
   /* Invoke registered plugin callbacks if any.  Some plugins could
      emit some diagnostics here.  */
   invoke_plugin_callbacks (PLUGIN_FINISH, NULL);