cgraphunit.c (expand_thunk): Get body before touching arguments.
authorJan Hubicka <jh@suse.cz>
Sat, 7 Sep 2013 07:48:59 +0000 (09:48 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 7 Sep 2013 07:48:59 +0000 (07:48 +0000)
* 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

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

index 34ae31ff0e174bdfde19a3092cecb1947ec74c00..98cda853635325f919e8178964d5f0939da0f58c 100644 (file)
@@ -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
index 08e0ff277f2f7f14aa160199a0d68f6ade9704fc..1afdd439dda98d1b62310c8c889906e2cec9f023 100644 (file)
@@ -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;
 
index f1d5935c42760bd4524301f1abb6aad2a3b527a4..7fa5bb34e58f8e28254e359c25c87f20055b2b1d 100644 (file)
@@ -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);
index f27f2fd9affce2f27c779aab3f3aeedaaf35425c..c46f71032af14838881e742b61a0647acce7ea84 100644 (file)
@@ -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)));