diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-04-15 08:07:34 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-04-15 08:07:34 +0000 |
commit | b6b127f279f89d992e0713866f17fed267147a79 (patch) | |
tree | 5d89b69b1b8163668c7a8fe3c8488de2c886c474 | |
parent | 231dbd23f1053b198dcacbed89b73ede907020d4 (diff) |
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
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 3 | ||||
-rw-r--r-- | test/Sema/thread-specifier.c | 2 |
2 files changed, 4 insertions, 1 deletions
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}; |