diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2013-09-06 18:03:48 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2013-09-06 18:03:48 +0000 |
commit | 758e55ee58d6835706d1b2dc31090c920bd50603 (patch) | |
tree | 02c3c426d35e45c8cc5e98f453b43f5bf3f9bdf5 /clang/lib/Sema/TreeTransform.h | |
parent | b248b4a1deca374e2b7909eb30a5cee0abeca4bc (diff) | |
download | bcm5719-llvm-758e55ee58d6835706d1b2dc31090c920bd50603.tar.gz bcm5719-llvm-758e55ee58d6835706d1b2dc31090c920bd50603.zip |
OpenMP: Data-sharing attributes analysis and clause 'shared' (fixed test threadprivate_messages.cpp)
llvm-svn: 190183
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index cd0ffdd8e96..947fc241993 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -1312,6 +1312,14 @@ public: EndLoc); } + OMPClause *RebuildOMPSharedClause(ArrayRef<Expr *> VarList, + SourceLocation StartLoc, + SourceLocation LParenLoc, + SourceLocation EndLoc) { + return getSema().ActOnOpenMPSharedClause(VarList, StartLoc, LParenLoc, + EndLoc); + } + /// \brief Rebuild the operand to an Objective-C \@synchronized statement. /// /// By default, performs semantic analysis to build the new statement. @@ -6254,33 +6262,44 @@ TreeTransform<Derived>::TransformSEHHandler(Stmt *Handler) { template<typename Derived> StmtResult TreeTransform<Derived>::TransformOMPParallelDirective(OMPParallelDirective *D) { + DeclarationNameInfo DirName; + getSema().StartOpenMPDSABlock(OMPD_parallel, DirName, 0); + // Transform the clauses - SmallVector<OMPClause *, 5> TClauses; + llvm::SmallVector<OMPClause *, 16> TClauses; ArrayRef<OMPClause *> Clauses = D->clauses(); TClauses.reserve(Clauses.size()); for (ArrayRef<OMPClause *>::iterator I = Clauses.begin(), E = Clauses.end(); I != E; ++I) { if (*I) { OMPClause *Clause = getDerived().TransformOMPClause(*I); - if (!Clause) + if (!Clause) { + getSema().EndOpenMPDSABlock(0); return StmtError(); + } TClauses.push_back(Clause); } else { TClauses.push_back(0); } } - if (!D->getAssociatedStmt()) + if (!D->getAssociatedStmt()) { + getSema().EndOpenMPDSABlock(0); return StmtError(); + } StmtResult AssociatedStmt = getDerived().TransformStmt(D->getAssociatedStmt()); - if (AssociatedStmt.isInvalid()) + if (AssociatedStmt.isInvalid()) { + getSema().EndOpenMPDSABlock(0); return StmtError(); + } - return getDerived().RebuildOMPParallelDirective(TClauses, - AssociatedStmt.take(), - D->getLocStart(), - D->getLocEnd()); + StmtResult Res = getDerived().RebuildOMPParallelDirective(TClauses, + AssociatedStmt.take(), + D->getLocStart(), + D->getLocEnd()); + getSema().EndOpenMPDSABlock(Res.get()); + return Res; } template<typename Derived> @@ -6296,7 +6315,7 @@ TreeTransform<Derived>::TransformOMPDefaultClause(OMPDefaultClause *C) { template<typename Derived> OMPClause * TreeTransform<Derived>::TransformOMPPrivateClause(OMPPrivateClause *C) { - SmallVector<Expr *, 5> Vars; + llvm::SmallVector<Expr *, 16> Vars; Vars.reserve(C->varlist_size()); for (OMPVarList<OMPPrivateClause>::varlist_iterator I = C->varlist_begin(), E = C->varlist_end(); @@ -6312,6 +6331,25 @@ TreeTransform<Derived>::TransformOMPPrivateClause(OMPPrivateClause *C) { C->getLocEnd()); } +template<typename Derived> +OMPClause * +TreeTransform<Derived>::TransformOMPSharedClause(OMPSharedClause *C) { + llvm::SmallVector<Expr *, 16> Vars; + Vars.reserve(C->varlist_size()); + for (OMPVarList<OMPSharedClause>::varlist_iterator I = C->varlist_begin(), + E = C->varlist_end(); + I != E; ++I) { + ExprResult EVar = getDerived().TransformExpr(cast<Expr>(*I)); + if (EVar.isInvalid()) + return 0; + Vars.push_back(EVar.take()); + } + return getDerived().RebuildOMPSharedClause(Vars, + C->getLocStart(), + C->getLParenLoc(), + C->getLocEnd()); +} + //===----------------------------------------------------------------------===// // Expression transformation //===----------------------------------------------------------------------===// |