diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2015-04-02 13:07:08 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2015-04-02 13:07:08 +0000 |
commit | 8bf6b3eaf76ac17db38d9f757395043bf8b16bdc (patch) | |
tree | 8d374252ee71bfc7f075cefef2d892d471e87fe8 /clang/lib | |
parent | 3ebba5237ee09ae4e5b2e2d39bda87d664a0f3b7 (diff) | |
download | bcm5719-llvm-8bf6b3eaf76ac17db38d9f757395043bf8b16bdc.tar.gz bcm5719-llvm-8bf6b3eaf76ac17db38d9f757395043bf8b16bdc.zip |
[OPENMP] Fix crash on private variables not used in OpenMP region in templates.
llvm-svn: 233913
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 11 |
2 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 7b449537c7d..92552207813 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -1199,7 +1199,7 @@ StmtResult Sema::ActOnOpenMPRegionEnd(StmtResult S, if (isOpenMPPrivate(Clause->getClauseKind())) { for (auto *VarRef : Clause->children()) { if (auto *E = cast_or_null<Expr>(VarRef)) { - MarkDeclarationsReferencedInExpr(cast<Expr>(E)); + MarkDeclarationsReferencedInExpr(E); } } } diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 6116a78dc7b..df0e4b316d7 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -6670,7 +6670,16 @@ StmtResult TreeTransform<Derived>::TransformOMPExecutableDirective( if (!D->getAssociatedStmt()) { return StmtError(); } - AssociatedStmt = getDerived().TransformStmt(D->getAssociatedStmt()); + getDerived().getSema().ActOnOpenMPRegionStart(D->getDirectiveKind(), + /*CurScope=*/nullptr); + StmtResult Body; + { + Sema::CompoundScopeRAII CompoundScope(getSema()); + Body = getDerived().TransformStmt( + cast<CapturedStmt>(D->getAssociatedStmt())->getCapturedStmt()); + } + AssociatedStmt = + getDerived().getSema().ActOnOpenMPRegionEnd(Body, TClauses); if (AssociatedStmt.isInvalid()) { return StmtError(); } |