diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2015-05-06 07:25:08 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2015-05-06 07:25:08 +0000 |
commit | f2453a01fb13b337aec87eaa058ba2eb576a9773 (patch) | |
tree | 301f0ba802e9a62214ce5ca5a1e3d8541ee2f2bd /clang/lib/Sema/SemaOpenMP.cpp | |
parent | 6d9b88dd997c3188446c6f63c852676bc0e6e432 (diff) | |
download | bcm5719-llvm-f2453a01fb13b337aec87eaa058ba2eb576a9773.tar.gz bcm5719-llvm-f2453a01fb13b337aec87eaa058ba2eb576a9773.zip |
[OPENMP] Fixed messages about predetermined DSA for loop control variables.
llvm-svn: 236574
Diffstat (limited to 'clang/lib/Sema/SemaOpenMP.cpp')
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 4877d3f55fc..67fa678db3e 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -428,8 +428,13 @@ DSAStackTy::DSAVarData DSAStackTy::getTopDSA(VarDecl *D, bool FromParent) { if (D->getTLSKind() != VarDecl::TLS_None || (D->getStorageClass() == SC_Register && D->hasAttr<AsmLabelAttr>() && !D->isLocalVarDecl())) { - DVar.CKind = OMPC_threadprivate; - return DVar; + addDSA(D, + DeclRefExpr::Create(SemaRef.getASTContext(), + NestedNameSpecifierLoc(), SourceLocation(), D, + /*RefersToEnclosingVariableOrCapture=*/false, + D->getLocation(), + D->getType().getNonReferenceType(), VK_LValue), + OMPC_threadprivate); } if (Stack[0].SharingMap.count(D)) { DVar.RefExpr = Stack[0].SharingMap[D].RefExpr; @@ -2573,7 +2578,9 @@ static bool CheckOpenMPIterationSpace( SemaRef.Diag(Init->getLocStart(), diag::err_omp_loop_var_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(PredeterminedCKind); - ReportOriginalDSA(SemaRef, &DSA, Var, DVar, true); + if (DVar.RefExpr == nullptr) + DVar.CKind = PredeterminedCKind; + ReportOriginalDSA(SemaRef, &DSA, Var, DVar, /*IsLoopIterVar=*/true); HasErrors = true; } else if (LoopVarRefExpr != nullptr) { // Make the loop iteration variable private (for worksharing constructs), |