reject codegen of __thread variables as unimplemented, rdar://6775265


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68755 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp
index f082267..00eb8b4 100644
--- a/lib/CodeGen/CGDecl.cpp
+++ b/lib/CodeGen/CGDecl.cpp
@@ -63,6 +63,10 @@
   if (D.getAttr<AsmLabelAttr>())
     CGM.ErrorUnsupported(&D, "__asm__");
   
+  // We don't support __thread yet.
+  if (D.isThreadSpecified())
+    CGM.ErrorUnsupported(&D, "__thread variable", true);
+  
   switch (D.getStorageClass()) {
   case VarDecl::Static:
     return EmitStaticBlockVarDecl(D);
diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp
index 5b63e65..b9a8032 100644
--- a/lib/CodeGen/CodeGenFunction.cpp
+++ b/lib/CodeGen/CodeGenFunction.cpp
@@ -231,11 +231,10 @@
   EmitStmt(FD->getBody());
   
   const CompoundStmt *S = dyn_cast<CompoundStmt>(FD->getBody());
-  if (S) {
+  if (S)
     FinishFunction(S->getRBracLoc());
-  } else {
+  else
     FinishFunction();
-  }
     
   // Destroy the 'this' declaration.
   if (CXXThisDecl)
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index eb190c7..6512dce 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -614,6 +614,10 @@
     return llvm::ConstantExpr::getBitCast(Entry, Ty);
   }
   
+  // We don't support __thread yet.
+  if (D && D->isThreadSpecified())
+    ErrorUnsupported(D, "thread local ('__thread') variable", true);
+  
   // This is the first use or definition of a mangled name.  If there is a
   // deferred decl with this name, remember that we need to emit it at the end
   // of the file.
@@ -680,7 +684,7 @@
 void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
   llvm::Constant *Init = 0;
   QualType ASTTy = D->getType();
-
+  
   if (D->getInit() == 0) {
     // This is a tentative definition; tentative definitions are
     // implicitly initialized with { 0 }