mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-05 04:29:55 +08:00
libcpp: testsuite: Add test for fixed _Pragma bug [PR82335]
This PR was fixed by r12-4797 and r12-5454. Add test coverage from the PR that is not represented elsewhere. gcc/testsuite/ChangeLog: PR preprocessor/82335 * c-c++-common/cpp/diagnostic-pragma-3.c: New test.
This commit is contained in:
parent
217a0fcb85
commit
202a214d68
37
gcc/testsuite/c-c++-common/cpp/diagnostic-pragma-3.c
Normal file
37
gcc/testsuite/c-c++-common/cpp/diagnostic-pragma-3.c
Normal file
@ -0,0 +1,37 @@
|
||||
/* 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user