summaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/gcc.dg/c11-fordecl-1.c27
-rw-r--r--gcc/testsuite/gcc.dg/c11-fordecl-2.c14
-rw-r--r--gcc/testsuite/gcc.dg/c11-fordecl-3.c6
-rw-r--r--gcc/testsuite/gcc.dg/c11-fordecl-4.c6
-rw-r--r--gcc/testsuite/gcc.dg/c2x-fordecl-1.c6
-rw-r--r--gcc/testsuite/gcc.dg/c2x-fordecl-2.c6
-rw-r--r--gcc/testsuite/gcc.dg/c2x-fordecl-3.c27
-rw-r--r--gcc/testsuite/gcc.dg/c2x-fordecl-4.c14
-rw-r--r--gcc/testsuite/gcc.dg/c99-fordecl-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr67784-2.c10
-rw-r--r--gcc/testsuite/gcc.dg/pr68320.c14
-rw-r--r--gcc/testsuite/objc.dg/foreach-7.m2
12 files changed, 121 insertions, 13 deletions
diff --git a/gcc/testsuite/gcc.dg/c11-fordecl-1.c b/gcc/testsuite/gcc.dg/c11-fordecl-1.c
new file mode 100644
index 00000000000..4aceb335e18
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/c11-fordecl-1.c
@@ -0,0 +1,27 @@
+/* Test for C99 declarations in for loops. Test constraints are diagnosed for
+ C11. Based on c99-fordecl-2.c. */
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic-errors" } */
+
+void
+foo (void)
+{
+ int j = 0;
+ for (int i = 1, bar (void); i <= 10; i++) /* { dg-error "bar" } */
+ j += i;
+
+ for (static int i = 1; i <= 10; i++) /* /* { dg-error "static" } */
+ j += i;
+
+ for (extern int i; j <= 500; j++) /* { dg-error "extern" } */
+ j += 5;
+
+ for (enum { FOO } i = FOO; i < 10; i++) /* { dg-error "FOO" } */
+ j += i;
+
+ for (enum BAR { FOO } i = FOO; i < 10; i++) /* { dg-error "FOO" } */
+ /* { dg-error "BAR" "enum tag in for loop" { target *-*-* } .-1 } */
+ j += i;
+ for (typedef int T;;) /* { dg-error "non-variable" } */
+ ;
+}
diff --git a/gcc/testsuite/gcc.dg/c11-fordecl-2.c b/gcc/testsuite/gcc.dg/c11-fordecl-2.c
new file mode 100644
index 00000000000..0be1a0d13fa
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/c11-fordecl-2.c
@@ -0,0 +1,14 @@
+/* Test for C99 declarations in for loops. Test constraints are diagnosed for
+ C11: struct and union tags can't be declared there (affirmed in response to
+ DR#277). Based on c99-fordecl-3.c. */
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic-errors" } */
+
+void
+foo (void)
+{
+ for (struct s { int p; } *p = 0; ;) /* { dg-error "'struct s' declared in 'for' loop initial declaration" } */
+ ;
+ for (union u { int p; } *p = 0; ;) /* { dg-error "'union u' declared in 'for' loop initial declaration" } */
+ ;
+}
diff --git a/gcc/testsuite/gcc.dg/c11-fordecl-3.c b/gcc/testsuite/gcc.dg/c11-fordecl-3.c
new file mode 100644
index 00000000000..28ef6294c20
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/c11-fordecl-3.c
@@ -0,0 +1,6 @@
+/* Test restrictions on the kind of declarations permitted in for loops removed
+ in C2X, and thus with -std=c11 -pedantic -Wno-c11-c2x-compat. */
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic -Wno-c11-c2x-compat" } */
+
+#include "c99-fordecl-2.c"
diff --git a/gcc/testsuite/gcc.dg/c11-fordecl-4.c b/gcc/testsuite/gcc.dg/c11-fordecl-4.c
new file mode 100644
index 00000000000..2a352d64963
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/c11-fordecl-4.c
@@ -0,0 +1,6 @@
+/* Test restrictions on the kind of declarations permitted in for loops removed
+ in C2X, and thus with -std=c11 -pedantic -Wno-c11-c2x-compat. */
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic -Wno-c11-c2x-compat" } */
+
+#include "c99-fordecl-3.c"
diff --git a/gcc/testsuite/gcc.dg/c2x-fordecl-1.c b/gcc/testsuite/gcc.dg/c2x-fordecl-1.c
new file mode 100644
index 00000000000..563186f060b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/c2x-fordecl-1.c
@@ -0,0 +1,6 @@
+/* Test restrictions on the kind of declarations permitted in for loops removed
+ in C2X. */
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -pedantic-errors" } */
+
+#include "c99-fordecl-2.c"
diff --git a/gcc/testsuite/gcc.dg/c2x-fordecl-2.c b/gcc/testsuite/gcc.dg/c2x-fordecl-2.c
new file mode 100644
index 00000000000..42501901c3d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/c2x-fordecl-2.c
@@ -0,0 +1,6 @@
+/* Test restrictions on the kind of declarations permitted in for loops removed
+ in C2X. */
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -pedantic-errors" } */
+
+#include "c99-fordecl-3.c"
diff --git a/gcc/testsuite/gcc.dg/c2x-fordecl-3.c b/gcc/testsuite/gcc.dg/c2x-fordecl-3.c
new file mode 100644
index 00000000000..d39d4a6a4d7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/c2x-fordecl-3.c
@@ -0,0 +1,27 @@
+/* Test for C99 declarations in for loops. Test constraints are diagnosed with
+ -Wc11-c2x-compat for C2X. Based on c99-fordecl-2.c. */
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -pedantic-errors -Wc11-c2x-compat" } */
+
+void
+foo (void)
+{
+ int j = 0;
+ for (int i = 1, bar (void); i <= 10; i++) /* { dg-warning "bar" } */
+ j += i;
+
+ for (static int i = 1; i <= 10; i++) /* /* { dg-warning "static" } */
+ j += i;
+
+ for (extern int i; j <= 500; j++) /* { dg-warning "extern" } */
+ j += 5;
+
+ for (enum { FOO } i = FOO; i < 10; i++) /* { dg-warning "FOO" } */
+ j += i;
+
+ for (enum BAR { FOO } i = FOO; i < 10; i++) /* { dg-warning "FOO" } */
+ /* { dg-warning "BAR" "enum tag in for loop" { target *-*-* } .-1 } */
+ j += i;
+ for (typedef int T;;) /* { dg-warning "non-variable" } */
+ ;
+}
diff --git a/gcc/testsuite/gcc.dg/c2x-fordecl-4.c b/gcc/testsuite/gcc.dg/c2x-fordecl-4.c
new file mode 100644
index 00000000000..e9dfc4b51fa
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/c2x-fordecl-4.c
@@ -0,0 +1,14 @@
+/* Test for C99 declarations in for loops. Test constraints are diagnosed with
+ -Wc11-c2x-compat for C2X: struct and union tags can't be declared there
+ (affirmed in response to DR#277). Based on c99-fordecl-3.c. */
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -pedantic-errors -Wc11-c2x-compat" } */
+
+void
+foo (void)
+{
+ for (struct s { int p; } *p = 0; ;) /* { dg-warning "'struct s' declared in 'for' loop initial declaration" } */
+ ;
+ for (union u { int p; } *p = 0; ;) /* { dg-warning "'union u' declared in 'for' loop initial declaration" } */
+ ;
+}
diff --git a/gcc/testsuite/gcc.dg/c99-fordecl-2.c b/gcc/testsuite/gcc.dg/c99-fordecl-2.c
index aa5bc783ff8..a8d5b124fb6 100644
--- a/gcc/testsuite/gcc.dg/c99-fordecl-2.c
+++ b/gcc/testsuite/gcc.dg/c99-fordecl-2.c
@@ -29,4 +29,6 @@ foo (void)
/* { dg-error "FOO" "enum value in for loop" { target *-*-* } .-1 } */
/* { dg-error "BAR" "enum tag in for loop" { target *-*-* } .-2 } */
j += i;
+ for (typedef int T;;) /* { dg-error "non-variable" } */
+ ;
}
diff --git a/gcc/testsuite/gcc.dg/pr67784-2.c b/gcc/testsuite/gcc.dg/pr67784-2.c
index de3b1c89a89..07af9cbcb82 100644
--- a/gcc/testsuite/gcc.dg/pr67784-2.c
+++ b/gcc/testsuite/gcc.dg/pr67784-2.c
@@ -7,7 +7,7 @@ int T;
void
fn1 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
;
T *x; /* { dg-error "undeclared" } */
@@ -16,7 +16,7 @@ fn1 (void)
void
fn2 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
T = 1; /* { dg-error "expected expression" } */
T *x; /* { dg-error "undeclared" } */
@@ -25,7 +25,7 @@ fn2 (void)
void
fn3 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
{
}
@@ -35,7 +35,7 @@ fn3 (void)
void
fn4 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
L:
;
@@ -45,7 +45,7 @@ L:
void
fn5 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
;
else
diff --git a/gcc/testsuite/gcc.dg/pr68320.c b/gcc/testsuite/gcc.dg/pr68320.c
index 7060af8993e..5d891b9bb1e 100644
--- a/gcc/testsuite/gcc.dg/pr68320.c
+++ b/gcc/testsuite/gcc.dg/pr68320.c
@@ -5,7 +5,7 @@
void
fn1 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
;
T x; /* { dg-error "unknown type name" } */
@@ -14,7 +14,7 @@ fn1 (void)
void
fn2 (int i)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
i = 5;
T x; /* { dg-error "unknown type name" } */
@@ -23,7 +23,7 @@ fn2 (int i)
void
fn3 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
{
}
@@ -33,7 +33,7 @@ fn3 (void)
void
fn4 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
;
T, T; /* { dg-error "undeclared" } */
@@ -42,7 +42,7 @@ fn4 (void)
void
fn5 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
;
T = 10; /* { dg-error "undeclared" } */
@@ -51,7 +51,7 @@ fn5 (void)
void
fn6 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
;
T[0]; /* { dg-error "undeclared" } */
@@ -60,7 +60,7 @@ fn6 (void)
void
fn7 (void)
{
- for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
+ for (typedef int T;;)
if (1)
;
T (); /* { dg-warning "implicit declaration" } */
diff --git a/gcc/testsuite/objc.dg/foreach-7.m b/gcc/testsuite/objc.dg/foreach-7.m
index 7ceff075016..c8e817f258c 100644
--- a/gcc/testsuite/objc.dg/foreach-7.m
+++ b/gcc/testsuite/objc.dg/foreach-7.m
@@ -39,7 +39,7 @@ int main (void)
id array = nil;
id object = nil;
- for (typedef int my_typedef in array) /* { dg-error "declaration of non-variable" } */
+ for (typedef int my_typedef in array)
; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } .-1 } */
for (function () in nil) /* { dg-error "invalid iterating variable in fast enumeration" } */