mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-09 20:31:36 +08:00
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:
parent
9a72f5f6df
commit
2a85ddbbf1
@ -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
|
||||
|
@ -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 ();
|
||||
|
@ -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.
|
||||
|
45
gcc/testsuite/gcc.dg/ipa/pr70306.c
Normal file
45
gcc/testsuite/gcc.dg/ipa/pr70306.c
Normal 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" } } */
|
Loading…
x
Reference in New Issue
Block a user