/* { dg-do run } */ | |
/* { dg-options "-O2" } */ | |
/* { dg-skip-if "" { ! global_constructor } } */ | |
/* The ipa-split pass pulls the body of the if(!x) block | |
into a separate function to make foo a better inlining | |
candidate. Make sure this new function isn't also run | |
as a static constructor. */ | |
#include <stdlib.h> | |
int x, y; | |
void __attribute__((noinline)) | |
bar(void) | |
{ | |
y++; | |
} | |
void __attribute__((constructor)) | |
foo(void) | |
{ | |
if (!x) | |
{ | |
bar(); | |
y++; | |
} | |
} | |
int main() | |
{ | |
x = 1; | |
foo(); | |
foo(); | |
if (y != 2) | |
abort(); | |
exit(0); | |
} |