void func() const { non_const(&y); }
// PR13720 __thread int thread_int; int *thread_int_ptr = &thread_int; #ifndef __cplusplus // expected-error@-2 {{initializer element is not a compile-time constant}} #endif void g() { int *p = &thread_int; // This is perfectly fine, though. } #if __cplusplus >= 201103L constexpr int *thread_int_ptr_2 = &thread_int; // expected-error {{must be initialized by a constant expression}} #endif int non_const(); __thread int non_const_init = non_const(); #if !defined(__cplusplus) // expected-error@-2 {{initializer element is not a compile-time constant}} #elif !defined(CXX11) // expected-error@-4 {{initializer for thread-local variable must be a constant expression}} #if __cplusplus >= 201103L // expected-note@-6 {{use 'thread_local' to allow this}} #endif #endif #ifdef __cplusplus struct S { ~S(); }; __thread S s; #if !defined(CXX11)