aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.dg/declspec-8.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/declspec-8.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/declspec-8.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/declspec-8.c b/gcc-4.9/gcc/testsuite/gcc.dg/declspec-8.c
new file mode 100644
index 000000000..e1061e85b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/declspec-8.c
@@ -0,0 +1,32 @@
+/* Test declaration specifiers. Test checks on storage class
+ specifiers and function specifiers in empty declarations. */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+/* The constraints on storage class specifiers and function specifiers
+ must be met for empty declarations where they are useless. Thus
+ there may be only one storage class specifier (C90 6.5.1, C99
+ 6.7.1#2) and "inline" must not be used because the declaration is
+ not that of an identifier for a function (C99 6.7.4#1), and
+ "register" and "auto" must not be used at file scope (C90 6.7, C99
+ 6.9#2). */
+
+static static struct s; /* { dg-error "duplicate 'static'" } */
+/* { dg-warning "useless storage class specifier in empty declaration" "static static" { target *-*-* } 15 } */
+
+static extern struct t; /* { dg-error "multiple storage classes in declaration specifiers" } */
+/* { dg-warning "useless storage class specifier in empty declaration" "static extern" { target *-*-* } 18 } */
+
+inline union u; /* { dg-error "'inline' in empty declaration" } */
+
+auto struct v; /* { dg-error "'auto' in file-scope empty declaration" } */
+
+register struct w; /* { dg-error "'register' in file-scope empty declaration" } */
+
+void
+f (void)
+{
+ auto union p; /* { dg-warning "useless storage class specifier in empty declaration" } */
+ register struct q; /* { dg-warning "useless storage class specifier in empty declaration" } */
+}