Thanks Eric for fixing this! Sorry this slipped my notice... WG21 has been busy.
On Tue, Apr 16, 2013 at 5:48 PM, David Blaikie <[email protected]> wrote: > On Mon, Apr 15, 2013 at 11:29 AM, David Dean <[email protected]> wrote: > > Richard, > > Can you XFAIL SemaCXX/cxx11-thread-local.cpp on darwin10? It's > passing on darwin11, but not darwin10. My understanding is that this is > expected. > > Still seeing this > http://lab.llvm.org:8011/builders/clang-x86_64-darwin10-gdb > > > > > On 15 Apr 2013, at 1:33 AM, Richard Smith <[email protected]> > wrote: > > > >> Author: rsmith > >> Date: Mon Apr 15 03:33:22 2013 > >> New Revision: 179517 > >> > >> URL: http://llvm.org/viewvc/llvm-project?rev=179517&view=rev > >> Log: > >> Local thread_local variables are implicitly 'static'. (This doesn't > apply to _Thread_local nor __thread.) > >> > >> Added: > >> cfe/trunk/test/SemaCXX/cxx11-thread-local.cpp > >> Modified: > >> cfe/trunk/lib/Sema/SemaDecl.cpp > >> cfe/trunk/test/Sema/thread-specifier.c > >> > >> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp > >> URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=179517&r1=179516&r2=179517&view=diff > >> > ============================================================================== > >> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) > >> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Apr 15 03:33:22 2013 > >> @@ -4687,8 +4687,7 @@ Sema::ActOnVariableDeclarator(Scope *S, > >> "Parser allowed 'typedef' as storage class VarDecl."); > >> VarDecl::StorageClass SC = > StorageClassSpecToVarDeclStorageClass(SCSpec); > >> > >> - if (getLangOpts().OpenCL && !getOpenCLOptions().cl_khr_fp16) > >> - { > >> + if (getLangOpts().OpenCL && !getOpenCLOptions().cl_khr_fp16) { > >> // OpenCL v1.2 s6.1.1.1: reject declaring variables of the half and > >> // half array type (unless the cl_khr_fp16 extension is enabled). > >> if (Context.getBaseElementType(R)->isHalfType()) { > >> @@ -4705,6 +4704,16 @@ Sema::ActOnVariableDeclarator(Scope *S, > >> SC = SC_None; > >> } > >> > >> + // C++11 [dcl.stc]p4: > >> + // When thread_local is applied to a variable of block scope the > >> + // storage-class-specifier static is implied if it does not appear > >> + // explicitly. > >> + // Core issue: 'static' is not implied if the variable is declared > 'extern'. > >> + if (SCSpec == DeclSpec::SCS_unspecified && > >> + D.getDeclSpec().getThreadStorageClassSpec() == > >> + DeclSpec::TSCS_thread_local && DC->isFunctionOrMethod()) > >> + SC = SC_Static; > >> + > >> IdentifierInfo *II = Name.getAsIdentifierInfo(); > >> if (!II) { > >> Diag(D.getIdentifierLoc(), diag::err_bad_variable_name) > >> > >> Modified: cfe/trunk/test/Sema/thread-specifier.c > >> URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/thread-specifier.c?rev=179517&r1=179516&r2=179517&view=diff > >> > ============================================================================== > >> --- cfe/trunk/test/Sema/thread-specifier.c (original) > >> +++ cfe/trunk/test/Sema/thread-specifier.c Mon Apr 15 03:33:22 2013 > >> @@ -42,8 +42,6 @@ int f(__thread int t7) { // expected-err > >> // expected-error@-2 {{'__thread' variables must have global > storage}} > >> #elif defined(C11) > >> // expected-error@-4 {{'_Thread_local' variables must have global > storage}} > >> -#else > >> - // expected-error@-6 {{'thread_local' variables must have global > storage}} > >> #endif > >> extern __thread int t9; > >> static __thread int t10; > >> @@ -51,9 +49,9 @@ int f(__thread int t7) { // expected-err > >> #if __cplusplus < 201103L > >> __thread auto int t12a; // expected-error-re {{cannot combine with > previous '(__thread|_Thread_local)' declaration specifier}} > >> auto __thread int t12b; // expected-error {{cannot combine with > previous 'auto' declaration specifier}} > >> -#else > >> - __thread auto t12a = 0; // expected-error-re {{'(t|_T)hread_local' > variables must have global storage}} > >> - auto __thread t12b = 0; // expected-error-re {{'(t|_T)hread_local' > variables must have global storage}} > >> +#elif !defined(CXX11) > >> + __thread auto t12a = 0; // expected-error-re {{'_Thread_local' > variables must have global storage}} > >> + auto __thread t12b = 0; // expected-error-re {{'_Thread_local' > variables must have global storage}} > >> #endif > >> __thread register int t13a; // expected-error-re {{cannot combine > with previous '(__thread|_Thread_local|thread_local)' declaration > specifier}} > >> register __thread int t13b; // expected-error {{cannot combine with > previous 'register' declaration specifier}} > >> > >> Added: cfe/trunk/test/SemaCXX/cxx11-thread-local.cpp > >> URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx11-thread-local.cpp?rev=179517&view=auto > >> > ============================================================================== > >> --- cfe/trunk/test/SemaCXX/cxx11-thread-local.cpp (added) > >> +++ cfe/trunk/test/SemaCXX/cxx11-thread-local.cpp Mon Apr 15 03:33:22 > 2013 > >> @@ -0,0 +1,23 @@ > >> +// RUN: %clang_cc1 -std=c++11 -verify %s > >> + > >> +struct S { > >> + static thread_local int a; > >> + static int b; // expected-note {{here}} > >> + thread_local int c; // expected-error {{'thread_local' is only > allowed on variable declarations}} > >> + static thread_local int d; // expected-note {{here}} > >> +}; > >> + > >> +thread_local int S::a; > >> +thread_local int S::b; // expected-error {{thread-local declaration of > 'b' follows non-thread-local declaration}} > >> +thread_local int S::c; // expected-error {{non-static data member > defined out-of-line}} > >> +int S::d; // expected-error {{non-thread-local declaration of 'd' > follows thread-local declaration}} > >> + > >> +thread_local int x[3]; > >> +thread_local int y[3]; > >> +thread_local int z[3]; // expected-note {{previous}} > >> + > >> +void f() { > >> + thread_local int x; > >> + static thread_local int y; > >> + extern thread_local int z; // expected-error {{redefinition of 'z' > with a different type}} > >> +} > >> > >> > >> _______________________________________________ > >> cfe-commits mailing list > >> [email protected] > >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > > > -David > > > > > > _______________________________________________ > > cfe-commits mailing list > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
