Skip to content

Commit 20b7f59

Browse files
authored
[Clang] [Tests] Add some more tests around non-local/non-variable declarations in C for loops (#131199)
As requested by @shafik in #129737 (comment). I also added a test for `thread_local` because why not.
1 parent c979ce7 commit 20b7f59

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

clang/test/Sema/for.c

+9-7
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@
55
void b1 (void) { for (void (*f) (void);;); }
66
void b2 (void) { for (void f (void);;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}
77
c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */
8-
void b3 (void) { for (static int f;;); } /* c11-warning {{declaration of non-local variable in 'for' loop is a C23 extension}}
9-
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */
8+
void b3 (void) { for (static int f;f;); } /* c11-warning {{declaration of non-local variable in 'for' loop is a C23 extension}}
9+
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */
1010

1111
void b4 (void) { for (typedef int f;;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}
1212
c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */
13-
void b5 (void) { for (struct { int i; } s;;); }
14-
void b6 (void) { for (enum { zero, ten = 10 } i;;); }
13+
void b5 (void) { for (struct { int i; } s;s.i;); }
14+
void b6 (void) { for (enum { zero, ten = 10 } i = ten;i;); }
1515
void b7 (void) { for (struct s { int i; };;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}
1616
c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */
17-
void b8 (void) { for (static struct { int i; } s;;); } /* c11-warning {{declaration of non-local variable in 'for' loop is a C23 extension}}
18-
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */
19-
void b9 (void) { for (struct { int i; } (*s)(struct { int j; } o) = 0;;); }
17+
void b8 (void) { for (static struct { int i; } s;s.i;); } /* c11-warning {{declaration of non-local variable in 'for' loop is a C23 extension}}
18+
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */
19+
void b9 (void) { for (struct { int i; } (*s)(struct { int j; } o) = 0;s;); }
2020
void b10(void) { for (typedef struct { int i; } (*s)(struct { int j; });;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}
2121
c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */
22+
void b11 (void) { for (static _Thread_local struct { int i; } s;s.i;); } /* c11-warning {{declaration of non-local variable in 'for' loop is a C23 extension}}
23+
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */

0 commit comments

Comments
 (0)