aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2021-11-06 23:36:08 +0100
committerJan Hubicka <hubicka@ucw.cz>2021-11-06 23:36:08 +0100
commit6078eb7452aa89cb9aeecac30932b58967389459 (patch)
tree8b5eb1a8f0131a2b7af6ffd5c866bd7009a1b56c /gcc/lto
parentdf2135e88a8f78c853b35246ad426b01b6d08378 (diff)
downloadgcc-6078eb7452aa89cb9aeecac30932b58967389459.zip
gcc-6078eb7452aa89cb9aeecac30932b58967389459.tar.gz
gcc-6078eb7452aa89cb9aeecac30932b58967389459.tar.bz2
Fix can_be_discarded_p wrt partitioned functions.
gcc/ChangeLog: * cgraph.h (cgraph_node::can_be_discarded_p): Do not return true on functions from other partition. gcc/lto/ChangeLog: PR ipa/103070 PR ipa/103058 * lto-partition.c (must_not_rename): Update comment. (promote_symbol): Set resolution to LDPR_PREVAILING_DEF_IRONLY.
Diffstat (limited to 'gcc/lto')
-rw-r--r--gcc/lto/lto-partition.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c
index 15761ac..bee4021 100644
--- a/gcc/lto/lto-partition.c
+++ b/gcc/lto/lto-partition.c
@@ -852,7 +852,9 @@ must_not_rename (symtab_node *node, const char *name)
/* Avoid mangling of already mangled clones.
??? should have a flag whether a symbol has a 'private' name already,
since we produce some symbols like that i.e. for global constructors
- that are not really clones. */
+ that are not really clones.
+ ??? it is what unique_name means. We only need to set it when doing
+ private symbols. */
if (node->unique_name)
{
if (dump_file)
@@ -995,6 +997,10 @@ promote_symbol (symtab_node *node)
defined by the non-LTO part. */
privatize_symbol_name (node);
TREE_PUBLIC (node->decl) = 1;
+ /* After privatization the node should not conflict with any other symbol,
+ so it is prevailing. This is important to keep binds_to_current_def_p
+ to work across partitions. */
+ node->resolution = LDPR_PREVAILING_DEF_IRONLY;
DECL_VISIBILITY (node->decl) = VISIBILITY_HIDDEN;
DECL_VISIBILITY_SPECIFIED (node->decl) = true;
if (dump_file)