summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaOpenMP.cpp
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2015-05-06 07:25:08 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2015-05-06 07:25:08 +0000
commitf2453a01fb13b337aec87eaa058ba2eb576a9773 (patch)
tree301f0ba802e9a62214ce5ca5a1e3d8541ee2f2bd /clang/lib/Sema/SemaOpenMP.cpp
parent6d9b88dd997c3188446c6f63c852676bc0e6e432 (diff)
downloadbcm5719-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.cpp13
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),
OpenPOWER on IntegriCloud