diff options
author | Jan Hubicka <jh@suse.cz> | 2013-06-05 16:15:31 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2013-06-05 14:15:31 +0000 |
commit | edb983b2cb3961d9a5fa45444ff0fbf16e3adc0a (patch) | |
tree | a3982caf99872c7045fe2746bb44f9b7a2a178ac /gcc/cgraph.c | |
parent | 9912dbe5c7d8c715d6506380ef62a3377297f4b4 (diff) | |
download | gcc-edb983b2cb3961d9a5fa45444ff0fbf16e3adc0a.zip gcc-edb983b2cb3961d9a5fa45444ff0fbf16e3adc0a.tar.gz gcc-edb983b2cb3961d9a5fa45444ff0fbf16e3adc0a.tar.bz2 |
class.c (emit_register_classes_in_jcr_section): Use DECL_PRESERVE_P instead of mark_decl_referenced.
* class.c (emit_register_classes_in_jcr_section): Use DECL_PRESERVE_P
instead of mark_decl_referenced.
* decl2.c (maybe_make_one_only): Use forced_by_abi instad of
mark_decl_referenced.
(mark_needed): Likewise.
* cgraph.c (cgraph_remove_node): Clear forced_by_abi.
(cgraph_node_cannot_be_local_p_1): Honnor symbol.forced_by_abi
and symtab_used_from_object_file_p.
(cgraph_make_node_local_1): Clear forced_by_abi.
(cgraph_can_remove_if_no_direct_calls_and): Use forced_by_abi
* cgraph.h (symtab_node_base): Add forced_by_abi.
(decide_is_variable_needed): Remove.
(varpool_can_remove_if_no_refs): Honnor symbol.forced_by_abi.
* cgraphunit.c (cgraph_decide_is_function_needed): Rename to ..
(decide_is_symbol_needed): ... this one; handle symbols in general;
always analyze virtuals; honnor forced_by_abi.
(cgraph_finalize_function): Update.
(varpool_finalize_decl): Update.
(symbol_defined_and_needed): Remove.
(analyze_functions): Update.
* lto-cgraph.c (lto_output_node, lto_output_varpool_node,
output_refs, input_overwrite_node): Handle forced_by_abi.
* ipa.c (cgraph_address_taken_from_non_vtable_p): Rename to ...
(address_taken_from_non_vtable_p): ... this one.
(comdat_can_be_unshared_p_1): New function.
(cgraph_comdat_can_be_unshared_p): Rename to ...
(comdat_can_be_unshared_p): ... this one; handle symbols in general.
(varpool_externally_visible_p): Use comdat_can_be_unshared_p.
(function_and_variable_visibility): Clear forced_by_abi as needed.
* trans-mem.c (ipa_tm_mark_forced_by_abi_node): New functoin.
(ipa_tm_create_version_alias, ipa_tm_create_version): Update.
* varasm.c (mark_decl_referenced): Remove.
* symtab.c (dump_symtab_base): Dump forced_by_abi.
* varpool.c (decide_is_variable_needed): Remove.
From-SVN: r199695
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r-- | gcc/cgraph.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 445282a..7bcff20 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -1326,6 +1326,7 @@ cgraph_remove_node (struct cgraph_node *node) /* Incremental inlining access removed nodes stored in the postorder list. */ node->symbol.force_output = false; + node->symbol.forced_by_abi = false; for (n = node->nested; n; n = n->next_nested) n->origin = NULL; node->nested = NULL; @@ -1712,6 +1713,8 @@ cgraph_node_cannot_be_local_p_1 (struct cgraph_node *node, { return !(!node->symbol.force_output && ((DECL_COMDAT (node->symbol.decl) + && !node->symbol.forced_by_abi + && !symtab_used_from_object_file_p ((symtab_node) node) && !node->symbol.same_comdat_group) || !node->symbol.externally_visible)); } @@ -1804,6 +1807,7 @@ cgraph_make_node_local_1 (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED) symtab_make_decl_local (node->symbol.decl); node->symbol.externally_visible = false; + node->symbol.forced_by_abi = false; node->local.local = true; node->symbol.unique_name = (node->symbol.resolution == LDPR_PREVAILING_DEF_IRONLY || node->symbol.resolution == LDPR_PREVAILING_DEF_IRONLY_EXP); @@ -2085,6 +2089,7 @@ cgraph_can_remove_if_no_direct_calls_and_refs_p (struct cgraph_node *node) /* Only COMDAT functions can be removed if externally visible. */ if (node->symbol.externally_visible && (!DECL_COMDAT (node->symbol.decl) + || node->symbol.forced_by_abi || symtab_used_from_object_file_p ((symtab_node) node))) return false; return true; |