Skip static ctors/dtors in IPA ICF (PR ipa/70306)

* gcc.dg/ipa/pr70306.c: New test.
	* ipa-icf.c (sem_function::parse): Skip static
	constructors and destructors.

From-SVN: r234378
This commit is contained in:
Martin Liska 2016-03-21 20:33:33 +01:00 committed by Martin Liska
parent 9a72f5f6df
commit 2a85ddbbf1
4 changed files with 59 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2016-03-21 Martin Liska <mliska@suse.cz>
* ipa-icf.c (sem_function::parse): Skip static
constructors and destructors.
2016-03-21 Jakub Jelinek <jakub@redhat.com>
PR target/70296

View File

@ -1697,6 +1697,11 @@ sem_function::parse (cgraph_node *node, bitmap_obstack *stack)
if (lookup_attribute_by_prefix ("omp ", DECL_ATTRIBUTES (node->decl)) != NULL)
return NULL;
/* PR ipa/70306. */
if (DECL_STATIC_CONSTRUCTOR (node->decl)
|| DECL_STATIC_DESTRUCTOR (node->decl))
return NULL;
sem_function *f = new sem_function (node, 0, stack);
f->init ();

View File

@ -1,3 +1,7 @@
2016-03-21 Martin Liska <mliska@suse.cz>
* gcc.dg/ipa/pr70306.c: New test.
2016-03-21 Andre Vieira <andre.simoesdiasvieira@arm>
* gcc.target/arm/attr-align1.c: Skip if M-profile.

View File

@ -0,0 +1,45 @@
/* { dg-options "-O2 -fdump-ipa-icf" } */
/* { dg-do run } */
int ctor_counter = 1;
int dtor_counter;
__attribute__((constructor))
void A()
{
ctor_counter++;
}
__attribute__((destructor))
void B()
{
if (dtor_counter == 0)
__builtin_abort ();
dtor_counter--;
}
__attribute__((constructor))
static void C() {
ctor_counter++;
}
__attribute__((destructor))
static void D() {
if (dtor_counter == 0)
__builtin_abort ();
dtor_counter--;
}
int main()
{
if (ctor_counter != 3)
__builtin_abort ();
dtor_counter = 2;
return 0;
}
/* { dg-final { scan-ipa-dump "Equal symbols: 0" "icf" } } */