blob: 1633da0141f67ce8d446c445625c5da58c8f38f9 [file] [log] [blame]
/* { dg-do run { target init_priority } } */
/* { dg-require-effective-target lto } */
/* { dg-options "-flto -O3" } */
extern void abort ();
int i;
int j;
void c1() __attribute__((constructor (500)));
void c2() __attribute__((constructor (700)));
void c3() __attribute__((constructor (600)));
void c1() {
if (i++ != 0)
abort ();
}
void c2() {
if (i++ != 2)
abort ();
}
void c3() {
if (i++ != 1)
abort ();
}
void d1() __attribute__((destructor (500)));
void d2() __attribute__((destructor (700)));
void d3() __attribute__((destructor (600)));
void d1() {
if (--i != 0)
abort ();
}
void d2() {
if (--i != 2)
abort ();
}
void d3() {
if (j != 2)
abort ();
if (--i != 1)
abort ();
}
void cd4() __attribute__((constructor (800), destructor (800)));
void cd4() {
if (i != 3)
abort ();
++j;
}
int main () {
if (i != 3)
return 1;
if (j != 1)
abort ();
return 0;
}