aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2013-09-07 09:48:59 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2013-09-07 07:48:59 +0000
commitbcb650cbb87954272436b03e1cccf795ec7e777a (patch)
treedca52c1b4bd1b08e703705b2b1f193548cf0e483
parent2ef38fa0f3bbc48ae8588f8e32238ab176bb1d26 (diff)
downloadgcc-bcb650cbb87954272436b03e1cccf795ec7e777a.zip
gcc-bcb650cbb87954272436b03e1cccf795ec7e777a.tar.gz
gcc-bcb650cbb87954272436b03e1cccf795ec7e777a.tar.bz2
cgraphunit.c (expand_thunk): Get body before touching arguments.
* cgraphunit.c (expand_thunk): Get body before touching arguments. * lto-streamer-out.c: Stream thunks, too. * lto-streamer-in.c (input_function): Pop cfun here (lto_read_body): Instead of here. From-SVN: r202352
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cgraphunit.c6
-rw-r--r--gcc/lto-streamer-in.c3
-rw-r--r--gcc/lto-streamer-out.c3
4 files changed, 14 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 34ae31ff..98cda85 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-09-06 Jan Hubicka <jh@suse.cz>
+
+ * cgraphunit.c (expand_thunk): Get body before touching arguments.
+ * lto-streamer-out.c: Stream thunks, too.
+ * lto-streamer-in.c (input_function): Pop cfun here
+ (lto_read_body): Instead of here.
+
2013-09-06 Caroline Tice <cmtice@google.com>
* doc/install.texi: Add documentation for the --enable-vtable-verify
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 08e0ff2..1afdd43 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1433,7 +1433,11 @@ expand_thunk (struct cgraph_node *node)
tree virtual_offset = NULL;
tree alias = node->callees->callee->symbol.decl;
tree thunk_fndecl = node->symbol.decl;
- tree a = DECL_ARGUMENTS (thunk_fndecl);
+ tree a;
+
+ if (in_lto_p)
+ cgraph_get_body (node);
+ a = DECL_ARGUMENTS (thunk_fndecl);
current_function_decl = thunk_fndecl;
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index f1d5935..7fa5bb3 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -998,6 +998,7 @@ input_function (tree fn_decl, struct data_in *data_in,
free_dominance_info (CDI_DOMINATORS);
free_dominance_info (CDI_POST_DOMINATORS);
free (stmts);
+ pop_cfun ();
}
@@ -1086,8 +1087,6 @@ lto_read_body (struct lto_file_decl_data *file_data, struct cgraph_node *node,
/* Restore decl state */
file_data->current_decl_state = file_data->global_decl_state;
-
- pop_cfun ();
}
lto_data_in_delete (data_in);
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index f27f2fd..c46f710 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -1985,8 +1985,7 @@ lto_output (void)
cgraph_node *node = dyn_cast <cgraph_node> (snode);
if (node
&& lto_symtab_encoder_encode_body_p (encoder, node)
- && !node->symbol.alias
- && !node->thunk.thunk_p)
+ && !node->symbol.alias)
{
#ifdef ENABLE_CHECKING
gcc_assert (!bitmap_bit_p (output, DECL_UID (node->symbol.decl)));