/* Test for _Thread_local in C11. Test of invalid code. */ /* { dg-do compile } */ /* { dg-options "-std=c11 -pedantic-errors" } */ _Thread_local void f (void); /* { dg-error "storage class" } */ _Thread_local void g (void) {} /* { dg-error "_Thread_local" } */ typedef _Thread_local int t1; /* { dg-error "_Thread_local" } */ _Thread_local typedef int t2; /* { dg-error "_Thread_local" } */ void h (void) { _Thread_local auto int a; /* { dg-error "_Thread_local" } */ _Thread_local register int b; /* { dg-error "_Thread_local" } */ auto _Thread_local int c; /* { dg-error "_Thread_local" } */ register _Thread_local int d; /* { dg-error "_Thread_local" } */ _Thread_local int e; /* { dg-error "_Thread_local" } */ } _Thread_local int v; /* { dg-message "previous" } */ extern int v; /* { dg-error "thread" } */ int w; /* { dg-message "previous" } */ extern _Thread_local int w; /* { dg-error "thread" } */ _Thread_local int x; /* { dg-message "previous" } */ int y; /* { dg-message "previous" } */ int vv; void i (void) { extern int x; /* { dg-error "thread" } */ extern _Thread_local int y; /* { dg-error "thread" } */ static _Thread_local int a[vv]; /* { dg-error "storage size" } */ static _Thread_local int vi = vv; /* { dg-error "not constant" } */ } static _Thread_local int sv; inline void j (void) { static _Thread_local int vj; /* { dg-error "static but declared" } */ (void) sv; /* { dg-error "static but used in inline" } */ }