GCC_DRIVER_HOST_INITIALIZATION happens before diagnostic_initialize, this can cause crashes if it call diagnostics such as warning, or fatal_error are used in the macro. One example would be in darwin-driver.c where darwin_find_version_from_kernel can call warning(). Another example is in xm-djgpp.h where it calls fatal (this appears to have bit-rotted with the fatal -> fatal_error switch)

Would moving the GCC_DRIVER_HOST_INITIALIZATION after diagnostic_initialize be OK?

Index: gcc.c
===================================================================
--- gcc.c       (revision 189681)
+++ gcc.c       (working copy)
@@ -6189,17 +6189,18 @@
                                   CL_DRIVER,
                                   &decoded_options, &decoded_options_count);

-#ifdef GCC_DRIVER_HOST_INITIALIZATION
-  /* Perform host dependent initialization when needed.  */
-  GCC_DRIVER_HOST_INITIALIZATION;
-#endif
-
   /* Unlock the stdio streams.  */
   unlock_std_streams ();

   gcc_init_libintl ();

   diagnostic_initialize (global_dc, 0);
+
+#ifdef GCC_DRIVER_HOST_INITIALIZATION
+  /* Perform host dependent initialization when needed.  */
+  GCC_DRIVER_HOST_INITIALIZATION;
+#endif
+
   if (atexit (delete_temp_files) != 0)
     fatal_error ("atexit failed");


Regards,

Ryan Mansfield

Reply via email to