diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/Wduplicate-decl-specifier.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/Wduplicate-decl-specifier.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/Wduplicate-decl-specifier.c b/gcc/testsuite/gcc.dg/Wduplicate-decl-specifier.c new file mode 100644 index 0000000..d7a3919 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wduplicate-decl-specifier.c @@ -0,0 +1,63 @@ +/* PR43651 */ +/* { dg-do compile } */ +/* { dg-options "-Wduplicate-decl-specifier" } */ + +typedef const int CT1; +#define CT2 const int +typedef volatile int VT1; +#define VT2 volatile int +typedef char *restrict RT1; +#define RT2 char *restrict + +void +foo (void) +{ + const CT1 x1; + const CT2 x2; + CT1 const x3; + CT2 const x4; + const int const x5; /* { dg-warning "duplicate .const." } */ + const int *const x6; + volatile VT1 y1; + volatile VT2 y2; + VT1 volatile y3; + VT2 volatile y4; + volatile int volatile y5; /* { dg-warning "duplicate .volatile." } */ + volatile int *volatile y6; + RT1 restrict r1; + RT2 restrict r2; + restrict RT1 r3; + /* "restrict RT2" is invalid */ + char *restrict restrict r4; /* { dg-warning "duplicate .restrict." } */ + char *restrict *restrict r5; +} + +void c1(const CT1 t) { } +void c2(const CT2 t) { } +void c3(CT1 const t) { } +void c4(CT2 const t) { } +void c5(const int const t) { } /* { dg-warning "duplicate .const." } */ +void v1(volatile VT1 t) { } +void v2(volatile VT2 t) { } +void v3(VT1 volatile t) { } +void v4(VT2 volatile t) { } +void v5(volatile int volatile t) { } /* { dg-warning "duplicate .volatile." } */ +void r1(restrict RT1 t) { } +void r2(RT1 restrict t) { } +void r3(RT2 restrict t) { } +void r4(char *restrict restrict t) { } /* { dg-warning "duplicate .restrict." } */ + +typedef const CT1 CCT1; +typedef const CT2 CCT2; +typedef CT1 const CT1C; +typedef CT2 const CT2C; +typedef const int const CIC; /* { dg-warning "duplicate .const." } */ +typedef volatile VT1 VVT1; +typedef volatile VT2 VVT2; +typedef VT1 volatile VT1V; +typedef VT2 volatile VT2V; +typedef volatile int volatile VIV; /* { dg-warning "duplicate .volatile." } */ +typedef RT1 restrict RT1R; +typedef RT2 restrict RT2R; +typedef restrict RT1 RRT1; +typedef int *restrict restrict IRR; /* { dg-warning "duplicate .restrict." } */ |