diff options
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/gcc.dg/c11-fordecl-1.c | 27 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c11-fordecl-2.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c11-fordecl-3.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c11-fordecl-4.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c2x-fordecl-1.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c2x-fordecl-2.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c2x-fordecl-3.c | 27 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c2x-fordecl-4.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c99-fordecl-2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr67784-2.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr68320.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/objc.dg/foreach-7.m | 2 |
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" } */ |