31 lines · c
1// RUN: %clang_cc1 -fsyntax-only -verify=c11 -std=c11 -pedantic %s2// RUN: %clang_cc1 -fsyntax-only -verify=c23 -std=c23 -Wpre-c23-compat %s3 4// Check C99 6.8.5p35void b1 (void) { for (void (*f) (void);;); }6void b2 (void) { for (void f (void);;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}7 c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */8void 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}} */10 11void b4 (void) { for (typedef int f;;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}12 c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */13void b5 (void) { for (struct { int i; } s;s.i;); }14void b6 (void) { for (enum { zero, ten = 10 } i = ten;i;); }15void b7 (void) { for (struct s { int i; };;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}16 c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */17void 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}} */19void b9 (void) { for (struct { int i; } (*s)(struct { int j; } o) = 0;s;); }20void b10(void) { for (typedef struct { int i; } (*s)(struct { int j; });;); } /* c11-warning {{non-variable declaration in 'for' loop is a C23 extension}}21 c23-warning {{non-variable declaration in 'for' loop is incompatible with C standards before C23}} */22 23#if __has_feature(c_thread_local)24void 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}}25 c23-warning {{declaration of non-local variable in 'for' loop is incompatible with C standards before C23}} */26#endif27 28void b12(void) {29 for(_Static_assert(1, "");;) {} /* okay, _Static_assert declares *no* identifiers */30}31