summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/TreeTransform.h
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2013-09-06 18:03:48 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2013-09-06 18:03:48 +0000
commit758e55ee58d6835706d1b2dc31090c920bd50603 (patch)
tree02c3c426d35e45c8cc5e98f453b43f5bf3f9bdf5 /clang/lib/Sema/TreeTransform.h
parentb248b4a1deca374e2b7909eb30a5cee0abeca4bc (diff)
downloadbcm5719-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.h56
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
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud