diff options
author | Carlo Bertolli <cbertol@us.ibm.com> | 2016-06-24 19:20:02 +0000 |
---|---|---|
committer | Carlo Bertolli <cbertol@us.ibm.com> | 2016-06-24 19:20:02 +0000 |
commit | 912e4df3f84136016be5ee6a504ae3587f478426 (patch) | |
tree | 129814ce1edfb3adff3bee688dc42629af8dae1a | |
parent | 396e7147d3c07d993f73a3001cc9f16fa5a4fd2d (diff) |
Revert r273705
[OpenMP] Initial implementation of parse and sema for composite pragma 'distribute parallel for'
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@273709 91177308-0d34-0410-b5e6-96231b3b80d8
38 files changed, 28 insertions, 4347 deletions
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h index 5e57a12e2a..89612b9c93 100644 --- a/include/clang-c/Index.h +++ b/include/clang-c/Index.h @@ -2305,11 +2305,7 @@ enum CXCursorKind { */ CXCursor_OMPTargetUpdateDirective = 265, - /** \brief OpenMP distribute parallel for directive. - */ - CXCursor_OMPDistributeParallelForDirective = 266, - - CXCursor_LastStmt = CXCursor_OMPDistributeParallelForDirective, + CXCursor_LastStmt = CXCursor_OMPTargetUpdateDirective, /** * \brief Cursor that represents the translation unit itself. diff --git a/include/clang/AST/RecursiveASTVisitor.h b/include/clang/AST/RecursiveASTVisitor.h index 435df3ec3e..468d892299 100644 --- a/include/clang/AST/RecursiveASTVisitor.h +++ b/include/clang/AST/RecursiveASTVisitor.h @@ -2512,9 +2512,6 @@ DEF_TRAVERSE_STMT(OMPTaskLoopSimdDirective, DEF_TRAVERSE_STMT(OMPDistributeDirective, { TRY_TO(TraverseOMPExecutableDirective(S)); }) -DEF_TRAVERSE_STMT(OMPDistributeParallelForDirective, - { TRY_TO(TraverseOMPExecutableDirective(S)); }) - // OpenMP clauses. template <typename Derived> bool RecursiveASTVisitor<Derived>::TraverseOMPClause(OMPClause *C) { diff --git a/include/clang/AST/StmtOpenMP.h b/include/clang/AST/StmtOpenMP.h index 19c3f52681..cacbfbb43b 100644 --- a/include/clang/AST/StmtOpenMP.h +++ b/include/clang/AST/StmtOpenMP.h @@ -299,11 +299,9 @@ class OMPLoopDirective : public OMPExecutableDirective { /// This enumeration contains offsets to all the pointers to children /// expressions stored in OMPLoopDirective. /// The first 9 children are nesessary for all the loop directives, and - /// the next 10 are specific to the worksharing ones. + /// the next 7 are specific to the worksharing ones. /// After the fixed children, three arrays of length CollapsedNum are /// allocated: loop counters, their updates and final values. - /// PrevLowerBound and PrevUpperBound are used to communicate blocking - /// information in composite constructs which require loop blocking /// enum { AssociatedStmtOffset = 0, @@ -328,11 +326,9 @@ class OMPLoopDirective : public OMPExecutableDirective { NextLowerBoundOffset = 14, NextUpperBoundOffset = 15, NumIterationsOffset = 16, - PrevLowerBoundVariableOffset = 17, - PrevUpperBoundVariableOffset = 18, // Offset to the end (and start of the following counters/updates/finals // arrays) for worksharing loop directives. - WorksharingEnd = 19, + WorksharingEnd = 17, }; /// \brief Get the counters storage. @@ -487,20 +483,6 @@ protected: "expected worksharing loop directive"); *std::next(child_begin(), NumIterationsOffset) = NI; } - void setPrevLowerBoundVariable(Expr *PrevLB) { - assert((isOpenMPWorksharingDirective(getDirectiveKind()) || - isOpenMPTaskLoopDirective(getDirectiveKind()) || - isOpenMPDistributeDirective(getDirectiveKind())) && - "expected worksharing loop directive"); - *std::next(child_begin(), PrevLowerBoundVariableOffset) = PrevLB; - } - void setPrevUpperBoundVariable(Expr *PrevUB) { - assert((isOpenMPWorksharingDirective(getDirectiveKind()) || - isOpenMPTaskLoopDirective(getDirectiveKind()) || - isOpenMPDistributeDirective(getDirectiveKind())) && - "expected worksharing loop directive"); - *std::next(child_begin(), PrevUpperBoundVariableOffset) = PrevUB; - } void setCounters(ArrayRef<Expr *> A); void setPrivateCounters(ArrayRef<Expr *> A); void setInits(ArrayRef<Expr *> A); @@ -541,12 +523,6 @@ public: Expr *NLB; /// \brief Update of UpperBound for statically sheduled 'omp for' loops. Expr *NUB; - /// \brief PreviousLowerBound - local variable passed to runtime in the - /// enclosing schedule or null if that does not apply. - Expr *PrevLB; - /// \brief PreviousUpperBound - local variable passed to runtime in the - /// enclosing schedule or null if that does not apply. - Expr *PrevUB; /// \brief Counters Loop counters. SmallVector<Expr *, 4> Counters; /// \brief PrivateCounters Loop counters. @@ -586,8 +562,6 @@ public: NLB = nullptr; NUB = nullptr; NumIterations = nullptr; - PrevLB = nullptr; - PrevUB = nullptr; Counters.resize(Size); PrivateCounters.resize(Size); Inits.resize(Size); @@ -703,22 +677,6 @@ public: return const_cast<Expr *>(reinterpret_cast<const Expr *>( *std::next(child_begin(), NumIterationsOffset))); } - Expr *getPrevLowerBoundVariable() const { - assert((isOpenMPWorksharingDirective(getDirectiveKind()) || - isOpenMPTaskLoopDirective(getDirectiveKind()) || - isOpenMPDistributeDirective(getDirectiveKind())) && - "expected worksharing loop directive"); - return const_cast<Expr *>(reinterpret_cast<const Expr *>( - *std::next(child_begin(), PrevLowerBoundVariableOffset))); - } - Expr *getPrevUpperBoundVariable() const { - assert((isOpenMPWorksharingDirective(getDirectiveKind()) || - isOpenMPTaskLoopDirective(getDirectiveKind()) || - isOpenMPDistributeDirective(getDirectiveKind())) && - "expected worksharing loop directive"); - return const_cast<Expr *>(reinterpret_cast<const Expr *>( - *std::next(child_begin(), PrevUpperBoundVariableOffset))); - } const Stmt *getBody() const { // This relies on the loop form is already checked by Sema. Stmt *Body = getAssociatedStmt()->IgnoreContainers(true); @@ -769,8 +727,7 @@ public: T->getStmtClass() == OMPTaskLoopDirectiveClass || T->getStmtClass() == OMPTaskLoopSimdDirectiveClass || T->getStmtClass() == OMPDistributeDirectiveClass || - T->getStmtClass() == OMPTargetParallelForDirectiveClass || - T->getStmtClass() == OMPDistributeParallelForDirectiveClass; + T->getStmtClass() == OMPTargetParallelForDirectiveClass; } }; @@ -2812,75 +2769,6 @@ public: } }; -/// \brief This represents '#pragma omp distribute parallel for' composite -/// directive. -/// -/// \code -/// #pragma omp distribute parallel for private(a,b) -/// \endcode -/// In this example directive '#pragma omp distribute parallel for' has clause -/// 'private' with the variables 'a' and 'b' -/// -class OMPDistributeParallelForDirective : public OMPLoopDirective { - friend class ASTStmtReader; - - /// \brief Build directive with the given start and end location. - /// - /// \param StartLoc Starting location of the directive kind. - /// \param EndLoc Ending location of the directive. - /// \param CollapsedNum Number of collapsed nested loops. - /// \param NumClauses Number of clauses. - /// - OMPDistributeParallelForDirective(SourceLocation StartLoc, - SourceLocation EndLoc, - unsigned CollapsedNum, unsigned NumClauses) - : OMPLoopDirective(this, OMPDistributeParallelForDirectiveClass, - OMPD_distribute_parallel_for, StartLoc, EndLoc, - CollapsedNum, NumClauses) {} - - /// \brief Build an empty directive. - /// - /// \param CollapsedNum Number of collapsed nested loops. - /// \param NumClauses Number of clauses. - /// - explicit OMPDistributeParallelForDirective(unsigned CollapsedNum, - unsigned NumClauses) - : OMPLoopDirective(this, OMPDistributeParallelForDirectiveClass, - OMPD_distribute_parallel_for, SourceLocation(), - SourceLocation(), CollapsedNum, NumClauses) {} - -public: - /// \brief Creates directive with a list of \a Clauses. - /// - /// \param C AST context. - /// \param StartLoc Starting location of the directive kind. - /// \param EndLoc Ending Location of the directive. - /// \param CollapsedNum Number of collapsed loops. - /// \param Clauses List of clauses. - /// \param AssociatedStmt Statement, associated with the directive. - /// \param Exprs Helper expressions for CodeGen. - /// - static OMPDistributeParallelForDirective * - Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, - unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, - Stmt *AssociatedStmt, const HelperExprs &Exprs); - - /// \brief Creates an empty directive with the place - /// for \a NumClauses clauses. - /// - /// \param C AST context. - /// \param CollapsedNum Number of collapsed nested loops. - /// \param NumClauses Number of clauses. - /// - static OMPDistributeParallelForDirective *CreateEmpty(const ASTContext &C, - unsigned NumClauses, - unsigned CollapsedNum, - EmptyShell); - - static bool classof(const Stmt *T) { - return T->getStmtClass() == OMPDistributeParallelForDirectiveClass; - } -}; } // end namespace clang #endif diff --git a/include/clang/Basic/OpenMPKinds.def b/include/clang/Basic/OpenMPKinds.def index dd3fb5d4d9..8513caff21 100644 --- a/include/clang/Basic/OpenMPKinds.def +++ b/include/clang/Basic/OpenMPKinds.def @@ -126,9 +126,6 @@ #ifndef OPENMP_DEFAULTMAP_MODIFIER #define OPENMP_DEFAULTMAP_MODIFIER(Name) #endif -#ifndef OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE -#define OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) -#endif // OpenMP directives. OPENMP_DIRECTIVE(threadprivate) @@ -169,7 +166,6 @@ OPENMP_DIRECTIVE_EXT(taskloop_simd, "taskloop simd") OPENMP_DIRECTIVE(distribute) OPENMP_DIRECTIVE_EXT(declare_target, "declare target") OPENMP_DIRECTIVE_EXT(end_declare_target, "end declare target") -OPENMP_DIRECTIVE_EXT(distribute_parallel_for, "distribute parallel for") // OpenMP clauses. OPENMP_CLAUSE(if, OMPIfClause) @@ -535,21 +531,6 @@ OPENMP_DISTRIBUTE_CLAUSE(dist_schedule) // Static attributes for 'dist_schedule' clause. OPENMP_DIST_SCHEDULE_KIND(static) -// Clauses allowed for OpenMP directive 'distribute parallel for' -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(firstprivate) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(lastprivate) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(collapse) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(dist_schedule) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(if) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(num_threads) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(default) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(proc_bind) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(private) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(shared) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(reduction) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(copyin) -OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(schedule) - #undef OPENMP_TASKLOOP_SIMD_CLAUSE #undef OPENMP_TASKLOOP_CLAUSE #undef OPENMP_LINEAR_KIND @@ -588,4 +569,3 @@ OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(schedule) #undef OPENMP_DEFAULTMAP_KIND #undef OPENMP_DEFAULTMAP_MODIFIER #undef OPENMP_TARGET_UPDATE_CLAUSE -#undef OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE diff --git a/include/clang/Basic/OpenMPKinds.h b/include/clang/Basic/OpenMPKinds.h index 0a8e890b7c..3ddb6e8f4b 100644 --- a/include/clang/Basic/OpenMPKinds.h +++ b/include/clang/Basic/OpenMPKinds.h @@ -213,11 +213,6 @@ bool isOpenMPThreadPrivate(OpenMPClauseKind Kind); /// Checks if the specified directive kind is one of tasking directives - task, /// taskloop or taksloop simd. bool isOpenMPTaskingDirective(OpenMPDirectiveKind Kind); - -/// Checks if the specified directive kind is one of the composite or combined -/// directives that need loop bound sharing across loops outlined in nested -/// functions -bool isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind); } #endif diff --git a/include/clang/Basic/StmtNodes.td b/include/clang/Basic/StmtNodes.td index ab148e19d1..b4f3937d58 100644 --- a/include/clang/Basic/StmtNodes.td +++ b/include/clang/Basic/StmtNodes.td @@ -227,4 +227,3 @@ def OMPCancelDirective : DStmt<OMPExecutableDirective>; def OMPTaskLoopDirective : DStmt<OMPLoopDirective>; def OMPTaskLoopSimdDirective : DStmt<OMPLoopDirective>; def OMPDistributeDirective : DStmt<OMPLoopDirective>; -def OMPDistributeParallelForDirective : DStmt<OMPLoopDirective>; diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h index 3bcac3c33c..5586298815 100644 --- a/include/clang/Sema/Sema.h +++ b/include/clang/Sema/Sema.h @@ -8192,12 +8192,6 @@ public: StmtResult ActOnOpenMPTargetUpdateDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc); - /// \brief Called on well-formed '\#pragma omp distribute parallel for' after - /// parsing of the associated statement. - StmtResult ActOnOpenMPDistributeParallelForDirective( - ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, - SourceLocation EndLoc, - llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); /// Checks correctness of linear modifiers. bool CheckOpenMPLinearModifier(OpenMPLinearClauseKind LinKind, diff --git a/include/clang/Serialization/ASTBitCodes.h b/include/clang/Serialization/ASTBitCodes.h index e8d2b8c64a..eb9ac238aa 100644 --- a/include/clang/Serialization/ASTBitCodes.h +++ b/include/clang/Serialization/ASTBitCodes.h @@ -1466,7 +1466,6 @@ namespace clang { STMT_OMP_TASKLOOP_SIMD_DIRECTIVE, STMT_OMP_DISTRIBUTE_DIRECTIVE, STMT_OMP_TARGET_UPDATE_DIRECTIVE, - STMT_OMP_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE, EXPR_OMP_ARRAY_SECTION, // ARC diff --git a/lib/AST/StmtOpenMP.cpp b/lib/AST/StmtOpenMP.cpp index 6b2a1719cc..c850c099d6 100644 --- a/lib/AST/StmtOpenMP.cpp +++ b/lib/AST/StmtOpenMP.cpp @@ -150,8 +150,6 @@ OMPForDirective::Create(const ASTContext &C, SourceLocation StartLoc, Dir->setNextLowerBound(Exprs.NLB); Dir->setNextUpperBound(Exprs.NUB); Dir->setNumIterations(Exprs.NumIterations); - Dir->setPrevLowerBoundVariable(Exprs.PrevLB); - Dir->setPrevUpperBoundVariable(Exprs.PrevUB); Dir->setCounters(Exprs.Counters); Dir->setPrivateCounters(Exprs.PrivateCounters); Dir->setInits(Exprs.Inits); @@ -203,8 +201,6 @@ OMPForSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc, Dir->setNextLowerBound(Exprs.NLB); Dir->setNextUpperBound(Exprs.NUB); Dir->setNumIterations(Exprs.NumIterations); - Dir->setPrevLowerBoundVariable(Exprs.PrevLB); - Dir->setPrevUpperBoundVariable(Exprs.PrevUB); Dir->setCounters(Exprs.Counters); Dir->setPrivateCounters(Exprs.PrivateCounters); Dir->setInits(Exprs.Inits); @@ -372,8 +368,6 @@ OMPParallelForDirective *OMPParallelForDirective::Create( Dir->setNextLowerBound(Exprs.NLB); Dir->setNextUpperBound(Exprs.NUB); Dir->setNumIterations(Exprs.NumIterations); - Dir->setPrevLowerBoundVariable(Exprs.PrevLB); - Dir->setPrevUpperBoundVariable(Exprs.PrevUB); Dir->setCounters(Exprs.Counters); Dir->setPrivateCounters(Exprs.PrivateCounters); Dir->setInits(Exprs.Inits); @@ -423,8 +417,6 @@ OMPParallelForSimdDirective *OMPParallelForSimdDirective::Create( Dir->setNextLowerBound(Exprs.NLB); Dir->setNextUpperBound(Exprs.NUB); Dir->setNumIterations(Exprs.NumIterations); - Dir->setPrevLowerBoundVariable(Exprs.PrevLB); - Dir->setPrevUpperBoundVariable(Exprs.PrevUB); Dir->setCounters(Exprs.Counters); Dir->setPrivateCounters(Exprs.PrivateCounters); Dir->setInits(Exprs.Inits); @@ -763,8 +755,6 @@ OMPTargetParallelForDirective *OMPTargetParallelForDirective::Create( Dir->setNextLowerBound(Exprs.NLB); Dir->setNextUpperBound(Exprs.NUB); Dir->setNumIterations(Exprs.NumIterations); - Dir->setPrevLowerBoundVariable(Exprs.PrevLB); - Dir->setPrevUpperBoundVariable(Exprs.PrevUB); Dir->setCounters(Exprs.Counters); Dir->setPrivateCounters(Exprs.PrivateCounters); Dir->setInits(Exprs.Inits); @@ -906,8 +896,6 @@ OMPTaskLoopDirective *OMPTaskLoopDirective::Create( Dir->setNextLowerBound(Exprs.NLB); Dir->setNextUpperBound(Exprs.NUB); Dir->setNumIterations(Exprs.NumIterations); - Dir->setPrevLowerBoundVariable(Exprs.PrevLB); - Dir->setPrevUpperBoundVariable(Exprs.PrevUB); Dir->setCounters(Exprs.Counters); Dir->setPrivateCounters(Exprs.PrivateCounters); Dir->setInits(Exprs.Inits); @@ -957,8 +945,6 @@ OMPTaskLoopSimdDirective *OMPTaskLoopSimdDirective::Create( Dir->setNextLowerBound(Exprs.NLB); Dir->setNextUpperBound(Exprs.NUB); Dir->setNumIterations(Exprs.NumIterations); - Dir->setPrevLowerBoundVariable(Exprs.PrevLB); - Dir->setPrevUpperBoundVariable(Exprs.PrevUB); Dir->setCounters(Exprs.Counters); Dir->setPrivateCounters(Exprs.PrivateCounters); Dir->setInits(Exprs.Inits); @@ -1048,58 +1034,3 @@ OMPTargetUpdateDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses); return new (Mem) OMPTargetUpdateDirective(NumClauses); } - -OMPDistributeParallelForDirective *OMPDistributeParallelForDirective::Create( - const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, - unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, - const HelperExprs &Exprs) { - unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective), - llvm::alignOf<OMPClause *>()); - void *Mem = C.Allocate( - Size + sizeof(OMPClause *) * Clauses.size() + - sizeof(Stmt *) * - numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for)); - OMPDistributeParallelForDirective *Dir = - new (Mem) OMPDistributeParallelForDirective(StartLoc, EndLoc, - CollapsedNum, Clauses.size()); - Dir->setClauses(Clauses); - Dir->setAssociatedStmt(AssociatedStmt); - Dir->setIterationVariable(Exprs.IterationVarRef); - Dir->setLastIteration(Exprs.LastIteration); - Dir->setCalcLastIteration(Exprs.CalcLastIteration); - Dir->setPreCond(Exprs.PreCond); - Dir->setCond(Exprs.Cond); - Dir->setInit(Exprs.Init); - Dir->setInc(Exprs.Inc); - Dir->setIsLastIterVariable(Exprs.IL); - Dir->setLowerBoundVariable(Exprs.LB); - Dir->setUpperBoundVariable(Exprs.UB); - Dir->setStrideVariable(Exprs.ST); - Dir->setEnsureUpperBound(Exprs.EUB); - Dir->setNextLowerBound(Exprs.NLB); - Dir->setNextUpperBound(Exprs.NUB); - Dir->setNumIterations(Exprs.NumIterations); - Dir->setPrevLowerBoundVariable(Exprs.PrevLB); - Dir->setPrevUpperBoundVariable(Exprs.PrevUB); - Dir->setCounters(Exprs.Counters); - Dir->setPrivateCounters(Exprs.PrivateCounters); - Dir->setInits(Exprs.Inits); - Dir->setUpdates(Exprs.Updates); - Dir->setFinals(Exprs.Finals); - Dir->setPreInits(Exprs.PreInits); - return Dir; -} - -OMPDistributeParallelForDirective * -OMPDistributeParallelForDirective::CreateEmpty(const ASTContext &C, - unsigned NumClauses, - unsigned CollapsedNum, - EmptyShell) { - unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective), - llvm::alignOf<OMPClause *>()); - void *Mem = C.Allocate( - Size + sizeof(OMPClause *) * NumClauses + - sizeof(Stmt *) * - numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for)); - return new (Mem) OMPDistributeParallelForDirective(CollapsedNum, NumClauses); -} diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index a05aef9f2e..311187b4b3 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -1153,12 +1153,6 @@ void StmtPrinter::VisitOMPTargetUpdateDirective( PrintOMPExecutableDirective(Node); } -void StmtPrinter::VisitOMPDistributeParallelForDirective( - OMPDistributeParallelForDirective *Node) { - Indent() << "#pragma omp distribute parallel for "; - PrintOMPExecutableDirective(Node); -} - //===----------------------------------------------------------------------===// // Expr printing methods. //===----------------------------------------------------------------------===// diff --git a/lib/AST/StmtProfile.cpp b/lib/AST/StmtProfile.cpp index 579e7e8994..fd365843c2 100644 --- a/lib/AST/StmtProfile.cpp +++ b/lib/AST/StmtProfile.cpp @@ -699,11 +699,6 @@ void StmtProfiler::VisitOMPTargetUpdateDirective( VisitOMPExecutableDirective(S); } -void StmtProfiler::VisitOMPDistributeParallelForDirective( - const OMPDistributeParallelForDirective *S) { - VisitOMPLoopDirective(S); -} - void StmtProfiler::VisitExpr(const Expr *S) { VisitStmt(S); } diff --git a/lib/Basic/OpenMPKinds.cpp b/lib/Basic/OpenMPKinds.cpp index 2975b7aaab..5e0e9ba001 100644 --- a/lib/Basic/OpenMPKinds.cpp +++ b/lib/Basic/OpenMPKinds.cpp @@ -566,16 +566,6 @@ bool clang::isAllowedClauseForDirective(OpenMPDirectiveKind DKind, break; } break; - case OMPD_distribute_parallel_for: - switch (CKind) { -#define OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \ - case OMPC_##Name: \ - return true; -#include "clang/Basic/OpenMPKinds.def" - default: - break; - } - break; case OMPD_declare_target: case OMPD_end_declare_target: case OMPD_unknown: @@ -597,8 +587,8 @@ bool clang::isOpenMPLoopDirective(OpenMPDirectiveKind DKind) { return DKind == OMPD_simd || DKind == OMPD_for || DKind == OMPD_for_simd || DKind == OMPD_parallel_for || DKind == OMPD_parallel_for_simd || DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd || - DKind == OMPD_distribute || DKind == OMPD_target_parallel_for || - DKind == OMPD_distribute_parallel_for; // TODO add next directives. + DKind == OMPD_distribute || + DKind == OMPD_target_parallel_for; // TODO add next directives. } bool clang::isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind) { @@ -606,8 +596,7 @@ bool clang::isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind) { DKind == OMPD_sections || DKind == OMPD_section || DKind == OMPD_single || DKind == OMPD_parallel_for || DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections || - DKind == OMPD_target_parallel_for || - DKind == OMPD_distribute_parallel_for; // TODO add next directives. + DKind == OMPD_target_parallel_for; // TODO add next directives. } bool clang::isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind) { @@ -617,8 +606,7 @@ bool clang::isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind) { bool clang::isOpenMPParallelDirective(OpenMPDirectiveKind DKind) { return DKind == OMPD_parallel || DKind == OMPD_parallel_for || DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections || - DKind == OMPD_target_parallel || DKind == OMPD_target_parallel_for || - DKind == OMPD_distribute_parallel_for; + DKind == OMPD_target_parallel || DKind == OMPD_target_parallel_for; // TODO add next directives. } @@ -645,8 +633,7 @@ bool clang::isOpenMPSimdDirective(OpenMPDirectiveKind DKind) { } bool clang::isOpenMPDistributeDirective(OpenMPDirectiveKind Kind) { - return Kind == OMPD_distribute || - Kind == OMPD_distribute_parallel_for; // TODO add next directives. + return Kind == OMPD_distribute; // TODO add next directives. } bool clang::isOpenMPPrivate(OpenMPClauseKind Kind) { @@ -662,7 +649,3 @@ bool clang::isOpenMPThreadPrivate(OpenMPClauseKind Kind) { bool clang::isOpenMPTaskingDirective(OpenMPDirectiveKind Kind) { return Kind == OMPD_task || isOpenMPTaskLoopDirective(Kind); } - -bool clang::isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind) { - return Kind == OMPD_distribute_parallel_for; -} diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp index 48e99e388a..9a93fce7b0 100644 --- a/lib/CodeGen/CGStmt.cpp +++ b/lib/CodeGen/CGStmt.cpp @@ -280,10 +280,6 @@ void CodeGenFunction::EmitStmt(const Stmt *S) { case Stmt::OMPTargetUpdateDirectiveClass: EmitOMPTargetUpdateDirective(cast<OMPTargetUpdateDirective>(*S)); break; - case Stmt::OMPDistributeParallelForDirectiveClass: - EmitOMPDistributeParallelForDirective( - cast<OMPDistributeParallelForDirective>(*S)); - break; } } diff --git a/lib/CodeGen/CGStmtOpenMP.cpp b/lib/CodeGen/CGStmtOpenMP.cpp index ad4e49d986..061a07791f 100644 --- a/lib/CodeGen/CGStmtOpenMP.cpp +++ b/lib/CodeGen/CGStmtOpenMP.cpp @@ -1865,18 +1865,6 @@ void CodeGenFunction::EmitOMPDistributeOuterLoop( S, LoopScope, /* Ordered = */ false, LB, UB, ST, IL, Chunk); } -void CodeGenFunction::EmitOMPDistributeParallelForDirective( - const OMPDistributeParallelForDirective &S) { - OMPLexicalScope Scope(*this, S, /*AsInlined=*/true); - CGM.getOpenMPRuntime().emitInlinedDirective( - *this, OMPD_distribute_parallel_for, - [&S](CodeGenFunction &CGF, PrePostActionTy &) { - OMPLoopScope PreInitScope(CGF, S); - CGF.EmitStmt( - cast<CapturedStmt>(S.getAssociatedStmt())->getCapturedStmt()); - }); -} - /// \brief Emit a helper variable and return corresponding lvalue. static LValue EmitOMPHelperVar(CodeGenFunction &CGF, const DeclRefExpr *Helper) { diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index e05ec37414..af7e6114af 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -2392,8 +2392,6 @@ public: void EmitOMPTaskLoopSimdDirective(const OMPTaskLoopSimdDirective &S); void EmitOMPDistributeDirective(const OMPDistributeDirective &S); void EmitOMPDistributeLoop(const OMPDistributeDirective &S); - void EmitOMPDistributeParallelForDirective( - const OMPDistributeParallelForDirective &S); /// Emit outlined function for the target directive. static std::pair<llvm::Function * /*OutlinedFn*/, diff --git a/lib/Parse/ParseOpenMP.cpp b/lib/Parse/ParseOpenMP.cpp index 8a15cf61ef..b1635cfa9a 100644 --- a/lib/Parse/ParseOpenMP.cpp +++ b/lib/Parse/ParseOpenMP.cpp @@ -40,7 +40,6 @@ enum OpenMPDirectiveKindEx { OMPD_target_enter, OMPD_target_exit, OMPD_update, - OMPD_distribute_parallel }; class ThreadprivateListParserHelper final { @@ -88,8 +87,6 @@ static OpenMPDirectiveKind ParseOpenMPDirectiveKind(Parser &P) { { OMPD_declare, OMPD_reduction, OMPD_declare_reduction }, { OMPD_declare, OMPD_simd, OMPD_declare_simd }, { OMPD_declare, OMPD_target, OMPD_declare_target }, - { OMPD_distribute, OMPD_parallel, OMPD_distribute_parallel }, - { OMPD_distribute_parallel, OMPD_for, OMPD_distribute_parallel_for }, { OMPD_end, OMPD_declare, OMPD_end_declare }, { OMPD_end_declare, OMPD_target, OMPD_end_declare_target }, { OMPD_target, OMPD_data, OMPD_target_data }, @@ -733,7 +730,6 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl( case OMPD_distribute: case OMPD_end_declare_target: case OMPD_target_update: - case OMPD_distribute_parallel_for: Diag(Tok, diag::err_omp_unexpected_directive) << getOpenMPDirectiveName(DKind); break; @@ -765,7 +761,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl( /// 'taskgroup' | 'teams' | 'taskloop' | 'taskloop simd' | /// 'distribute' | 'target enter data' | 'target exit data' | /// 'target parallel' | 'target parallel for' | -/// 'target update' | 'distribute parallel for' {clause} +/// 'target update' {clause} /// annot_pragma_openmp_end /// StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( @@ -869,8 +865,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( case OMPD_target_parallel_for: case OMPD_taskloop: case OMPD_taskloop_simd: - case OMPD_distribute: - case OMPD_distribute_parallel_for: { + case OMPD_distribute: { ConsumeToken(); // Parse directive name of the 'critical' directive if any. if (DKind == OMPD_critical) { diff --git a/lib/Sema/SemaOpenMP.cpp b/lib/Sema/SemaOpenMP.cpp index 772b3765e5..ca84b8cfed 100644 --- a/lib/Sema/SemaOpenMP.cpp +++ b/lib/Sema/SemaOpenMP.cpp @@ -1814,21 +1814,6 @@ void Sema::ActOnOpenMPRegionStart(OpenMPDirectiveKind DKind, Scope *CurScope) { Params); break; } - case OMPD_distribute_parallel_for: { - QualType KmpInt32Ty = Context.getIntTypeForBitwidth(32, 1); - QualType KmpInt32PtrTy = - Context.getPointerType(KmpInt32Ty).withConst().withRestrict(); - Sema::CapturedParamNameType Params[] = { - std::make_pair(".global_tid.", KmpInt32PtrTy), - std::make_pair(".bound_tid.", KmpInt32PtrTy), - std::make_pair(".previous.lb.", Context.getSizeType()), - std::make_pair(".previous.ub.", Context.getSizeType()), - std::make_pair(StringRef(), QualType()) // __context with shared vars - }; - ActOnCapturedRegionStart(DSAStack->getConstructLoc(), CurScope, CR_OpenMP, - Params); - break; - } case OMPD_threadprivate: case OMPD_taskyield: case OMPD_barrier: @@ -2035,9 +2020,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | parallel | cancel | ! | // | parallel | taskloop | * | // | parallel | taskloop simd | * | - // | parallel | distribute | + | - // | parallel | distribute | + | - // | | parallel for | | + // | parallel | distribute | | // +------------------+-----------------+------------------------------------+ // | for | parallel | * | // | for | for | + | @@ -2073,9 +2056,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | for | cancel | ! | // | for | taskloop | * | // | for | taskloop simd | * | - // | for | distribute | + | - // | for | distribute | + | - // | | parallel for | | + // | for | distribute | | // +------------------+-----------------+------------------------------------+ // | master | parallel | * | // | master | for | + | @@ -2111,9 +2092,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | master | cancel | | // | master | taskloop | * | // | master | taskloop simd | * | - // | master | distribute | + | - // | master | distribute | + | - // | | parallel for | | + // | master | distribute | | // +------------------+-----------------+------------------------------------+ // | critical | parallel | * | // | critical | for | + | @@ -2148,9 +2127,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | critical | cancel | | // | critical | taskloop | * | // | critical | taskloop simd | * | - // | critical | distribute | + | - // | critical | distribute | + | - // | | parallel for | | + // | critical | distribute | | // +------------------+-----------------+------------------------------------+ // | simd | parallel | | // | simd | for | | @@ -2187,8 +2164,6 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | simd | taskloop | | // | simd | taskloop simd | | // | simd | distribute | | - // | simd | distribute | | - // | | parallel for | | // +------------------+-----------------+------------------------------------+ // | for simd | parallel | | // | for simd | for | | @@ -2225,8 +2200,6 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | for simd | taskloop | | // | for simd | taskloop simd | | // | for simd | distribute | | - // | for simd | distribute | | - // | | parallel for | | // +------------------+-----------------+------------------------------------+ // | parallel for simd| parallel | | // | parallel for simd| for | | @@ -2263,8 +2236,6 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | parallel for simd| taskloop | | // | parallel for simd| taskloop simd | | // | parallel for simd| distribute | | - // | parallel for simd| distribute | | - // | | parallel for | | // +------------------+-----------------+------------------------------------+ // | sections | parallel | * | // | sections | for | + | @@ -2300,9 +2271,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | sections | cancel | ! | // | sections | taskloop | * | // | sections | taskloop simd | * | - // | sections | distribute | + | - // | sections | distribute | + | - // | | parallel for | | + // | sections | distribute | | // +------------------+-----------------+------------------------------------+ // | section | parallel | * | // | section | for | + | @@ -2338,9 +2307,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | section | cancel | ! | // | section | taskloop | * | // | section | taskloop simd | * | - // | section | distribute | + | - // | section | distribute | + | - // | | parallel for | | + // | section | distribute | | // +------------------+-----------------+------------------------------------+ // | single | parallel | * | // | single | for | + | @@ -2376,9 +2343,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | single | cancel | | // | single | taskloop | * | // | single | taskloop simd | * | - // | single | distribute | + | - // | single | distribute | + | - // | | parallel for | | + // | single | distribute | | // +------------------+-----------------+------------------------------------+ // | parallel for | parallel | * | // | parallel for | for | + | @@ -2414,9 +2379,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | parallel for | cancel | ! | // | parallel for | taskloop | * | // | parallel for | taskloop simd | * | - // | parallel for | distribute | + | - // | parallel for | distribute | + | - // | | parallel for | | + // | parallel for | distribute | | // +------------------+-----------------+------------------------------------+ // | parallel sections| parallel | * | // | parallel sections| for | + | @@ -2452,9 +2415,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | parallel sections| cancel | ! | // | parallel sections| taskloop | * | // | parallel sections| taskloop simd | * | - // | parallel sections| distribute | + | - // | parallel sections| distribute | + | - // | | parallel for | | + // | parallel sections| distribute | | // +------------------+-----------------+------------------------------------+ // | task | parallel | * | // | task | for | + | @@ -2490,9 +2451,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | task | cancel | ! | // | task | taskloop | * | // | task | taskloop simd | * | - // | task | distribute | + | - // | task | distribute | + | - // | | parallel for | | + // | task | distribute | | // +------------------+-----------------+------------------------------------+ // | ordered | parallel | * | // | ordered | for | + | @@ -2528,9 +2487,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | ordered | cancel | | // | ordered | taskloop | * | // | ordered | taskloop simd | * | - // | ordered | distribute | + | - // | ordered | distribute | + | - // | | parallel for | | + // | ordered | distribute | | // +------------------+-----------------+------------------------------------+ // | atomic | parallel | | // | atomic | for | | @@ -2567,8 +2524,6 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | atomic | taskloop | | // | atomic | taskloop simd | | // | atomic | distribute | | - // | atomic | distribute | | - // | | parallel for | | // +------------------+-----------------+------------------------------------+ // | target | parallel | * | // | target | for | * | @@ -2604,9 +2559,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | target | cancel | | // | target | taskloop | * | // | target | taskloop simd | * | - // | target | distribute | + | - // | target | distribute | + | - // | | parallel for | | + // | target | distribute | | // +------------------+-----------------+------------------------------------+ // | target parallel | parallel | * | // | target parallel | for | * | @@ -2643,8 +2596,6 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | target parallel | taskloop | * | // | target parallel | taskloop simd | * | // | target parallel | distribute | | - // | target parallel | distribute | | - // | | parallel for | | // +------------------+-----------------+------------------------------------+ // | target parallel | parallel | * | // | for | | | @@ -2708,8 +2659,6 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | for | | | // | target parallel | distribute | | // | for | | | - // | parallel | distribute | | - // | for | parallel for | | // +------------------+-----------------+------------------------------------+ // | teams | parallel | * | // | teams | for | + | @@ -2746,8 +2695,6 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | teams | taskloop | + | // | teams | taskloop simd | + | // | teams | distribute | ! | - // | teams | distribute | ! | - // | | parallel for | | // +------------------+-----------------+------------------------------------+ // | taskloop | parallel | * | // | taskloop | for | + | @@ -2782,9 +2729,7 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | | point | | // | taskloop | cancel | | // | taskloop | taskloop | * | - // | taskloop | distribute | + | - // | taskloop | distribute | + | - // | | parallel for | | + // | taskloop | distribute | | // +------------------+-----------------+------------------------------------+ // | taskloop simd | parallel | | // | taskloop simd | for | | @@ -2821,8 +2766,6 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | taskloop simd | taskloop | | // | taskloop simd | taskloop simd | | // | taskloop simd | distribute | | - // | taskloop simd | distribute | | - // | | parallel for | | // +------------------+-----------------+------------------------------------+ // | distribute | parallel | * | // | distribute | for | * | @@ -2859,74 +2802,6 @@ static bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack, // | distribute | taskloop | * | // | distribute | taskloop simd | * | // | distribute | distribute | | - // | distribute | distribute | | - // | | parallel for | | - // +------------------+-----------------+------------------------------------+ - // | distribute | parallel | * | - // | parallel for | | | - // | distribute | for | * | - // | parallel for | | | - // | distribute | for simd | * | - // | parallel for | | | - // | distribute | master | * | - // | parallel for | | | - // | distribute | critical | * | - // | parallel for | | | - // | distribute | simd | * | - // | parallel for | | | - // | distribute | sections | * | - // | parallel for | | | - // | distribute | section | * | - // | parallel for | | | - // | distribute | single | * | - // | parallel for | | | - // | distribute | parallel for | * | - // | parallel for | | | - // | distribute |parallel for simd| * | - // | parallel for | | | - // | distribute |parallel sections| * | - // | parallel for | | | - // | distribute | task | * | - // | parallel for | | | - // | parallel for | | | - // | distribute | taskyield | * | - // | parallel for | | | - // | distribute | barrier | * | - // | parallel for | | | - // | distribute | taskwait | * | - // | parallel for | | | - // | distribute | taskgroup | * | - // | parallel for | | | - // | distribute | flush | * | - // | parallel for | | | - // | distribute | ordered | + | - // | parallel for | | | - // | distribute | atomic | * | - // | parallel for | | | - // | distribute | target | | - // | parallel for | | | - // | distribute | target parallel | | - // | parallel for | | | - // | distribute | target parallel | | - // | parallel for | for | | - // | distribute | target enter | | - // | parallel for | data | | - // | distribute | target exit | | - // | parallel for | data | | - // | distribute | teams | | - // | parallel for | | | - // | distribute | cancellation | + | - // | parallel for | point | | - // | distribute | cancel | + | - // | parallel for | | | - // | distribute | taskloop | * | - // | parallel for | | | - // | distribute | taskloop simd | * | - // | parallel for | | | - // | distribute | distribute | | - // | parallel for | | | - // | distribute | distribute | | - // | parallel for | parallel for | | // +------------------+-----------------+------------------------------------+ if (Stack->getCurScope()) { auto ParentRegion = Stack->getParentDirective(); @@ -3408,11 +3283,6 @@ StmtResult Sema::ActOnOpenMPExecutableDirective( ActOnOpenMPTargetUpdateDirective(ClausesWithImplicit, StartLoc, EndLoc); AllowedNameModifiers.push_back(OMPD_target_update); break; - case OMPD_distribute_parallel_for: - Res = ActOnOpenMPDistributeParallelForDirective( - ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA); - AllowedNameModifiers.push_back(OMPD_parallel); - break; case OMPD_declare_target: case OMPD_end_declare_target: case OMPD_threadprivate: @@ -4920,7 +4790,7 @@ CheckOpenMPLoop(OpenMPDirectiveKind DKind, Expr *CollapseLoopCountExpr, SourceLocation InitLoc = IterSpaces[0].InitSrcRange.getBegin(); // Build variables passed into runtime, nesessary for worksharing directives. - ExprResult LB, UB, IL, ST, EUB, PrevLB, PrevUB; + ExprResult LB, UB, IL, ST, EUB; if (isOpenMPWorksharingDirective(DKind) || isOpenMPTaskLoopDirective(DKind) || isOpenMPDistributeDirective(DKind)) { // Lower bound variable, initialized with zero. @@ -4963,31 +4833,6 @@ CheckOpenMPLoop(OpenMPDirectiveKind DKind, Expr *CollapseLoopCountExpr, EUB = SemaRef.BuildBinOp(CurScope, InitLoc, BO_Assign, UB.get(), CondOp.get()); EUB = SemaRef.ActOnFinishFullExpr(EUB.get()); - - // If we have a combined directive that combines 'distribute', 'for' or - // 'simd' we need to be able to access the bounds of the schedule of the - // enclosing region. E.g. in 'distribute parallel for' the bounds obtained - // by scheduling 'distribute' have to be passed to the schedule of 'for'. - if (isOpenMPLoopBoundSharingDirective(DKind)) { - auto *CD = cast<CapturedStmt>(AStmt)->getCapturedDecl(); - - // We expect to have at least 2 more parameters than the 'parallel' - // directive does - the lower and upper bounds of the previous schedule. - assert(CD->getNumParams() >= 4 && - "Unexpected number of parameters in loop combined directive"); - - // Set the proper type for the bounds given what we learned from the - // enclosed loops. - auto *PrevLBDecl = CD->getParam(/*PrevLB=*/2); - auto *PrevUBDecl = CD->getParam(/*PrevUB=*/3); - - // Previous lower and upper bounds are obtained from the region - // parameters. - PrevLB = - buildDeclRefExpr(SemaRef, PrevLBDecl, PrevLBDecl->getType(), InitLoc); - PrevUB = - buildDeclRefExpr(SemaRef, PrevUBDecl, PrevUBDecl->getType(), InitLoc); - } } // Build the iteration variable and its initialization before loop. @@ -5165,8 +5010,6 @@ CheckOpenMPLoop(OpenMPDirectiveKind DKind, Expr *CollapseLoopCountExpr, Built.EUB = EUB.get(); Built.NLB = NextLB.get(); Built.NUB = NextUB.get(); - Built.PrevLB = PrevLB.get(); - Built.PrevUB = PrevUB.get(); Expr *CounterVal = SemaRef.DefaultLvalueConversion(IV.get()).get(); // Fill data for doacross depend clauses. @@ -6889,39 +6732,6 @@ StmtResult Sema::ActOnOpenMPDistributeDirective( NestedLoopCount, Clauses, AStmt, B); } -StmtResult Sema::ActOnOpenMPDistributeParallelForDirective( - ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, - SourceLocation EndLoc, - llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA) { - if (!AStmt) - return StmtError(); - - CapturedStmt *CS = cast<CapturedStmt>(AStmt); - // 1.2.2 OpenMP Language Terminology - // Structured block - An executable statement with a single entry at the - // top and a single exit at the bottom. - // The point of exit cannot be a branch out of the structured block. - // longjmp() and throw() must not violate the entry/exit criteria. - CS->getCapturedDecl()->setNothrow(); - - OMPLoopDirective::HelperExprs B; - // In presence of clause 'collapse' with number of loops, it will - // define the nested loops number. - unsigned NestedLoopCount = CheckOpenMPLoop( - OMPD_distribute_parallel_for, getCollapseNumberExpr(Clauses), - nullptr /*ordered not a clause on distribute*/, AStmt, *this, *DSAStack, - VarsWithImplicitDSA, B); - if (NestedLoopCount == 0) - return StmtError(); - - assert((CurContext->isDependentContext() || B.builtAll()) && - "omp for loop exprs were not built"); - - getCurFunction()->setHasBranchProtectedScope(); - return OMPDistributeParallelForDirective::Create( - Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); -} - OMPClause *Sema::ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind, Expr *Expr, SourceLocation StartLoc, SourceLocation LParenLoc, diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index c1cf9ada71..c90e0fa2ca 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -7526,17 +7526,6 @@ StmtResult TreeTransform<Derived>::TransformOMPDistributeDirective( return Res; } -template <typename Derived> -StmtResult TreeTransform<Derived>::TransformOMPDistributeParallelForDirective( - OMPDistributeParallelForDirective *D) { - DeclarationNameInfo DirName; - getDerived().getSema().StartOpenMPDSABlock( - OMPD_distribute_parallel_for, DirName, nullptr, D->getLocStart()); - StmtResult Res = getDerived().TransformOMPExecutableDirective(D); - getDerived().getSema().EndOpenMPDSABlock(Res.get()); - return Res; -} - //===----------------------------------------------------------------------===// // OpenMP clause transformation //===----------------------------------------------------------------------===// diff --git a/lib/Serialization/ASTReaderStmt.cpp b/lib/Serialization/ASTReaderStmt.cpp index 69b7d97243..bff056ebc0 100644 --- a/lib/Serialization/ASTReaderStmt.cpp +++ b/lib/Serialization/ASTReaderStmt.cpp @@ -2471,10 +2471,6 @@ void ASTStmtReader::VisitOMPLoopDirective(OMPLoopDirective *D) { D->setNextUpperBound(Reader.ReadSubExpr()); D->setNumIterations(Reader.ReadSubExpr()); } - if (isOpenMPLoopBoundSharingDirective(D->getDirectiveKind())) { - D->setPrevLowerBoundVariable(Reader.ReadSubExpr()); - D->setPrevUpperBoundVariable(Reader.ReadSubExpr()); - } SmallVector<Expr *, 4> Sub; unsigned CollapsedNum = D->getCollapsedNumber(); Sub.reserve(CollapsedNum); @@ -2707,10 +2703,6 @@ void ASTStmtReader::VisitOMPTargetUpdateDirective(OMPTargetUpdateDirective *D) { ++Idx; VisitOMPExecutableDirective(D); } -void ASTStmtReader::VisitOMPDistributeParallelForDirective( - OMPDistributeParallelForDirective *D) { - VisitOMPLoopDirective(D); -} //===----------------------------------------------------------------------===// // ASTReader Implementation @@ -3387,14 +3379,6 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) { break; } - case STMT_OMP_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE: { - unsigned NumClauses = Record[ASTStmtReader::NumStmtFields]; - unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields + 1]; - S = OMPDistributeParallelForDirective::CreateEmpty(Context, NumClauses, - CollapsedNum, Empty); - break; - } - case EXPR_CXX_OPERATOR_CALL: S = new (Context) CXXOperatorCallExpr(Context, Empty); break; diff --git a/lib/Serialization/ASTWriterStmt.cpp b/lib/Serialization/ASTWriterStmt.cpp index 333a70fe61..fe600adea3 100644 --- a/lib/Serialization/ASTWriterStmt.cpp +++ b/lib/Serialization/ASTWriterStmt.cpp @@ -2170,10 +2170,6 @@ void ASTStmtWriter::VisitOMPLoopDirective(OMPLoopDirective *D) { Record.AddStmt(D->getNextUpperBound()); Record.AddStmt(D->getNumIterations()); } - if (isOpenMPLoopBoundSharingDirective(D->getDirectiveKind())) { - Record.AddStmt(D->getPrevLowerBoundVariable()); - Record.AddStmt(D->getPrevUpperBoundVariable()); - } for (auto I : D->counters()) { Record.AddStmt(I); } @@ -2421,12 +2417,6 @@ void ASTStmtWriter::VisitOMPTargetUpdateDirective(OMPTargetUpdateDirective *D) { Code = serialization::STMT_OMP_TARGET_UPDATE_DIRECTIVE; } -void ASTStmtWriter::VisitOMPDistributeParallelForDirective( - OMPDistributeParallelForDirective *D) { - VisitOMPLoopDirective(D); - Code = serialization::STMT_OMP_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE; -} - //===----------------------------------------------------------------------===// // ASTWriter Implementation //===----------------------------------------------------------------------===// diff --git a/lib/StaticAnalyzer/Core/ExprEngine.cpp b/lib/StaticAnalyzer/Core/ExprEngine.cpp index e4ba1be4ba..84515022fc 100644 --- a/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -842,7 +842,6 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred, case Stmt::OMPTaskLoopDirectiveClass: case Stmt::OMPTaskLoopSimdDirectiveClass: case Stmt::OMPDistributeDirectiveClass: - case Stmt::OMPDistributeParallelForDirectiveClass: llvm_unreachable("Stmt should not be in analyzer evaluation loop"); case Stmt::ObjCSubscriptRefExprClass: diff --git a/test/OpenMP/distribute_parallel_for_ast_print.cpp b/test/OpenMP/distribute_parallel_for_ast_print.cpp deleted file mode 100644 index 993cc2a715..0000000000 --- a/test/OpenMP/distribute_parallel_for_ast_print.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s -// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s -// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s -// expected-no-diagnostics - -#ifndef HEADER -#define HEADER - -struct S { - S(): a(0) {} - S(int v) : a(v) {} - int a; - typedef int type; -}; - -template <typename T> -class S7 : public T { -protected: - T a; - S7() : a(0) {} - -public: - S7(typename T::type v) : a(v) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) private(T::a) - for (int k = 0; k < a.a; ++k) - ++this->a.a; - } - S7 &operator=(S7 &s) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) - for (int k = 0; k < s.a.a; ++k) - ++s.a.a; - return *this; - } -}; - -// CHECK: #pragma omp distribute parallel for private(this->a) private(this->a) private(this->S::a) -// CHECK: #pragma omp distribute parallel for private(this->a) private(this->a) private(T::a) -// CHECK: #pragma omp distribute parallel for private(this->a) private(this->a) - -class S8 : public S7<S> { - S8() {} - -public: - S8(int v) : S7<S>(v){ -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) private(S7<S>::a) - for (int k = 0; k < a.a; ++k) - ++this->a.a; - } - S8 &operator=(S8 &s) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) - for (int k = 0; k < s.a.a; ++k) - ++s.a.a; - return *this; - } -}; - -// CHECK: #pragma omp distribute parallel for private(this->a) private(this->a) private(this->S7<S>::a) -// CHECK: #pragma omp distribute parallel for private(this->a) private(this->a) - -template <class T, int N> -T tmain(T argc) { - T b = argc, c, d, e, f, h; - static T a; -// CHECK: static T a; - static T g; -#pragma omp threadprivate(g) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule(static, a) schedule(dynamic) default(none) copyin(g) firstprivate(a) - // CHECK: #pragma omp distribute parallel for dist_schedule(static, a) schedule(dynamic) default(none) copyin(g) - for (int i = 0; i < 2; ++i) - a = 2; -// CHECK-NEXT: for (int i = 0; i < 2; ++i) -// CHECK-NEXT: a = 2; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) if (parallel :argc) num_threads(N) default(shared) shared(e) reduction(+ : h) dist_schedule(static,N) - for (int i = 0; i < 2; ++i) - for (int j = 0; j < 2; ++j) - for (int j = 0; j < 2; ++j) - for (int j = 0; j < 2; ++j) - for (int j = 0; j < 2; ++j) - for (int i = 0; i < 2; ++i) - for (int j = 0; j < 2; ++j) - for (int j = 0; j < 2; ++j) - for (int j = 0; j < 2; ++j) - for (int j = 0; j < 2; ++j) - a++; - // CHECK: #pragma omp distribute parallel for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) if(parallel: argc) num_threads(N) default(shared) shared(e) reduction(+: h) dist_schedule(static, N) - // CHECK-NEXT: for (int i = 0; i < 2; ++i) - // CHECK-NEXT: for (int j = 0; j < 2; ++j) - // CHECK-NEXT: for (int j = 0; j < 2; ++j) - // CHECK-NEXT: for (int j = 0; j < 2; ++j) - // CHECK-NEXT: for (int j = 0; j < 2; ++j) - // CHECK-NEXT: for (int i = 0; i < 2; ++i) - // CHECK-NEXT: for (int j = 0; j < 2; ++j) - // CHECK-NEXT: for (int j = 0; j < 2; ++j) - // CHECK-NEXT: for (int j = 0; j < 2; ++j) - // CHECK-NEXT: for (int j = 0; j < 2; ++j) - // CHECK-NEXT: a++; - return T(); -} - -int main(int argc, char **argv) { - int b = argc, c, d, e, f, h; - static int a; -// CHECK: static int a; - static float g; -#pragma omp threadprivate(g) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule(guided, argc) default(none) copyin(g) dist_schedule(static, a) private(a) - // CHECK: #pragma omp distribute parallel for schedule(guided, argc) default(none) copyin(g) dist_schedule(static, a) private(a) - for (int i = 0; i < 2; ++i) - a = 2; -// CHECK-NEXT: for (int i = 0; i < 2; ++i) -// CHECK-NEXT: a = 2; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) if (argc) num_threads(a) default(shared) shared(e) reduction(+ : h) dist_schedule(static, b) - for (int i = 0; i < 10; ++i) - for (int j = 0; j < 10; ++j) - a++; - // CHECK: #pragma omp distribute parallel for private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) schedule(auto) if(argc) num_threads(a) default(shared) shared(e) reduction(+: h) dist_schedule(static, b) - // CHECK-NEXT: for (int i = 0; i < 10; ++i) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: a++; - return (tmain<int, 5>(argc) + tmain<char, 1>(argv[0][0])); -} - -#endif diff --git a/test/OpenMP/distribute_parallel_for_collapse_messages.cpp b/test/OpenMP/distribute_parallel_for_collapse_messages.cpp deleted file mode 100644 index 41976a69ee..0000000000 --- a/test/OpenMP/distribute_parallel_for_collapse_messages.cpp +++ /dev/null @@ -1,154 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp %s -// RUN: %clang_cc1 -verify -fopenmp -std=c++98 %s -// RUN: %clang_cc1 -verify -fopenmp -std=c++11 %s - -void foo() { -} - -#if __cplusplus >= 201103L -// expected-note@+2 4 {{declared here}} -#endif -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note {{declared here}} - -template <class T, typename S, int N, int ST> // expected-note {{declared here}} -T tmain(T argc, S **argv) { //expected-note 2 {{declared here}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse // expected-error {{expected '(' after 'collapse'}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse () // expected-error {{expected expression}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams - // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} - // expected-error@+2 2 {{expression is not an integral constant expression}} - // expected-note@+1 2 {{read of non-const variable 'argc' is not allowed in a constant expression}} -#pragma omp distribute parallel for collapse (argc - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams - // expected-error@+1 2 {{argument to 'collapse' clause must be a strictly positive integer value}} -#pragma omp distribute parallel for collapse (ST // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (1)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp distribute parallel for', but found only 1}} - // expected-error@+8 2 {{directive '#pragma omp distribute parallel for' cannot contain more than one 'collapse' clause}} - // expected-error@+7 2 {{argument to 'collapse' clause must be a strictly positive integer value}} - // expected-error@+6 2 {{expression is not an integral constant expression}} -#if __cplusplus >= 201103L - // expected-note@+4 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}} -#endif -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (foobool(argc)), collapse (true), collapse (-5) - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (S) // expected-error {{'S' does not refer to a value}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#if __cplusplus <= 199711L - // expected-error@+6 2 {{expression is not an integral constant expression}} -#else - // expected-error@+4 2 {{integral constant expression must have integral or unscoped enumeration type, not 'char *'}} -#endif -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (1) - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (N) // expected-error {{argument to 'collapse' clause must be a strictly positive integer value}} - for (T i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (2) // expected-note {{as specified in 'collapse' clause}} - foo(); // expected-error {{expected 2 for loops after '#pragma omp distribute parallel for'}} - return argc; -} - -int main(int argc, char **argv) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse // expected-error {{expected '(' after 'collapse'}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse () // expected-error {{expected expression}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (4 // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-note {{as specified in 'collapse' clause}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for', but found only 1}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (2+2)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} expected-note {{as specified in 'collapse' clause}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for', but found only 1}} - // expected-error@+6 {{expression is not an integral constant expression}} -#if __cplusplus >= 201103L - // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}} -#endif -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (foobool(1) > 0 ? 1 : 2) - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - // expected-error@+8 {{expression is not an integral constant expression}} -#if __cplusplus >= 201103L - // expected-note@+6{{non-constexpr function 'foobool' cannot be used in a constant expression}} -#endif - // expected-error@+4 2 {{directive '#pragma omp distribute parallel for' cannot contain more than one 'collapse' clause}} - // expected-error@+3 2 {{argument to 'collapse' clause must be a strictly positive integer value}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (foobool(argc)), collapse (true), collapse (-5) - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (S1) // expected-error {{'S1' does not refer to a value}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; -#if __cplusplus <= 199711L - // expected-error@+6 {{expression is not an integral constant expression}} -#else - // expected-error@+4 {{integral constant expression must have integral or unscoped enumeration type, not 'char *'}} -#endif -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - // expected-error@+5 {{statement after '#pragma omp distribute parallel for' must be a for loop}} - // expected-note@+3 {{in instantiation of function template specialization 'tmain<int, char, -1, -2>' requested here}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse(collapse(tmain<int, char, -1, -2>(argc, argv) // expected-error 2 {{expected ')'}} expected-note 2 {{to match this '('}} - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for collapse (2) // expected-note {{as specified in 'collapse' clause}} - foo(); // expected-error {{expected 2 for loops after '#pragma omp distribute parallel for'}} - // expected-note@+1 {{in instantiation of function template specialization 'tmain<int, char, 1, 0>' requested here}} - return tmain<int, char, 1, 0>(argc, argv); -} - diff --git a/test/OpenMP/distribute_parallel_for_copyin_messages.cpp b/test/OpenMP/distribute_parallel_for_copyin_messages.cpp deleted file mode 100644 index 7d70341348..0000000000 --- a/test/OpenMP/distribute_parallel_for_copyin_messages.cpp +++ /dev/null @@ -1,190 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s - -void foo() { -} - -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note 2 {{declared here}} -class S2 { - mutable int a; - -public: - S2() : a(0) {} - S2 &operator=(S2 &s2) { return *this; } -}; -class S3 { - int a; - -public: - S3() : a(0) {} - S3 &operator=(S3 &s3) { return *this; } -}; -class S4 { - int a; - S4(); - S4 &operator=(const S4 &s4); // expected-note 3 {{implicitly declared private here}} - -public: - S4(int v) : a(v) {} -}; -class S5 { - int a; - S5() : a(0) {} - S5 &operator=(const S5 &s5) { return *this; } // expected-note 3 {{implicitly declared private here}} - -public: - S5(int v) : a(v) {} -}; -template <class T> -class ST { -public: - static T s; -}; - -S2 k; -S3 h; -S4 l(3); -S5 m(4); -#pragma omp threadprivate(h, k, l, m) - -namespace A { -double x; -#pragma omp threadprivate(x) -} -namespace B { -using A::x; -} - -template <class T, typename S, int N> -T tmain(T argc, S **argv) { - T i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin // expected-error {{expected '(' after 'copyin'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin() // expected-error {{expected expression}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(k // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(h, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(l) // expected-error 2 {{'operator=' is a private member of 'S4'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(S1) // expected-error {{'S1' does not refer to a value}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(argv[1]) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(i) // expected-error {{copyin variable must be threadprivate}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(m) // expected-error 2 {{'operator=' is a private member of 'S5'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(ST<int>::s, B::x) // expected-error {{copyin variable must be threadprivate}} - for (i = 0; i < argc; ++i) - foo(); -} - -int main(int argc, char **argv) { - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin // expected-error {{expected '(' after 'copyin'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin() // expected-error {{expected expression}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(k // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(h, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(l) // expected-error {{'operator=' is a private member of 'S4'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(S1) // expected-error {{'S1' does not refer to a value}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(argv[1]) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(i) // expected-error {{copyin variable must be threadprivate}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(m) // expected-error {{'operator=' is a private member of 'S5'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for copyin(ST<int>::s, B::x) // expected-error {{copyin variable must be threadprivate}} - for (i = 0; i < argc; ++i) - foo(); - - return tmain<int, char, 3>(argc, argv); // expected-note {{in instantiation of function template specialization 'tmain<int, char, 3>' requested here}} -} diff --git a/test/OpenMP/distribute_parallel_for_default_messages.cpp b/test/OpenMP/distribute_parallel_for_default_messages.cpp deleted file mode 100644 index 3437bd55cf..0000000000 --- a/test/OpenMP/distribute_parallel_for_default_messages.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s - -void foo(); - -template <class T, int N> -T tmain(T argc) { - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default // expected-error {{expected '(' after 'default'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default( // expected-error {{expected 'none' or 'shared' in OpenMP clause 'default'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default() // expected-error {{expected 'none' or 'shared' in OpenMP clause 'default'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(none // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) // expected-error 2 {{variable 'argc' must have explicitly specified data sharing attributes}} - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(shared), default(shared) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'default' clause}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(x) // expected-error {{expected 'none' or 'shared' in OpenMP clause 'default'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(none) - for (i = 0; i < argc; ++i) // expected-error 2 {{variable 'argc' must have explicitly specified data sharing attributes}} - foo(); - -#pragma omp parallel default(none) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(shared) - for (i = 0; i < argc; ++i) - foo(); - - return T(); -} - -int main(int argc, char **argv) { - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default // expected-error {{expected '(' after 'default'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default( // expected-error {{expected 'none' or 'shared' in OpenMP clause 'default'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default() // expected-error {{expected 'none' or 'shared' in OpenMP clause 'default'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(none // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}} - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(shared), default(shared) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'default' clause}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(x) // expected-error {{expected 'none' or 'shared' in OpenMP clause 'default'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(none) - for (i = 0; i < argc; ++i) // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}} - foo(); - -#pragma omp parallel default(none) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for default(shared) - for (i = 0; i < argc; ++i) - foo(); - - return (tmain<int, 5>(argc) + tmain<char, 1>(argv[0][0])); // expected-note {{in instantiation of function template specialization 'tmain<int, 5>' requested here}} expected-note {{in instantiation of function template specialization 'tmain<char, 1>' requested here}} -} diff --git a/test/OpenMP/distribute_parallel_for_dist_schedule_messages.cpp b/test/OpenMP/distribute_parallel_for_dist_schedule_messages.cpp deleted file mode 100644 index 0f5820ed4b..0000000000 --- a/test/OpenMP/distribute_parallel_for_dist_schedule_messages.cpp +++ /dev/null @@ -1,103 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify -fopenmp -ferror-limit 100 -o - %s - -void foo() { -} - -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note {{declared here}} expected-note {{declared here}} - -template <class T, int N> -T tmain(T argc) { - T b = argc, c, d, e, f, g; - char ** argv; - static T a; -// CHECK: static T a; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule // expected-error {{expected '(' after 'dist_schedule'}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule ( // expected-error {{expected 'static' in OpenMP clause 'dist_schedule'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule () // expected-error {{expected 'static' in OpenMP clause 'dist_schedule'}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (argc)) // expected-error {{expected 'static' in OpenMP clause 'dist_schedule'}} expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static, argc > 0 ? argv[1] : argv[2]) // expected-error2 {{expression must have integral or unscoped enumeration type, not 'char *'}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static), dist_schedule (static, 1) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'dist_schedule' clause}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static, S1) // expected-error {{'S1' does not refer to a value}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static, argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error3 {{expression must have integral or unscoped enumeration type, not 'char *'}} - for (int i = 0; i < 10; ++i) foo(); - return T(); -} - -int main(int argc, char **argv) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule // expected-error {{expected '(' after 'dist_schedule'}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule ( // expected-error {{expected 'static' in OpenMP clause 'dist_schedule'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule () // expected-error {{expected 'static' in OpenMP clause 'dist_schedule'}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (argc)) // expected-error {{expected 'static' in OpenMP clause 'dist_schedule'}} expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static, argc > 0 ? argv[1] : argv[2]) // expected-error {{expression must have integral or unscoped enumeration type, not 'char *'}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static), dist_schedule (static, 1) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'dist_schedule' clause}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static, S1) // expected-error {{'S1' does not refer to a value}} - for (int i = 0; i < 10; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for dist_schedule (static, argv[1]=2) // expected-error {{expression must have integral or unscoped enumeration type, not 'char *'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) foo(); - return (tmain<int, 5>(argc) + tmain<char, 1>(argv[0][0])); // expected-note {{in instantiation of function template specialization 'tmain<int, 5>' requested here}} expected-note {{in instantiation of function template specialization 'tmain<char, 1>' requested here}} -} diff --git a/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp b/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp deleted file mode 100644 index 3e288c37d4..0000000000 --- a/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp +++ /dev/null @@ -1,359 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp %s - -void foo() { -} - -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}} -extern S1 a; -class S2 { - mutable int a; - -public: - S2() : a(0) {} - S2(const S2 &s2) : a(s2.a) {} - static float S2s; - static const float S2sc; -}; -const float S2::S2sc = 0; -const S2 b; -const S2 ba[5]; -class S3 { - int a; - S3 &operator=(const S3 &s3); - -public: - S3() : a(0) {} - S3(const S3 &s3) : a(s3.a) {} -}; -const S3 c; -const S3 ca[5]; -extern const int f; -class S4 { - int a; - S4(); - S4(const S4 &s4); // expected-note 2 {{implicitly declared private here}} - -public: - S4(int v) : a(v) {} -}; -class S5 { - int a; - S5(const S5 &s5) : a(s5.a) {} // expected-note 4 {{implicitly declared private here}} - -public: - S5() : a(0) {} - S5(int v) : a(v) {} -}; -class S6 { - int a; - S6() : a(0) {} - -public: - S6(const S6 &s6) : a(s6.a) {} - S6(int v) : a(v) {} -}; - -S3 h; -#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}} - -template <class I, class C> -int foomain(int argc, char **argv) { - I e(4); - C g(5); - int i; - int &j = i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate // expected-error {{expected '(' after 'firstprivate'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate() // expected-error {{expected expression}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argc) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(a, b) // expected-error {{firstprivate variable with incomplete type 'S1'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argv[1]) // expected-error {{expected variable name}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp parallel - { - int v = 0; - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) - for (int k = 0; k < argc; ++k) { - i = k; - v += i; - } - } -#pragma omp parallel shared(i) -#pragma omp parallel private(i) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(j) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp parallel private(i) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp distribute parallel for' directive may not be firstprivate, predetermined as private}} - foo(); -#pragma omp parallel reduction(+ : i) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp distribute parallel for' directive may not be firstprivate, predetermined as private}} - foo(); - return 0; -} - -namespace A { -double x; -#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} -} -namespace B { -using A::x; -} - -int main(int argc, char **argv) { - const int d = 5; - const int da[5] = {0}; - S4 e(4); - S5 g(5); - S3 m; - S6 n(2); - int i; - int &j = i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate // expected-error {{expected '(' after 'firstprivate'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate() // expected-error {{expected expression}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argc) - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(argv[1]) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(2 * 2) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(ba) // OK - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(ca) // OK - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(da) // OK - for (i = 0; i < argc; ++i) - foo(); - int xa; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(xa) // OK - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(S2::S2s) // OK - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(S2::S2sc) // OK - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp distribute parallel for'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(m) // OK - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be firstprivate}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(xa), firstprivate(xa) // expected-error {{private variable cannot be firstprivate}} expected-note {{defined as private}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp distribute parallel for' directive may not be firstprivate, predetermined as private}} - foo(); -#pragma omp parallel shared(xa) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(xa) // OK: may be firstprivate - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(j) - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(n) firstprivate(n) // OK - for (i = 0; i < argc; ++i) - foo(); -#pragma omp parallel - { - int v = 0; - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) - for (int k = 0; k < argc; ++k) { - i = k; - v += i; - } - } -#pragma omp parallel private(i) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp distribute parallel for' directive may not be firstprivate, predetermined as private}} - foo(); -#pragma omp parallel reduction(+ : i) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) // expected-note {{defined as firstprivate}} - for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp distribute parallel for' directive may not be firstprivate, predetermined as private}} - foo(); - static int si; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(si) // OK - for (i = 0; i < argc; ++i) - si = i + 1; - - return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}} -} diff --git a/test/OpenMP/distribute_parallel_for_if_messages.cpp b/test/OpenMP/distribute_parallel_for_if_messages.cpp deleted file mode 100644 index c864340a46..0000000000 --- a/test/OpenMP/distribute_parallel_for_if_messages.cpp +++ /dev/null @@ -1,179 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s - -void foo() { -} - -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note {{declared here}} - -template <class T, class S> // expected-note {{declared here}} -int tmain(T argc, S **argv) { - T i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if // expected-error {{expected '(' after 'if'}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if () // expected-error {{expected expression}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argc > 0 ? argv[1] : argv[2]) - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'if' clause}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (S) // expected-error {{'S' does not refer to a value}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(argc) - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel // expected-warning {{missing ':' after directive name modifier - ignoring}} expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc) - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp distribute parallel for'}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'if' clause with 'parallel' name modifier}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(distribute : argc) // expected-error {{directive name modifier 'distribute' is not allowed for '#pragma omp distribute parallel for'}} - for (i = 0; i < argc; ++i) foo(); - - return 0; -} - -int main(int argc, char **argv) { - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if // expected-error {{expected '(' after 'if'}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if () // expected-error {{expected expression}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argc > 0 ? argv[1] : argv[2]) - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'if' clause}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (S1) // expected-error {{'S1' does not refer to a value}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if (1 0) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(if(tmain(argc, argv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel // expected-warning {{missing ':' after directive name modifier - ignoring}} expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc) - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp distribute parallel for'}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'if' clause with 'parallel' name modifier}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for if(distribute : argc) // expected-error {{directive name modifier 'distribute' is not allowed for '#pragma omp distribute parallel for'}} - for (i = 0; i < argc; ++i) foo(); - - return tmain(argc, argv); -} diff --git a/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp b/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp deleted file mode 100644 index 745007fc48..0000000000 --- a/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp +++ /dev/null @@ -1,333 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp %s - -void foo() { -} - -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}} -extern S1 a; -class S2 { - mutable int a; - -public: - S2() : a(0) {} - S2(S2 &s2) : a(s2.a) {} - const S2 &operator =(const S2&) const; - S2 &operator =(const S2&); - static float S2s; // expected-note {{static data member is predetermined as shared}} - static const float S2sc; -}; -const float S2::S2sc = 0; // expected-note {{static data member is predetermined as shared}} -const S2 b; -const S2 ba[5]; -class S3 { - int a; - S3 &operator=(const S3 &s3); // expected-note 2 {{implicitly declared private here}} - -public: - S3() : a(0) {} - S3(S3 &s3) : a(s3.a) {} -}; -const S3 c; // expected-note {{global variable is predetermined as shared}} -const S3 ca[5]; // expected-note {{global variable is predetermined as shared}} -extern const int f; // expected-note {{global variable is predetermined as shared}} -class S4 { - int a; - S4(); // expected-note 3 {{implicitly declared private here}} - S4(const S4 &s4); - -public: - S4(int v) : a(v) {} -}; -class S5 { - int a; - S5() : a(0) {} // expected-note {{implicitly declared private here}} - -public: - S5(const S5 &s5) : a(s5.a) {} - S5(int v) : a(v) {} -}; -class S6 { - int a; - S6() : a(0) {} - -public: - S6(const S6 &s6) : a(s6.a) {} - S6(int v) : a(v) {} -}; - -S3 h; -#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}} - -template <class I, class C> -int foomain(int argc, char **argv) { - I e(4); - I g(5); - int i; - int &j = i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate // expected-error {{expected '(' after 'lastprivate'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate() // expected-error {{expected expression}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argc) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(S1) // expected-error {{'S1' does not refer to a value}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(a, b) // expected-error {{lastprivate variable with incomplete type 'S1'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argv[1]) // expected-error {{expected variable name}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(e, g) // expected-error 2 {{calling a private constructor of class 'S4'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}} - for (int k = 0; k < argc; ++k) - ++k; - - int v = 0; -#pragma omp target -#pragma omp teams - { -#pragma omp distribute parallel for lastprivate(i) - for (int k = 0; k < argc; ++k) { - i = k; - v += i; - } - } -#pragma omp target -#pragma omp teams private(i) -#pragma omp distribute parallel for lastprivate(j) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(i) - for (int k = 0; k < argc; ++k) - ++k; - return 0; -} - -void bar(S4 a[2]) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(a) - for (int i = 0; i < 2; ++i) - foo(); -} - -namespace A { -double x; -#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} -} -namespace B { -using A::x; -} - -int main(int argc, char **argv) { - const int d = 5; // expected-note {{constant variable is predetermined as shared}} - const int da[5] = {0}; // expected-note {{constant variable is predetermined as shared}} - S4 e(4); - S5 g(5); - S3 m; - S6 n(2); - int i; - int &j = i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate // expected-error {{expected '(' after 'lastprivate'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate() // expected-error {{expected expression}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argc) - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(S1) // expected-error {{'S1' does not refer to a value}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(a, b, c, d, f) // expected-error {{lastprivate variable with incomplete type 'S1'}} expected-error 3 {{shared variable cannot be lastprivate}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(argv[1]) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(2 * 2) // expected-error {{expected variable name}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(ba) - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(ca) // expected-error {{shared variable cannot be lastprivate}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(da) // expected-error {{shared variable cannot be lastprivate}} - for (i = 0; i < argc; ++i) - foo(); - int xa; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(xa) // OK - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(S2::S2s) // expected-error {{shared variable cannot be lastprivate}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(S2::S2sc) // expected-error {{shared variable cannot be lastprivate}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp distribute parallel for'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(m) // expected-error {{'operator=' is a private member of 'S3'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(B::x) // expected-error {{threadprivate or thread local variable cannot be lastprivate}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(xa), lastprivate(xa) // expected-error {{private variable cannot be lastprivate}} expected-note {{defined as private}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(i) - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(xa) - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(xa) - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(j) - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(m) lastprivate(m) // expected-error {{'operator=' is a private member of 'S3'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(n) firstprivate(n) // OK - for (i = 0; i < argc; ++i) - foo(); - static int si; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for lastprivate(si) // OK - for (i = 0; i < argc; ++i) - si = i + 1; - return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}} -} diff --git a/test/OpenMP/distribute_parallel_for_num_threads_messages.cpp b/test/OpenMP/distribute_parallel_for_num_threads_messages.cpp deleted file mode 100644 index 7939514249..0000000000 --- a/test/OpenMP/distribute_parallel_for_num_threads_messages.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s - -void foo() { -} - -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note {{declared here}} - -template <class T, typename S, int N> // expected-note {{declared here}} -T tmain(T argc, S **argv) { - T i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads // expected-error {{expected '(' after 'num_threads'}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads () // expected-error {{expected expression}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (argc)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads ((argc > 0) ? argv[1] : argv[2]) // expected-error 2 {{expression must have integral or unscoped enumeration type, not 'char *'}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (foobool(argc)), num_threads (true), num_threads (-5) // expected-error 2 {{directive '#pragma omp distribute parallel for' cannot contain more than one 'num_threads' clause}} expected-error {{argument to 'num_threads' clause must be a strictly positive integer value}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (S) // expected-error {{'S' does not refer to a value}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error 2 {{expression must have integral or unscoped enumeration type, not 'char *'}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (argc) - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (N) // expected-error {{argument to 'num_threads' clause must be a strictly positive integer value}} - for (i = 0; i < argc; ++i) foo(); - - return argc; -} - -int main(int argc, char **argv) { - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads // expected-error {{expected '(' after 'num_threads'}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads () // expected-error {{expected expression}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (argc)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (argc > 0 ? argv[1] : argv[2]) // expected-error {{integral }} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (foobool(argc)), num_threads (true), num_threads (-5) // expected-error 2 {{directive '#pragma omp distribute parallel for' cannot contain more than one 'num_threads' clause}} expected-error {{argument to 'num_threads' clause must be a strictly positive integer value}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (S1) // expected-error {{'S1' does not refer to a value}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expression must have integral or unscoped enumeration type, not 'char *'}} - for (i = 0; i < argc; ++i) foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for num_threads (num_threads(tmain<int, char, -1>(argc, argv) // expected-error 2 {{expected ')'}} expected-note 2 {{to match this '('}} expected-note {{in instantiation of function template specialization 'tmain<int, char, -1>' requested here}} - for (i = 0; i < argc; ++i) foo(); - - return tmain<int, char, 3>(argc, argv); // expected-note {{in instantiation of function template specialization 'tmain<int, char, 3>' requested here}} -} diff --git a/test/OpenMP/distribute_parallel_for_private_messages.cpp b/test/OpenMP/distribute_parallel_for_private_messages.cpp deleted file mode 100644 index 465357a433..0000000000 --- a/test/OpenMP/distribute_parallel_for_private_messages.cpp +++ /dev/null @@ -1,315 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp %s - -void foo() { -} - -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}} -extern S1 a; -class S2 { - mutable int a; - -public: - S2() : a(0) {} -}; -const S2 b; -const S2 ba[5]; -class S3 { - int a; - -public: - S3() : a(0) {} -}; -const S3 ca[5]; -class S4 { - int a; - S4(); // expected-note {{implicitly declared private here}} - -public: - S4(int v) : a(v) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) - for (int k = 0; k < v; ++k) - ++this->a; - } -}; -class S5 { - int a; - S5() : a(0) {} // expected-note {{implicitly declared private here}} - -public: - S5(int v) : a(v) {} - S5 &operator=(S5 &s) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} - for (int k = 0; k < s.a; ++k) - ++s.a; - return *this; - } -}; - -template <typename T> -class S6 { -public: - T a; - - S6() : a(0) {} - S6(T v) : a(v) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) - for (int k = 0; k < v; ++k) - ++this->a; - } - S6 &operator=(S6 &s) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} - for (int k = 0; k < s.a; ++k) - ++s.a; - return *this; - } -}; - -template <typename T> -class S7 : public T { - T a; - S7() : a(0) {} - -public: - S7(T v) : a(v) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) private(T::a) - for (int k = 0; k < a.a; ++k) - ++this->a.a; - } - S7 &operator=(S7 &s) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} - for (int k = 0; k < s.a.a; ++k) - ++s.a.a; - return *this; - } -}; - -S3 h; -#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}} - -template <class I, class C> -int foomain(I argc, C **argv) { - I e(4); - I g(5); - int i; - int &j = i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private // expected-error {{expected '(' after 'private'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private() // expected-error {{expected expression}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(S1) // expected-error {{'S1' does not refer to a value}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a, b) // expected-error {{private variable with incomplete type 'S1'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argv[1]) // expected-error {{expected variable name}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(e, g) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(h) // expected-error {{threadprivate or thread local variable cannot be private}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for nowait // expected-error {{unexpected OpenMP clause 'nowait' in directive '#pragma omp distribute parallel for'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp parallel - { - int v = 0; - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i) - for (int k = 0; k < argc; ++k) { - i = k; - v += i; - } - } -#pragma omp parallel shared(i) -#pragma omp parallel private(i) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(j) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i) - for (int k = 0; k < argc; ++k) - ++k; - return 0; -} - -namespace A { -double x; -#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} -} -namespace B { -using A::x; -} - -int main(int argc, char **argv) { - S4 e(4); - S5 g(5); - S6<float> s6(0.0) , s6_0(1.0); - S7<S6<float> > s7(0.0) , s7_0(1.0); - int i; - int &j = i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private // expected-error {{expected '(' after 'private'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private() // expected-error {{expected expression}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argc) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(S1) // expected-error {{'S1' does not refer to a value}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(a, b) // expected-error {{private variable with incomplete type 'S1'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(argv[1]) // expected-error {{expected variable name}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be private}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for nowait // expected-error {{unexpected OpenMP clause 'nowait' in directive '#pragma omp distribute parallel for'}} - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp parallel - { - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i) - for (int k = 0; k < argc; ++k) - ++k; - } -#pragma omp parallel shared(i) -#pragma omp parallel private(i) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(j) - for (int k = 0; k < argc; ++k) - ++k; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i) - for (int k = 0; k < argc; ++k) - ++k; - static int m; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(m) - for (int k = 0; k < argc; ++k) - m = k + 2; - - s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} - s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} - return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} -} - diff --git a/test/OpenMP/distribute_parallel_for_proc_bind_messages.cpp b/test/OpenMP/distribute_parallel_for_proc_bind_messages.cpp deleted file mode 100644 index 9898f9dc65..0000000000 --- a/test/OpenMP/distribute_parallel_for_proc_bind_messages.cpp +++ /dev/null @@ -1,101 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s - -void foo(); - -template <class T, typename S, int N> -T tmain(T argc, S **argv) { - T i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind // expected-error {{expected '(' after 'proc_bind'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind( // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind() // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'proc_bind' clause}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(x) // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} - for (i = 0; i < argc; ++i) - foo(); - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(master) - for (i = 0; i < argc; ++i) - foo(); - -#pragma omp parallel proc_bind(close) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(spread) - for (i = 0; i < argc; ++i) - foo(); - - return T(); -} - -int main(int argc, char **argv) { - int i; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind // expected-error {{expected '(' after 'proc_bind'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind( // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind() // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp distribute parallel for' cannot contain more than one 'proc_bind' clause}} - for (i = 0; i < argc; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(x) // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} - for (i = 0; i < argc; ++i) - foo(); - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(master) - for (i = 0; i < argc; ++i) - foo(); - -#pragma omp parallel proc_bind(close) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for proc_bind(spread) - for (i = 0; i < argc; ++i) - foo(); - return tmain<int, char, 3>(argc, argv); -} diff --git a/test/OpenMP/distribute_parallel_for_reduction_messages.cpp b/test/OpenMP/distribute_parallel_for_reduction_messages.cpp deleted file mode 100644 index f23a25e28c..0000000000 --- a/test/OpenMP/distribute_parallel_for_reduction_messages.cpp +++ /dev/null @@ -1,441 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 150 -o - %s -// RUN: %clang_cc1 -verify -fopenmp -std=c++98 -ferror-limit 150 -o - %s -// RUN: %clang_cc1 -verify -fopenmp -std=c++11 -ferror-limit 150 -o - %s - -void foo() { -} - -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note {{declared here}} expected-note 4 {{forward declaration of 'S1'}} -extern S1 a; -class S2 { - mutable int a; - S2 &operator+(const S2 &arg) { return (*this); } // expected-note 3 {{implicitly declared private here}} - -public: - S2() : a(0) {} - S2(S2 &s2) : a(s2.a) {} - static float S2s; // expected-note 2 {{static data member is predetermined as shared}} - static const float S2sc; -}; -const float S2::S2sc = 0; // expected-note 2 {{'S2sc' defined here}} -S2 b; // expected-note 3 {{'b' defined here}} -const S2 ba[5]; // expected-note 2 {{'ba' defined here}} -class S3 { - int a; - -public: - int b; - S3() : a(0) {} - S3(const S3 &s3) : a(s3.a) {} - S3 operator+(const S3 &arg1) { return arg1; } -}; -int operator+(const S3 &arg1, const S3 &arg2) { return 5; } -S3 c; // expected-note 3 {{'c' defined here}} -const S3 ca[5]; // expected-note 2 {{'ca' defined here}} -extern const int f; // expected-note 4 {{'f' declared here}} -class S4 { - int a; - S4(); // expected-note {{implicitly declared private here}} - S4(const S4 &s4); - S4 &operator+(const S4 &arg) { return (*this); } - -public: - S4(int v) : a(v) {} -}; -S4 &operator&=(S4 &arg1, S4 &arg2) { return arg1; } -class S5 { - int a; - S5() : a(0) {} // expected-note {{implicitly declared private here}} - S5(const S5 &s5) : a(s5.a) {} - S5 &operator+(const S5 &arg); - -public: - S5(int v) : a(v) {} -}; -class S6 { // expected-note 3 {{candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const S6' for 1st argument}} -#if __cplusplus >= 201103L // C++11 or later -// expected-note@-2 3 {{candidate function (the implicit move assignment operator) not viable}} -#endif - int a; - -public: - S6() : a(6) {} - operator int() { return 6; } -} o; - -S3 h, k; -#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}} - -template <class T> // expected-note {{declared here}} -T tmain(T argc) { - const T d = T(); // expected-note 4 {{'d' defined here}} - const T da[5] = {T()}; // expected-note 2 {{'da' defined here}} - T qa[5] = {T()}; - T i; - T &j = i; // expected-note 4 {{'j' defined here}} - S3 &p = k; // expected-note 2 {{'p' defined here}} - const T &r = da[(int)i]; // expected-note 2 {{'r' defined here}} - T &q = qa[(int)i]; // expected-note 2 {{'q' defined here}} - T fl; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction // expected-error {{expected '(' after 'reduction'}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction + // expected-error {{expected '(' after 'reduction'}} expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction( // expected-error {{expected unqualified-id}} expected-warning {{missing ':' after reduction identifier - ignoring}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(- // expected-warning {{missing ':' after reduction identifier - ignoring}} expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction() // expected-error {{expected unqualified-id}} expected-warning {{missing ':' after reduction identifier - ignoring}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(*) // expected-warning {{missing ':' after reduction identifier - ignoring}} expected-error {{expected expression}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(\) // expected-error {{expected unqualified-id}} expected-warning {{missing ':' after reduction identifier - ignoring}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(& : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{invalid operands to binary expression ('float' and 'float')}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(| : argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{invalid operands to binary expression ('float' and 'float')}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(|| : argc ? i : argc) // expected-error 2 {{expected variable name, array element or array section}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(foo : argc) //expected-error {{incorrect reduction identifier, expected one of '+', '-', '*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type 'float'}} expected-error {{incorrect reduction identifier, expected one of '+', '-', '*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type 'int'}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(&& : argc) - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(^ : T) // expected-error {{'T' does not refer to a value}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : a, b, c, d, f) // expected-error {{a reduction list item with incomplete type 'S1'}} expected-error 3 {{const-qualified list item cannot be reduction}} expected-error 2 {{'operator+' is a private member of 'S2'}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(min : a, b, c, d, f) // expected-error {{a reduction list item with incomplete type 'S1'}} expected-error 4 {{arguments of OpenMP clause 'reduction' for 'min' or 'max' must be of arithmetic type}} expected-error 3 {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(max : h.b) // expected-error {{expected variable name, array element or array section}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : ba) // expected-error {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(* : ca) // expected-error {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(- : da) // expected-error {{const-qualified list item cannot be reduction}} expected-error {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(^ : fl) // expected-error {{invalid operands to binary expression ('float' and 'float')}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(&& : S2::S2s) // expected-error {{shared variable cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(&& : S2::S2sc) // expected-error {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : h, k) // expected-error {{threadprivate or thread local variable cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : o) // expected-error 2 {{no viable overloaded '='}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i), reduction(+ : j), reduction(+ : q) // expected-error 4 {{argument of OpenMP clause 'reduction' must reference the same object in all threads}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp parallel private(k) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : p), reduction(+ : p) // expected-error 2 {{argument of OpenMP clause 'reduction' must reference the same object in all threads}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : p), reduction(+ : p) // expected-error 2 {{variable can appear only once in OpenMP 'reduction' clause}} expected-note 2 {{previously referenced here}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : r) // expected-error 2 {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp parallel shared(i) -#pragma omp parallel reduction(min : i) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(max : j) // expected-error 2 {{argument of OpenMP clause 'reduction' must reference the same object in all threads}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp parallel private(fl) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : fl) - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp parallel reduction(* : fl) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : fl) - for (int i = 0; i < 10; ++i) - foo(); - - return T(); -} - -namespace A { -double x; -#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} -} -namespace B { -using A::x; -} - -int main(int argc, char **argv) { - const int d = 5; // expected-note 2 {{'d' defined here}} - const int da[5] = {0}; // expected-note {{'da' defined here}} - int qa[5] = {0}; - S4 e(4); - S5 g(5); - int i; - int &j = i; // expected-note 2 {{'j' defined here}} - S3 &p = k; // expected-note 2 {{'p' defined here}} - const int &r = da[i]; // expected-note {{'r' defined here}} - int &q = qa[i]; // expected-note {{'q' defined here}} - float fl; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction // expected-error {{expected '(' after 'reduction'}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction + // expected-error {{expected '(' after 'reduction'}} expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction( // expected-error {{expected unqualified-id}} expected-warning {{missing ':' after reduction identifier - ignoring}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(- // expected-warning {{missing ':' after reduction identifier - ignoring}} expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction() // expected-error {{expected unqualified-id}} expected-warning {{missing ':' after reduction identifier - ignoring}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(*) // expected-warning {{missing ':' after reduction identifier - ignoring}} expected-error {{expected expression}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(\) // expected-error {{expected unqualified-id}} expected-warning {{missing ':' after reduction identifier - ignoring}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(foo : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{incorrect reduction identifier, expected one of '+', '-', '*', '&', '|', '^', '&&', '||', 'min' or 'max'}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(| : argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(|| : argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name, array element or array section}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(~ : argc) // expected-error {{expected unqualified-id}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(&& : argc) - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(^ : S1) // expected-error {{'S1' does not refer to a value}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : a, b, c, d, f) // expected-error {{a reduction list item with incomplete type 'S1'}} expected-error 2 {{const-qualified list item cannot be reduction}} expected-error {{'operator+' is a private member of 'S2'}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(min : a, b, c, d, f) // expected-error {{a reduction list item with incomplete type 'S1'}} expected-error 2 {{arguments of OpenMP clause 'reduction' for 'min' or 'max' must be of arithmetic type}} expected-error 2 {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(max : h.b) // expected-error {{expected variable name, array element or array section}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : ba) // expected-error {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(* : ca) // expected-error {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(- : da) // expected-error {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(^ : fl) // expected-error {{invalid operands to binary expression ('float' and 'float')}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(&& : S2::S2s) // expected-error {{shared variable cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(&& : S2::S2sc) // expected-error {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(& : e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{invalid operands to binary expression ('S4' and 'S4')}} expected-error {{calling a private constructor of class 'S5'}} expected-error {{invalid operands to binary expression ('S5' and 'S5')}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : h, k, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : o) // expected-error {{no viable overloaded '='}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i), reduction(+ : j), reduction(+ : q) // expected-error 2 {{argument of OpenMP clause 'reduction' must reference the same object in all threads}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp parallel private(k) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : p), reduction(+ : p) // expected-error 2 {{argument of OpenMP clause 'reduction' must reference the same object in all threads}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : p), reduction(+ : p) // expected-error {{variable can appear only once in OpenMP 'reduction' clause}} expected-note {{previously referenced here}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : r) // expected-error {{const-qualified list item cannot be reduction}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp parallel shared(i) -#pragma omp parallel reduction(min : i) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(max : j) // expected-error {{argument of OpenMP clause 'reduction' must reference the same object in all threads}} - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp parallel private(fl) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : fl) - for (int i = 0; i < 10; ++i) - foo(); -#pragma omp parallel reduction(* : fl) -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : fl) - for (int i = 0; i < 10; ++i) - foo(); - static int m; -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for reduction(+ : m) // OK - for (int i = 0; i < 10; ++i) - m++; - - return tmain(argc) + tmain(fl); // expected-note {{in instantiation of function template specialization 'tmain<int>' requested here}} expected-note {{in instantiation of function template specialization 'tmain<float>' requested here}} -} diff --git a/test/OpenMP/distribute_parallel_for_schedule_messages.cpp b/test/OpenMP/distribute_parallel_for_schedule_messages.cpp deleted file mode 100644 index 6363cd7cae..0000000000 --- a/test/OpenMP/distribute_parallel_for_schedule_messages.cpp +++ /dev/null @@ -1,151 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp %s - -void foo() { -} - -bool foobool(int argc) { - return argc; -} - -struct S1; // expected-note {{declared here}} - -template <class T, typename S, int N, int ST> // expected-note {{declared here}} -T tmain(T argc, S **argv) { -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule // expected-error {{expected '(' after 'schedule'}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule ( // expected-error {{expected 'static', 'dynamic', 'guided', 'auto', 'runtime', 'monotonic', 'nonmonotonic' or 'simd' in OpenMP clause 'schedule'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule () // expected-error {{expected 'static', 'dynamic', 'guided', 'auto', 'runtime', 'monotonic', 'nonmonotonic' or 'simd' in OpenMP clause 'schedule'}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (auto // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (auto_dynamic // expected-error {{expected 'static', 'dynamic', 'guided', 'auto', 'runtime', 'monotonic', 'nonmonotonic' or 'simd' in OpenMP clause 'schedule'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (auto, // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (runtime, 3) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (guided argc - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - // expected-error@+3 2 {{argument to 'schedule' clause must be a strictly positive integer value}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (static, ST // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (dynamic, 1)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (guided, (ST > 0) ? 1 + ST : 2) - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - // expected-error@+4 2 {{directive '#pragma omp distribute parallel for' cannot contain more than one 'schedule' clause}} - // expected-error@+3 {{argument to 'schedule' clause must be a strictly positive integer value}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (static, foobool(argc)), schedule (dynamic, true), schedule (guided, -5) - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (static, S) // expected-error {{'S' does not refer to a value}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - // expected-error@+3 2 {{expression must have integral or unscoped enumeration type, not 'char *'}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (guided, argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (dynamic, 1) - for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (static, N) // expected-error {{argument to 'schedule' clause must be a strictly positive integer value}} - for (T i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; - return argc; -} - -int main(int argc, char **argv) { - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule // expected-error {{expected '(' after 'schedule'}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule ( // expected-error {{expected 'static', 'dynamic', 'guided', 'auto', 'runtime', 'monotonic', 'nonmonotonic' or 'simd' in OpenMP clause 'schedule'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule () // expected-error {{expected 'static', 'dynamic', 'guided', 'auto', 'runtime', 'monotonic', 'nonmonotonic' or 'simd' in OpenMP clause 'schedule'}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (auto // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (auto_dynamic // expected-error {{expected 'static', 'dynamic', 'guided', 'auto', 'runtime', 'monotonic', 'nonmonotonic' or 'simd' in OpenMP clause 'schedule'}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (auto, // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (runtime, 3) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (guided, 4 // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (static, 2+2)) // expected-warning {{extra tokens at the end of '#pragma omp distribute parallel for' are ignored}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (dynamic, foobool(1) > 0 ? 1 : 2) - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - // expected-error@+4 2 {{directive '#pragma omp distribute parallel for' cannot contain more than one 'schedule' clause}} - // expected-error@+3 {{argument to 'schedule' clause must be a strictly positive integer value}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (guided, foobool(argc)), schedule (static, true), schedule (dynamic, -5) - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (guided, S1) // expected-error {{'S1' does not refer to a value}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - // expected-error@+3 {{expression must have integral or unscoped enumeration type, not 'char *'}} - #pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule (static, argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} - for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4]; - // expected-error@+5 {{statement after '#pragma omp distribute parallel for' must be a for loop}} - // expected-note@+3 {{in instantiation of function template specialization 'tmain<int, char, -1, -2>' requested here}} -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for schedule(dynamic, schedule(tmain<int, char, -1, -2>(argc, argv) // expected-error 2 {{expected ')'}} expected-note 2 {{to match this '('}} - foo(); - // expected-note@+1 {{in instantiation of function template specialization 'tmain<int, char, 1, 0>' requested here}} - return tmain<int, char, 1, 0>(argc, argv); -} - diff --git a/test/OpenMP/distribute_parallel_for_shared_messages.cpp b/test/OpenMP/distribute_parallel_for_shared_messages.cpp deleted file mode 100644 index d5725e7f1b..0000000000 --- a/test/OpenMP/distribute_parallel_for_shared_messages.cpp +++ /dev/null @@ -1,396 +0,0 @@ -// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s - - -struct S1; // expected-note 2 {{declared here}} -extern S1 a; -class S2 { - mutable int a; -public: - S2():a(0) { } - S2(S2 &s2):a(s2.a) { } -}; -const S2 b; -const S2 ba[5]; -class S3 { - int a; -public: - S3():a(0) { } - S3(S3 &s3):a(s3.a) { } -}; -const S3 c; -const S3 ca[5]; -extern const int f; -class S4 { - int a; - S4(); - S4(const S4 &s4); -public: - S4(int v):a(v) { } -}; -class S5 { - int a; - S5():a(0) {} - S5(const S5 &s5):a(s5.a) { } -public: - S5(int v):a(v) { } -}; - -S3 h; -#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}} - -namespace A { -double x; -#pragma omp threadprivate(x) // expected-note 2 {{defined as threadprivate or thread local}} -} -namespace B { -using A::x; -} - -template <class T, typename S, int N> -T tmain(T argc, S **argv) { - const int d = 5; - const int da[5] = { 0 }; - S4 e(4); - S5 g(5); - int i; - int &j = i; - int acc = 0; - int n = 1000; - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared // expected-error {{expected '(' after 'shared'}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared () // expected-error {{expected expression}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argc) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (S1) // expected-error {{'S1' does not refer to a value}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (a, b, c, d, f) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argv[1]) // expected-error {{expected variable name}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(ba) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(ca) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(da) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(e, g) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be shared}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i), shared(i) // expected-error {{private variable cannot be shared}} expected-note {{defined as private}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i), shared(i) // expected-error {{firstprivate variable cannot be shared}} expected-note {{defined as firstprivate}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(i) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(j) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(i) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(j) - for(int k = 0 ; k < n ; k++) { - acc++; - } -return T(); -} - - -int main(int argc, char **argv) { - const int d = 5; - const int da[5] = { 0 }; - S4 e(4); - S5 g(5); - int i; - int &j = i; - int acc = 0; - int n = argc; - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared // expected-error {{expected '(' after 'shared'}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared () // expected-error {{expected expression}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argc) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (S1) // expected-error {{'S1' does not refer to a value}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (a, b, c, d, f) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared (argv[1]) // expected-error {{expected variable name}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(ba) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(ca) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(da) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(e, g) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be shared}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i), shared(i) // expected-error {{private variable cannot be shared}} expected-note {{defined as private}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i), shared(i) // expected-error {{firstprivate variable cannot be shared}} expected-note {{defined as firstprivate}} - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for private(i) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(i) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(j) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for firstprivate(i) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(i) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for shared(j) - for(int k = 0 ; k < n ; k++) { - acc++; - } - -return tmain<int, char, 1000>(argc, argv); // expected-note {{in instantiation of function template specialization 'tmain<int, char, 1000>' requested here}} -} diff --git a/test/OpenMP/nesting_of_regions.cpp b/test/OpenMP/nesting_of_regions.cpp index 8d884a2e61..23ba70776d 100644 --- a/test/OpenMP/nesting_of_regions.cpp +++ b/test/OpenMP/nesting_of_regions.cpp @@ -137,13 +137,7 @@ void foo() { { #pragma omp target update to(a) } -#pragma omp parallel - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } - + // SIMD DIRECTIVE #pragma omp simd for (int i = 0; i < 10; ++i) { @@ -307,12 +301,6 @@ void foo() { for (int i = 0; i < 10; ++i) { #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} } -#pragma omp simd - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}} - for (int j = 0; j < 10; ++j) - ; - } // FOR DIRECTIVE #pragma omp for @@ -500,12 +488,6 @@ void foo() { for (int i = 0; i < 10; ++i) { #pragma omp target update to(a) } -#pragma omp for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int j = 0; j < 10; ++j) - ; - } // FOR SIMD DIRECTIVE #pragma omp for simd @@ -671,12 +653,6 @@ void foo() { #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} bar(); } -#pragma omp for simd - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} - for (int j = 0; j < 10; ++j) - ; - } // SECTIONS DIRECTIVE #pragma omp sections @@ -869,12 +845,6 @@ void foo() { { #pragma omp target update to(a) } -#pragma omp sections - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // SECTION DIRECTIVE #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} @@ -1121,13 +1091,6 @@ void foo() { #pragma omp target update to(a) } } -#pragma omp sections - { -#pragma omp section -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // SINGLE DIRECTIVE #pragma omp single @@ -1306,12 +1269,6 @@ void foo() { #pragma omp target update to(a) bar(); } -#pragma omp single - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // MASTER DIRECTIVE #pragma omp master @@ -1490,12 +1447,6 @@ void foo() { #pragma omp target update to(a) bar(); } -#pragma omp master - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // CRITICAL DIRECTIVE #pragma omp critical @@ -1688,12 +1639,6 @@ void foo() { #pragma omp target update to(a) bar(); } -#pragma omp critical - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // PARALLEL FOR DIRECTIVE #pragma omp parallel for @@ -1886,12 +1831,6 @@ void foo() { for (int i = 0; i < 10; ++i) { #pragma omp target update to(a) } -#pragma omp parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int j = 0; j < 10; ++j) - ; - } // PARALLEL FOR SIMD DIRECTIVE #pragma omp parallel for simd @@ -2085,12 +2024,6 @@ void foo() { #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} bar(); } -#pragma omp parallel for simd - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} - for (int j = 0; j < 10; ++j) - ; - } // PARALLEL SECTIONS DIRECTIVE #pragma omp parallel sections @@ -2272,12 +2205,6 @@ void foo() { { #pragma omp target update to(a) } -#pragma omp parallel sections - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // TASK DIRECTIVE #pragma omp task @@ -2406,12 +2333,6 @@ void foo() { #pragma omp target update to(a) bar(); } -#pragma omp task - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // ORDERED DIRECTIVE #pragma omp ordered @@ -2611,12 +2532,6 @@ void foo() { #pragma omp target update to(a) bar(); } -#pragma omp ordered - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // ATOMIC DIRECTIVE #pragma omp atomic @@ -2838,14 +2753,6 @@ void foo() { #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}} bar(); } -#pragma omp atomic - // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} - // expected-note@+1 {{expected an expression statement}} - { -#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} - for (int i = 0; i < 10; ++i) - ; - } // TARGET DIRECTIVE #pragma omp target @@ -2984,12 +2891,6 @@ void foo() { { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}} } -#pragma omp target - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // TARGET PARALLEL DIRECTIVE #pragma omp target parallel @@ -3128,12 +3029,6 @@ void foo() { { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}} } -#pragma omp target parallel - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // TARGET PARALLEL FOR DIRECTIVE #pragma omp target parallel for @@ -3326,12 +3221,6 @@ void foo() { for (int i = 0; i < 10; ++i) { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}} } -#pragma omp target parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int j = 0; j < 10; ++j) - ; - } // TEAMS DIRECTIVE #pragma omp target @@ -3500,16 +3389,7 @@ void foo() { { #pragma omp target update to(a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target update' directive into a parallel region?}} } -#pragma omp target -#pragma omp teams - { -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) - ; -#pragma omp distribute parallel for - for (int j = 0; j < 10; ++j) - ; - } + // TASKLOOP DIRECTIVE #pragma omp taskloop for (int i = 0; i < 10; ++i) { @@ -3686,18 +3566,6 @@ void foo() { #pragma omp target update to(a) bar(); } -#pragma omp taskloop - for (int i = 0; i < 10; ++i) { -#pragma omp distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} - for (int j = 0; j < 10; ++j) - ++a; - } -#pragma omp taskloop - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int j = 0; j < 10; ++j) - ++a; - } // DISTRIBUTE DIRECTIVE @@ -3924,239 +3792,6 @@ void foo() { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}} ++a; } - -// DISTRIBUTE PARALLEL FOR DIRECTIVE -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp simd - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp sections // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}} - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp single // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}} - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp critical - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel - { -#pragma omp single - { - bar(); - } - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel for - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel for simd - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel sections - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp task - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp taskyield - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}} - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp taskwait - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp flush - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp atomic - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } } void foo() { @@ -4292,12 +3927,6 @@ void foo() { #pragma omp target update to(a) a++; } -#pragma omp parallel - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // SIMD DIRECTIVE #pragma omp simd @@ -4456,12 +4085,6 @@ void foo() { #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} a++; } -#pragma omp simd - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} - for (int j = 0; j < 10; ++j) - ; - } // FOR DIRECTIVE #pragma omp for @@ -4640,12 +4263,6 @@ void foo() { #pragma omp target update to(a) ++a; } -#pragma omp for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int j = 0; j < 10; ++j) - ; - } // FOR SIMD DIRECTIVE #pragma omp for simd @@ -4804,12 +4421,6 @@ void foo() { #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} ++a; } -#pragma omp for simd - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} - for (int j = 0; j < 10; ++j) - ; - } // SECTIONS DIRECTIVE #pragma omp sections @@ -4977,12 +4588,6 @@ void foo() { { #pragma omp target update to(a) } -#pragma omp sections - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // SECTION DIRECTIVE #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} @@ -5239,13 +4844,6 @@ void foo() { a++; } } -#pragma omp sections - { -#pragma omp section -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // SINGLE DIRECTIVE #pragma omp single @@ -5414,12 +5012,6 @@ void foo() { #pragma omp target update to(a) a++; } -#pragma omp single - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // MASTER DIRECTIVE #pragma omp master @@ -5598,12 +5190,6 @@ void foo() { #pragma omp target update to(a) ++a; } -#pragma omp master - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // CRITICAL DIRECTIVE #pragma omp critical @@ -5801,12 +5387,6 @@ void foo() { #pragma omp target update to(a) a++; } -#pragma omp critical - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // PARALLEL FOR DIRECTIVE #pragma omp parallel for @@ -6000,12 +5580,6 @@ void foo() { #pragma omp target update to(a) a++; } -#pragma omp parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int j = 0; j < 10; ++j) - ; - } // PARALLEL FOR SIMD DIRECTIVE #pragma omp parallel for simd @@ -6199,12 +5773,6 @@ void foo() { #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} a++; } -#pragma omp parallel for simd - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} - for (int j = 0; j < 10; ++j) - ; - } // PARALLEL SECTIONS DIRECTIVE #pragma omp parallel sections @@ -6382,12 +5950,6 @@ void foo() { { #pragma omp target update to(a) } -#pragma omp parallel sections - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // TASK DIRECTIVE #pragma omp task @@ -6515,12 +6077,6 @@ void foo() { #pragma omp target update to(a) a++; } -#pragma omp task - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // ATOMIC DIRECTIVE #pragma omp atomic @@ -6741,14 +6297,6 @@ void foo() { { #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}} } -#pragma omp atomic - // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} - // expected-note@+1 {{expected an expression statement}} - { -#pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}} - for (int i = 0; i < 10; ++i) - ; - } // TARGET DIRECTIVE #pragma omp target @@ -6890,12 +6438,6 @@ void foo() { #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}} a++; } -#pragma omp target - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // TARGET PARALLEL DIRECTIVE #pragma omp target parallel @@ -7034,12 +6576,6 @@ void foo() { { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}} } -#pragma omp target parallel - { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // TARGET PARALLEL FOR DIRECTIVE @@ -7234,12 +6770,6 @@ void foo() { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}} a++; } -#pragma omp target parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int j = 0; j < 10; ++j) - ; - } // TEAMS DIRECTIVE #pragma omp target @@ -7407,21 +6937,7 @@ void foo() { #pragma omp target update to(a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target update' directive into a parallel region?}} ++a; } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) - ; -#pragma omp target -#pragma omp teams - { -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) - ; -#pragma omp distribute parallel for - for (int j = 0; j < 10; ++j) - ; - } + // TASKLOOP DIRECTIVE #pragma omp taskloop for (int i = 0; i < 10; ++i) { @@ -7598,18 +7114,6 @@ void foo() { #pragma omp target update to(a) ++a; } -#pragma omp taskloop - for (int i = 0; i < 10; ++i) { -#pragma omp distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp taskloop - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } // DISTRIBUTE DIRECTIVE #pragma omp target @@ -7836,247 +7340,4 @@ void foo() { #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}} ++a; } -#pragma omp target -#pragma omp teams -#pragma omp distribute - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ++a; - } - - // DISTRIBUTE PARALLEL FOR DIRECTIVE -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } - -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp simd - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp sections // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}} - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp single // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}} - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp critical - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel - { -#pragma omp single - { - bar(); - } - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel for - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel for simd - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp parallel sections - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp task - { - bar(); - } - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp taskyield - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}} - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp taskwait - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp flush - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} - bar(); - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp atomic - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}} - for (int i = 0; i < 10; ++i) - ; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} - ++a; - } - return foo<int>(); -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } -#pragma omp target -#pragma omp teams -#pragma omp distribute parallel for - for (int i = 0; i < 10; ++i) { -#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}} - ++a; - } } diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 43d8edc3fe..a0bb7d52cb 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -1959,8 +1959,6 @@ public: void VisitOMPTaskLoopDirective(const OMPTaskLoopDirective *D); void VisitOMPTaskLoopSimdDirective(const OMPTaskLoopSimdDirective *D); void VisitOMPDistributeDirective(const OMPDistributeDirective *D); - void VisitOMPDistributeParallelForDirective( - const OMPDistributeParallelForDirective *D); private: void AddDeclarationNameInfo(const Stmt *S); @@ -2714,11 +2712,6 @@ void EnqueueVisitor::VisitOMPDistributeDirective( VisitOMPLoopDirective(D); } -void EnqueueVisitor::VisitOMPDistributeParallelForDirective( - const OMPDistributeParallelForDirective *D) { - VisitOMPLoopDirective(D); -} - void CursorVisitor::EnqueueWorkList(VisitorWorkList &WL, const Stmt *S) { EnqueueVisitor(WL, MakeCXCursor(S, StmtParent, TU,RegionOfInterest)).Visit(S); } @@ -4832,8 +4825,6 @@ CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) { return cxstring::createRef("OMPTaskLoopSimdDirective"); case CXCursor_OMPDistributeDirective: return cxstring::createRef("OMPDistributeDirective"); - case CXCursor_OMPDistributeParallelForDirective: - return cxstring::createRef("OMPDistributeParallelForDirective"); case CXCursor_OverloadCandidate: return cxstring::createRef("OverloadCandidate"); case CXCursor_TypeAliasTemplateDecl: diff --git a/tools/libclang/CXCursor.cpp b/tools/libclang/CXCursor.cpp index 28f37d8959..075ff291d1 100644 --- a/tools/libclang/CXCursor.cpp +++ b/tools/libclang/CXCursor.cpp @@ -633,9 +633,6 @@ CXCursor cxcursor::MakeCXCursor(const Stmt *S, const Decl *Parent, case Stmt::OMPDistributeDirectiveClass: K = CXCursor_OMPDistributeDirective; break; - case Stmt::OMPDistributeParallelForDirectiveClass: - K = CXCursor_OMPDistributeParallelForDirective; - break; } CXCursor C = { K, 0, { Parent, S, TU } }; |