]> granicus.if.org Git - clang/commitdiff
[OPENMP] Small update in threadprivate variables processing to fix template instantia...
authorAlexey Bataev <a.bataev@hotmail.com>
Fri, 7 Mar 2014 08:03:37 +0000 (08:03 +0000)
committerAlexey Bataev <a.bataev@hotmail.com>
Fri, 7 Mar 2014 08:03:37 +0000 (08:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203214 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaOpenMP.cpp
test/OpenMP/threadprivate_ast_print.cpp

index b99b639ac27faa53c5bf47ba0e858824b3f439bf..b814706a61a1def6839ce82f67ffa8f14955ea89 100644 (file)
@@ -525,8 +525,7 @@ ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope,
   }
 
   QualType ExprType = VD->getType().getNonReferenceType();
-  ExprResult DE = BuildDeclRefExpr(VD, ExprType, VK_RValue, Id.getLoc());
-  DSAStack->addDSA(VD, cast<DeclRefExpr>(DE.get()), OMPC_threadprivate);
+  ExprResult DE = BuildDeclRefExpr(VD, ExprType, VK_LValue, Id.getLoc());
   return DE;
 }
 
@@ -582,6 +581,7 @@ OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(
     }
 
     Vars.push_back(*I);
+    DSAStack->addDSA(VD, DE, OMPC_threadprivate);
   }
   OMPThreadPrivateDecl *D = 0;
   if (!Vars.empty()) {
index bf3b30550adcf33a543bd47c73b916aeee2757a7..4d0d40e213f2f8217d73ea8b3ec15b9e280c0c21 100644 (file)
@@ -26,9 +26,16 @@ int a, b;
 #pragma omp threadprivate(d, b)
 // CHECK-NEXT: #pragma omp threadprivate(d,b)
 
+template <class T>
+struct ST {
+  static T m;
+  #pragma omp threadprivate(m)
+};
+
 template <class T> T foo() {
   static T v;
   #pragma omp threadprivate(v)
+  v = ST<T>::m;
   return v;
 }
 //CHECK: template <class T = int> int foo() {