Skip to content

[Clang] [Tests] Add some more tests around non-local/non-variable declarations in C for loops #131199

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 14, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions clang/test/Sema/for.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,19 @@
void b1 (void) { for (void (*f) (void);;); }
void b2 (void) { for (void f (void);;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}
c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */
void b3 (void) { for (static int f;;); } /* c11-warning {{declaration of non-local variable in 'for' loop is a C23 extension}}
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */
void b3 (void) { for (static int f;f;); } /* c11-warning {{declaration of non-local variable in 'for' loop is a C23 extension}}
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */

void b4 (void) { for (typedef int f;;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}
c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */
void b5 (void) { for (struct { int i; } s;;); }
void b6 (void) { for (enum { zero, ten = 10 } i;;); }
void b5 (void) { for (struct { int i; } s;s.i;); }
void b6 (void) { for (enum { zero, ten = 10 } i = ten;i;); }
void b7 (void) { for (struct s { int i; };;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}
c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */
void b8 (void) { for (static struct { int i; } s;;); } /* c11-warning {{declaration of non-local variable in 'for' loop is a C23 extension}}
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */
void b9 (void) { for (struct { int i; } (*s)(struct { int j; } o) = 0;;); }
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}}
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */
void b9 (void) { for (struct { int i; } (*s)(struct { int j; } o) = 0;s;); }
void b10(void) { for (typedef struct { int i; } (*s)(struct { int j; });;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}
c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */
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}}
c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */