diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-06-12 09:12:47 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-06-12 09:12:47 +0000 |
commit | 9e9c3e92e9fbf4254b4ae185aeb345e2e08629e5 (patch) | |
tree | f90b96685d9ff8fb7b5722fdf8b1ff094b9c8b96 /gcc/lto-cgraph.c | |
parent | e9b152974632d5f7c0303e03da34bb4077f37b8e (diff) | |
download | gcc-9e9c3e92e9fbf4254b4ae185aeb345e2e08629e5.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@199990 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lto-cgraph.c')
-rw-r--r-- | gcc/lto-cgraph.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c index 63a9ddb2227..e3f8880be76 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; |