diff options
author | Jan Hubicka <jh@suse.cz> | 2013-09-07 09:48:59 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2013-09-07 07:48:59 +0000 |
commit | bcb650cbb87954272436b03e1cccf795ec7e777a (patch) | |
tree | dca52c1b4bd1b08e703705b2b1f193548cf0e483 | |
parent | 2ef38fa0f3bbc48ae8588f8e32238ab176bb1d26 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cgraphunit.c | 6 | ||||
-rw-r--r-- | gcc/lto-streamer-in.c | 3 | ||||
-rw-r--r-- | gcc/lto-streamer-out.c | 3 |
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))); |