/* This is like diagnostic-pragma-2.c, but handles the case where everything is wrapped inside a macro, which previously caused additional issues tracked in PR preprocessor/82335. */ /* { dg-do compile } */ /* { dg-additional-options "-save-temps -Wattributes -Wtype-limits" } */ #define B _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wattributes\"") #define E _Pragma("GCC diagnostic pop") #define X() B int __attribute((unknown_attr)) x; E #define Y B int __attribute((unknown_attr)) y; E #define WRAP(x) x void test1(void) { WRAP(X()) WRAP(Y) } /* Additional test provided on the PR. */ #define PRAGMA(...) _Pragma(#__VA_ARGS__) #define PUSH_IGN(X) PRAGMA(GCC diagnostic push) PRAGMA(GCC diagnostic ignored X) #define POP() PRAGMA(GCC diagnostic pop) #define TEST(X, Y) \ PUSH_IGN("-Wtype-limits") \ int Y = (__typeof(X))-1 < 0; \ POP() int test2() { unsigned x; TEST(x, i1); WRAP(TEST(x, i2)) return i1 + i2; }