| /* Verify __builtin_has_attribute return value for attributes constructor |
| and destructor with explicit priorities. |
| { dg-do compile { target init_priority } } |
| { dg-options "-Wall -ftrack-macro-expansion=0" } |
| { dg-options "-Wall -Wno-narrowing -Wno-unused -ftrack-macro-expansion=0" { target c++ } } */ |
| |
| #define ATTR(...) __attribute__ ((__VA_ARGS__)) |
| |
| #define A(expect, sym, attr) \ |
| typedef int Assert [1 - 2 * !(__builtin_has_attribute (sym, attr) == expect)] |
| |
| void fnone (void); |
| |
| void test_ctor_dtor_prio (void) |
| { |
| extern ATTR (constructor) void fctor (void); |
| extern ATTR (destructor) void fdtor (void); |
| extern ATTR (constructor, destructor) void fctor_dtor (void); |
| |
| A (0, fnone, constructor); |
| A (0, fnone, constructor (123)); |
| A (0, fnone, destructor); |
| A (0, fnone, constructor (234)); |
| |
| A (1, fctor, constructor); |
| A (0, fctor, constructor (123)); |
| A (1, fdtor, destructor); |
| A (0, fdtor, destructor (234)); |
| |
| extern ATTR (constructor) void fctor_dtor (void); |
| extern ATTR (destructor) void fctor_dtor (void); |
| extern ATTR (constructor, destructor) void fctor_dtor (void); |
| |
| A (1, fctor_dtor, constructor); |
| A (1, fctor_dtor, destructor); |
| |
| extern ATTR (constructor (123)) void fctor_123 (void); |
| A (1, fctor_123, constructor); |
| A (0, fctor_123, destructor); |
| A (1, fctor_123, constructor (123)); |
| A (0, fctor_123, constructor (124)); |
| |
| extern ATTR (destructor (234)) void fctor_123 (void); |
| A (1, fctor_123, constructor (123)); |
| A (1, fctor_123, destructor); |
| A (1, fctor_123, destructor (234)); |
| A (0, fctor_123, destructor (235)); |
| } |