Files
clang-p2996/clang/test/Sema/for.c
Aaron Ballman 2d2498ec6c No longer reject tag declarations in the clause-1 of a for loop.
We currently reject this valid C construct by claiming it declares a
non-local variable: for (struct { int i; } s={0}; s.i != 0; s.i--) ;

We expected all declaration in the clause-1 declaration statement to be
a local VarDecl, but there can be other declarations involved such as a
tag declaration. This fixes PR35757.
2020-12-18 07:56:17 -05:00

14 lines
958 B
C

// RUN: %clang_cc1 -fsyntax-only -verify %s
// Check C99 6.8.5p3
void b1 (void) { for (void (*f) (void);;); }
void b2 (void) { for (void f (void);;); } // expected-error {{non-variable declaration in 'for' loop}}
void b3 (void) { for (static int f;;); } // expected-error {{declaration of non-local variable}}
void b4 (void) { for (typedef int f;;); } // expected-error {{non-variable declaration in 'for' loop}}
void b5 (void) { for (struct { int i; } s;;); }
void b6 (void) { for (enum { zero, ten = 10 } i;;); }
void b7 (void) { for (struct s { int i; };;); } // expected-error {{non-variable declaration in 'for' loop}}
void b8 (void) { for (static struct { int i; } s;;); } // expected-error {{declaration of non-local variable}}
void b9 (void) { for (struct { int i; } (*s)(struct { int j; } o) = 0;;); }
void b10(void) { for (typedef struct { int i; } (*s)(struct { int j; });;); } // expected-error {{non-variable declaration in 'for' loop}}