aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto-cgraph.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2013-06-12 11:12:47 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2013-06-12 09:12:47 +0000
commitbbf9ad070dd1acea0c60aa531a738c8fc8d410d5 (patch)
treef90b96685d9ff8fb7b5722fdf8b1ff094b9c8b96 /gcc/lto-cgraph.c
parenta53f90adbffa2ec9fae2b28c7dd33d1b923b5431 (diff)
downloadgcc-bbf9ad070dd1acea0c60aa531a738c8fc8d410d5.zip
gcc-bbf9ad070dd1acea0c60aa531a738c8fc8d410d5.tar.gz
gcc-bbf9ad070dd1acea0c60aa531a738c8fc8d410d5.tar.bz2
lto-symtab.c (lto_symtab_merge_symbols): Populate symtab hashtable.
* lto-symtab.c (lto_symtab_merge_symbols): Populate symtab hashtable. * cgraph.h (varpool_create_empty_node): Declare. * lto-cgraph.c (input_node, input_varpool_node): Forcingly create duplicated nodes. * symtab.c (symtab_unregister_node): Be lax about missin entries in node hash. (symtab_get_node): Update comment. * varpool.c (varpool_create_empty_node): Break out from ... (varpool_node_for_decl): ... here. * lto-streamer.h (lto_file_decl_data): Add RESOLUTION_MAP. * lto.c (register_resolution): Take lto_file_data argument. (lto_register_var_decl_in_symtab, lto_register_function_decl_in_symtab): Update. (read_cgraph_and_symbols): Update resolution_map handling. From-SVN: r199990
Diffstat (limited to 'gcc/lto-cgraph.c')
-rw-r--r--gcc/lto-cgraph.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
index 63a9ddb..e3f8880 100644
--- a/gcc/lto-cgraph.c
+++ b/gcc/lto-cgraph.c
@@ -959,7 +959,14 @@ input_node (struct lto_file_decl_data *file_data,
vNULL, false);
}
else
- node = cgraph_get_create_node (fn_decl);
+ {
+ /* Declaration of functions can be already merged with a declaration
+ from other input file. We keep cgraph unmerged until after streaming
+ of ipa passes is done. Alays forcingly create a fresh node. */
+ node = cgraph_create_empty_node ();
+ node->symbol.decl = fn_decl;
+ symtab_register_node ((symtab_node)node);
+ }
node->symbol.order = order;
if (order >= symtab_order)
@@ -1035,7 +1042,14 @@ input_varpool_node (struct lto_file_decl_data *file_data,
order = streamer_read_hwi (ib) + order_base;
decl_index = streamer_read_uhwi (ib);
var_decl = lto_file_decl_data_get_var_decl (file_data, decl_index);
- node = varpool_node_for_decl (var_decl);
+
+ /* Declaration of functions can be already merged with a declaration
+ from other input file. We keep cgraph unmerged until after streaming
+ of ipa passes is done. Alays forcingly create a fresh node. */
+ node = varpool_create_empty_node ();
+ node->symbol.decl = var_decl;
+ symtab_register_node ((symtab_node)node);
+
node->symbol.order = order;
if (order >= symtab_order)
symtab_order = order + 1;