diff options
author | Nathan Sidwell <nathan@acm.org> | 2015-12-17 21:29:30 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2015-12-17 21:29:30 +0000 |
commit | aa3987819a5ab392bcb125efe84008e75f99bbfc (patch) | |
tree | 0d91f65213de20171768f41f75671dd6d5107467 /gcc/ipa-icf.c | |
parent | 94c40e19af4ca5fe57c990df7f7abec48f5aa3af (diff) | |
download | gcc-aa3987819a5ab392bcb125efe84008e75f99bbfc.zip gcc-aa3987819a5ab392bcb125efe84008e75f99bbfc.tar.gz gcc-aa3987819a5ab392bcb125efe84008e75f99bbfc.tar.bz2 |
ipa-icf.c (sem_item_optimizer::merge): Don't pick 'main' as the source function.
gcc/
* ipa-icf.c (sem_item_optimizer::merge): Don't pick 'main' as the
source function.
gcc/testsuite/
* gcc.dg/ipa/ipa-icf-merge-1.c: New.
From-SVN: r231787
Diffstat (limited to 'gcc/ipa-icf.c')
-rw-r--r-- | gcc/ipa-icf.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index 889a07d..4538677 100644 --- a/gcc/ipa-icf.c +++ b/gcc/ipa-icf.c @@ -3398,14 +3398,20 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count) if (c->members.length () == 1) continue; - gcc_assert (c->members.length ()); - sem_item *source = c->members[0]; - for (unsigned int j = 1; j < c->members.length (); j++) + if (MAIN_NAME_P (DECL_NAME (source->decl))) + /* If merge via wrappers, picking main as the target can be + problematic. */ + source = c->members[1]; + + for (unsigned int j = 0; j < c->members.length (); j++) { sem_item *alias = c->members[j]; + if (alias == source) + continue; + if (dump_file) { fprintf (dump_file, "Semantic equality hit:%s->%s\n", |