summaryrefslogtreecommitdiff
path: root/gcc/lto-streamer-in.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2009-12-11 14:46:09 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2009-12-11 14:46:09 +0000
commiteecdda7ce40f085a40a5a31aea6b036ca23f8302 (patch)
treeef6d51c28d88455bb982f5b2c2a001f4c88cdb52 /gcc/lto-streamer-in.c
parentb74c019cc5ae3f52f30a39bff4d7a50417bdef74 (diff)
downloadgcc-eecdda7ce40f085a40a5a31aea6b036ca23f8302.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155163 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lto-streamer-in.c')
-rw-r--r--gcc/lto-streamer-in.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index a0ead410fd0..781cf467862 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -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 ();
}