From b6b127f279f89d992e0713866f17fed267147a79 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 15 Apr 2013 08:07:34 +0000 Subject: [PATCH] Properly check for a constant initializer for a thread-local variable. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179516 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 3 ++- test/Sema/thread-specifier.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 99702bed1c..b943e310ff 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -7630,7 +7630,8 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, else if (VDecl->getTLSKind() == VarDecl::TLS_Static && !VDecl->isInvalidDecl() && !DclT->isDependentType() && !Init->isValueDependent() && !VDecl->isConstexpr() && - !Init->isEvaluatable(Context)) { + !Init->isConstantInitializer( + Context, VDecl->getType()->isReferenceType())) { // GNU C++98 edits for __thread, [basic.start.init]p4: // An object of thread storage duration shall not require dynamic // initialization. diff --git a/test/Sema/thread-specifier.c b/test/Sema/thread-specifier.c index ccffe7335f..01bb8f7773 100644 --- a/test/Sema/thread-specifier.c +++ b/test/Sema/thread-specifier.c @@ -108,3 +108,5 @@ __thread S s; #endif #endif #endif + +__thread int aggregate[10] = {0}; -- 2.40.0