aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/Wduplicate-decl-specifier.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.dg/Wduplicate-decl-specifier.c')
-rw-r--r--gcc/testsuite/gcc.dg/Wduplicate-decl-specifier.c63
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." } */