re PR lto/41662 (FAIL: g++.dg/lto/20081109 cp_lto_20081109_0.o-cp_lto_20081109_1...
authorRichard Guenther <rguenther@suse.de>
Fri, 11 Dec 2009 14:46:09 +0000 (14:46 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 11 Dec 2009 14:46:09 +0000 (14:46 +0000)
2009-12-11  Richard Guenther  <rguenther@suse.de>

PR lto/41662
* lto-streamer-in.c (lto_init_eh): Move eh_initialized_p
handling here.
(input_eh_regions): Adjust.
(lto_input_ts_function_decl_tree_pointers): Initialize EH
if a non-NULL DECL_FUNCTION_PERSONALITY was read in.

From-SVN: r155163

gcc/ChangeLog
gcc/lto-streamer-in.c

index cf0c2e8cf9e3bdff8f1b0c694fa537058b470291..70a35a7937a32cd3b00a59b400e651a11a718e83 100644 (file)
@@ -1,3 +1,12 @@
+2009-12-11  Richard Guenther  <rguenther@suse.de>
+
+       PR lto/41662
+       * lto-streamer-in.c (lto_init_eh): Move eh_initialized_p
+       handling here.
+       (input_eh_regions): Adjust.
+       (lto_input_ts_function_decl_tree_pointers): Initialize EH
+       if a non-NULL DECL_FUNCTION_PERSONALITY was read in.
+
 2009-12-11  Duncan Sands  <baldrick@free.fr>
 
        * passes.c (make_pass_instance): Allocate and copy the right amount of
index a0ead410fd0a3d653b880592ed202d901b5f685e..781cf467862e79727f3ac32e90e6b3aaf7a4622b 100644 (file)
@@ -578,6 +578,11 @@ fixup_eh_region_pointers (struct function *fn, HOST_WIDE_INT root_region)
 static void
 lto_init_eh (void)
 {
+  static bool eh_initialized_p = false;
+
+  if (eh_initialized_p)
+    return;
+
   /* Contrary to most other FEs, we only initialize EH support when at
      least one of the files in the set contains exception regions in
      it.  Since this happens much later than the call to init_eh in
@@ -593,6 +598,8 @@ lto_init_eh (void)
   if (dwarf2out_do_frame ())
     dwarf2out_frame_init ();
 #endif
+
+  eh_initialized_p = true;
 }
 
 
@@ -605,7 +612,6 @@ input_eh_regions (struct lto_input_block *ib, struct data_in *data_in,
 {
   HOST_WIDE_INT i, root_region, len;
   enum LTO_tags tag;
-  static bool eh_initialized_p = false;
 
   tag = input_record_start (ib);
   if (tag == LTO_null)
@@ -616,11 +622,7 @@ input_eh_regions (struct lto_input_block *ib, struct data_in *data_in,
   /* If the file contains EH regions, then it was compiled with
      -fexceptions.  In that case, initialize the backend EH
      machinery.  */
-  if (!eh_initialized_p)
-    {
-      lto_init_eh ();
-      eh_initialized_p = true;
-    }
+  lto_init_eh ();
 
   gcc_assert (fn->eh);
 
@@ -2121,6 +2123,12 @@ lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib,
   DECL_FUNCTION_PERSONALITY (expr) = lto_input_tree (ib, data_in);
   DECL_FUNCTION_SPECIFIC_TARGET (expr) = lto_input_tree (ib, data_in);
   DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = lto_input_tree (ib, data_in);
+
+  /* If the file contains a function with an EH personality set,
+     then it was compiled with -fexceptions.  In that case, initialize
+     the backend EH machinery.  */
+  if (DECL_FUNCTION_PERSONALITY (expr))
+    lto_init_eh ();
 }