diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/initpri2.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/initpri2.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/initpri2.c b/gcc/testsuite/gcc.dg/initpri2.c new file mode 100644 index 000000000..fa9fda0d7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/initpri2.c @@ -0,0 +1,39 @@ +/* { dg-do compile { target init_priority } } */ + +/* Priorities must be in the range [0, 65535]. */ +void c1() + __attribute__((constructor (-1))); /* { dg-error "priorities" } */ +void c2() + __attribute__((constructor (65536))); /* { dg-error "priorities" } */ +void d1() + __attribute__((destructor (-1))); /* { dg-error "priorities" } */ +void d2() + __attribute__((destructor (65536))); /* { dg-error "priorities" } */ + +/* Priorities 0-100 are reserved for system libraries. */ +void c3() + __attribute__((constructor (50))); /* { dg-warning "reserved" } */ +void d3() + __attribute__((constructor (50))); /* { dg-warning "reserved" } */ + +/* Priorities must be integral constants. */ + +/* Pointers, even with constant values, are not allowed. */ +void c4() + __attribute__((constructor ((void*) 500))); /* { dg-error "priorities" } */ +void d4() + __attribute__((destructor ((void*) 500))); /* { dg-error "priorities" } */ + +/* Integer variables are not allowed. */ +int i; +void c5() + __attribute__((constructor ((i)))); /* { dg-error "priorities" } */ +void d5() + __attribute__((destructor ((i)))); /* { dg-error "priorities" } */ + +/* Enumeration constants are allowed. */ +enum E { e = 500 }; +void c6() + __attribute__((constructor ((e)))); +void d6() + __attribute__((destructor ((e)))); |