<div dir="ltr"><div>I have reviewed this while reviewing: <br><h2>r212516 - [OPENMP] Parsing and sema analysis for 'omp parallel sections' directive.</h2><span><table cellpadding="0">
<tbody><tr><td style="background-color:rgb(221,221,221);color:rgb(102,102,102)"><br></td><td style="background-color:rgb(221,221,221);color:rgb(102,102,102)"><br></td></tr></tbody></table></span><br>
</div>All the code is a similar pattern and looks good.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jun 20, 2014 at 7:19 AM, Alexey Bataev <span dir="ltr"><<a href="mailto:a.bataev@hotmail.com" target="_blank">a.bataev@hotmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: abataev<br>
Date: Fri Jun 20 06:19:47 2014<br>
New Revision: 211352<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=211352&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=211352&view=rev</a><br>
Log:<br>
[OPENMP] Initial support for 'nowait' clause.<br>
<br>
Modified:<br>
cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h<br>
cfe/trunk/include/clang/AST/OpenMPClause.h<br>
cfe/trunk/include/clang/AST/RecursiveASTVisitor.h<br>
cfe/trunk/include/clang/Basic/OpenMPKinds.def<br>
cfe/trunk/include/clang/Sema/Sema.h<br>
cfe/trunk/lib/AST/StmtPrinter.cpp<br>
cfe/trunk/lib/AST/StmtProfile.cpp<br>
cfe/trunk/lib/Basic/OpenMPKinds.cpp<br>
cfe/trunk/lib/Parse/ParseOpenMP.cpp<br>
cfe/trunk/lib/Sema/SemaOpenMP.cpp<br>
cfe/trunk/lib/Sema/TreeTransform.h<br>
cfe/trunk/lib/Serialization/ASTReaderStmt.cpp<br>
cfe/trunk/lib/Serialization/ASTWriterStmt.cpp<br>
cfe/trunk/test/OpenMP/for_ast_print.cpp<br>
cfe/trunk/tools/libclang/CIndex.cpp<br>
<br>
Modified: cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h (original)<br>
+++ cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h Fri Jun 20 06:19:47 2014<br>
@@ -2357,6 +2357,11 @@ RecursiveASTVisitor<Derived>::VisitOMPOr<br>
}<br>
<br>
template <typename Derived><br>
+bool RecursiveASTVisitor<Derived>::VisitOMPNowaitClause(OMPNowaitClause *) {<br>
+ return true;<br>
+}<br>
+<br>
+template <typename Derived><br>
template <typename T><br>
void RecursiveASTVisitor<Derived>::VisitOMPClauseList(T *Node) {<br>
for (auto *I : Node->varlists())<br>
<br>
Modified: cfe/trunk/include/clang/AST/OpenMPClause.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/OpenMPClause.h?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/OpenMPClause.h?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/AST/OpenMPClause.h (original)<br>
+++ cfe/trunk/include/clang/AST/OpenMPClause.h Fri Jun 20 06:19:47 2014<br>
@@ -629,6 +629,35 @@ public:<br>
StmtRange children() { return StmtRange(); }<br>
};<br>
<br>
+/// \brief This represents 'nowait' clause in the '#pragma omp ...' directive.<br>
+///<br>
+/// \code<br>
+/// #pragma omp for nowait<br>
+/// \endcode<br>
+/// In this example directive '#pragma omp for' has 'nowait' clause.<br>
+///<br>
+class OMPNowaitClause : public OMPClause {<br>
+public:<br>
+ /// \brief Build 'nowait' clause.<br>
+ ///<br>
+ /// \param StartLoc Starting location of the clause.<br>
+ /// \param EndLoc Ending location of the clause.<br>
+ ///<br>
+ OMPNowaitClause(SourceLocation StartLoc, SourceLocation EndLoc)<br>
+ : OMPClause(OMPC_nowait, StartLoc, EndLoc) {}<br>
+<br>
+ /// \brief Build an empty clause.<br>
+ ///<br>
+ OMPNowaitClause()<br>
+ : OMPClause(OMPC_nowait, SourceLocation(), SourceLocation()) {}<br>
+<br>
+ static bool classof(const OMPClause *T) {<br>
+ return T->getClauseKind() == OMPC_nowait;<br>
+ }<br>
+<br>
+ StmtRange children() { return StmtRange(); }<br>
+};<br>
+<br>
/// \brief This represents clause 'private' in the '#pragma omp ...' directives.<br>
///<br>
/// \code<br>
<br>
Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)<br>
+++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Fri Jun 20 06:19:47 2014<br>
@@ -2378,6 +2378,11 @@ RecursiveASTVisitor<Derived>::VisitOMPOr<br>
}<br>
<br>
template <typename Derived><br>
+bool RecursiveASTVisitor<Derived>::VisitOMPNowaitClause(OMPNowaitClause *) {<br>
+ return true;<br>
+}<br>
+<br>
+template <typename Derived><br>
template <typename T><br>
void RecursiveASTVisitor<Derived>::VisitOMPClauseList(T *Node) {<br>
for (auto *I : Node->varlists())<br>
<br>
Modified: cfe/trunk/include/clang/Basic/OpenMPKinds.def<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/OpenMPKinds.def?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/OpenMPKinds.def?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Basic/OpenMPKinds.def (original)<br>
+++ cfe/trunk/include/clang/Basic/OpenMPKinds.def Fri Jun 20 06:19:47 2014<br>
@@ -61,6 +61,7 @@ OPENMP_CLAUSE(copyin, OMPCopyinClause)<br>
OPENMP_CLAUSE(proc_bind, OMPProcBindClause)<br>
OPENMP_CLAUSE(schedule, OMPScheduleClause)<br>
OPENMP_CLAUSE(ordered, OMPOrderedClause)<br>
+OPENMP_CLAUSE(nowait, OMPNowaitClause)<br>
<br>
// Clauses allowed for OpenMP directive 'parallel'.<br>
OPENMP_PARALLEL_CLAUSE(if)<br>
@@ -89,6 +90,7 @@ OPENMP_FOR_CLAUSE(reduction)<br>
OPENMP_FOR_CLAUSE(collapse)<br>
OPENMP_FOR_CLAUSE(schedule)<br>
OPENMP_FOR_CLAUSE(ordered)<br>
+OPENMP_FOR_CLAUSE(nowait)<br>
<br>
// Static attributes for 'default' clause.<br>
OPENMP_DEFAULT_KIND(none)<br>
<br>
Modified: cfe/trunk/include/clang/Sema/Sema.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Sema/Sema.h (original)<br>
+++ cfe/trunk/include/clang/Sema/Sema.h Fri Jun 20 06:19:47 2014<br>
@@ -7386,6 +7386,9 @@ public:<br>
/// \brief Called on well-formed 'ordered' clause.<br>
OMPClause *ActOnOpenMPOrderedClause(SourceLocation StartLoc,<br>
SourceLocation EndLoc);<br>
+ /// \brief Called on well-formed 'nowait' clause.<br>
+ OMPClause *ActOnOpenMPNowaitClause(SourceLocation StartLoc,<br>
+ SourceLocation EndLoc);<br>
<br>
OMPClause *<br>
ActOnOpenMPVarListClause(OpenMPClauseKind Kind, ArrayRef<Expr *> Vars,<br>
<br>
Modified: cfe/trunk/lib/AST/StmtPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/AST/StmtPrinter.cpp (original)<br>
+++ cfe/trunk/lib/AST/StmtPrinter.cpp Fri Jun 20 06:19:47 2014<br>
@@ -642,6 +642,10 @@ void OMPClausePrinter::VisitOMPOrderedCl<br>
OS << "ordered";<br>
}<br>
<br>
+void OMPClausePrinter::VisitOMPNowaitClause(OMPNowaitClause *) {<br>
+ OS << "nowait";<br>
+}<br>
+<br>
template<typename T><br>
void OMPClausePrinter::VisitOMPClauseList(T *Node, char StartSym) {<br>
for (typename T::varlist_iterator I = Node->varlist_begin(),<br>
<br>
Modified: cfe/trunk/lib/AST/StmtProfile.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/AST/StmtProfile.cpp (original)<br>
+++ cfe/trunk/lib/AST/StmtProfile.cpp Fri Jun 20 06:19:47 2014<br>
@@ -295,6 +295,8 @@ void OMPClauseProfiler::VisitOMPSchedule<br>
<br>
void OMPClauseProfiler::VisitOMPOrderedClause(const OMPOrderedClause *) {}<br>
<br>
+void OMPClauseProfiler::VisitOMPNowaitClause(const OMPNowaitClause *) {}<br>
+<br>
template<typename T><br>
void OMPClauseProfiler::VisitOMPClauseList(T *Node) {<br>
for (auto *I : Node->varlists())<br>
<br>
Modified: cfe/trunk/lib/Basic/OpenMPKinds.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/OpenMPKinds.cpp?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/OpenMPKinds.cpp?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Basic/OpenMPKinds.cpp (original)<br>
+++ cfe/trunk/lib/Basic/OpenMPKinds.cpp Fri Jun 20 06:19:47 2014<br>
@@ -96,6 +96,7 @@ unsigned clang::getOpenMPSimpleClauseTyp<br>
case OMPC_aligned:<br>
case OMPC_copyin:<br>
case OMPC_ordered:<br>
+ case OMPC_nowait:<br>
break;<br>
}<br>
llvm_unreachable("Invalid OpenMP simple clause kind");<br>
@@ -149,6 +150,7 @@ const char *clang::getOpenMPSimpleClause<br>
case OMPC_aligned:<br>
case OMPC_copyin:<br>
case OMPC_ordered:<br>
+ case OMPC_nowait:<br>
break;<br>
}<br>
llvm_unreachable("Invalid OpenMP simple clause kind");<br>
<br>
Modified: cfe/trunk/lib/Parse/ParseOpenMP.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseOpenMP.cpp?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseOpenMP.cpp?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Parse/ParseOpenMP.cpp (original)<br>
+++ cfe/trunk/lib/Parse/ParseOpenMP.cpp Fri Jun 20 06:19:47 2014<br>
@@ -318,8 +318,11 @@ OMPClause *Parser::ParseOpenMPClause(Ope<br>
Clause = ParseOpenMPSingleExprWithArgClause(CKind);<br>
break;<br>
case OMPC_ordered:<br>
+ case OMPC_nowait:<br>
// OpenMP [2.7.1, Restrictions, p. 9]<br>
// Only one ordered clause can appear on a loop directive.<br>
+ // OpenMP [2.7.1, Restrictions, C/C++, p. 4]<br>
+ // Only one nowait clause can appear on a for directive.<br>
if (!FirstClause) {<br>
Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(DKind)<br>
<< getOpenMPClauseName(CKind);<br>
@@ -424,6 +427,9 @@ OMPClause *Parser::ParseOpenMPSimpleClau<br>
/// ordered-clause:<br>
/// 'ordered'<br>
///<br>
+/// nowait-clause:<br>
+/// 'nowait'<br>
+///<br>
OMPClause *Parser::ParseOpenMPClause(OpenMPClauseKind Kind) {<br>
SourceLocation Loc = Tok.getLocation();<br>
ConsumeAnyToken();<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Fri Jun 20 06:19:47 2014<br>
@@ -1523,6 +1523,7 @@ OMPClause *Sema::ActOnOpenMPSingleExprCl<br>
case OMPC_aligned:<br>
case OMPC_copyin:<br>
case OMPC_ordered:<br>
+ case OMPC_nowait:<br>
case OMPC_threadprivate:<br>
case OMPC_unknown:<br>
llvm_unreachable("Clause is not allowed.");<br>
@@ -1701,6 +1702,7 @@ OMPClause *Sema::ActOnOpenMPSimpleClause<br>
case OMPC_aligned:<br>
case OMPC_copyin:<br>
case OMPC_ordered:<br>
+ case OMPC_nowait:<br>
case OMPC_threadprivate:<br>
case OMPC_unknown:<br>
llvm_unreachable("Clause is not allowed.");<br>
@@ -1810,6 +1812,7 @@ OMPClause *Sema::ActOnOpenMPSingleExprWi<br>
case OMPC_aligned:<br>
case OMPC_copyin:<br>
case OMPC_ordered:<br>
+ case OMPC_nowait:<br>
case OMPC_threadprivate:<br>
case OMPC_unknown:<br>
llvm_unreachable("Clause is not allowed.");<br>
@@ -1881,6 +1884,9 @@ OMPClause *Sema::ActOnOpenMPClause(OpenM<br>
case OMPC_ordered:<br>
Res = ActOnOpenMPOrderedClause(StartLoc, EndLoc);<br>
break;<br>
+ case OMPC_nowait:<br>
+ Res = ActOnOpenMPNowaitClause(StartLoc, EndLoc);<br>
+ break;<br>
case OMPC_if:<br>
case OMPC_num_threads:<br>
case OMPC_safelen:<br>
@@ -1908,6 +1914,11 @@ OMPClause *Sema::ActOnOpenMPOrderedClaus<br>
return new (Context) OMPOrderedClause(StartLoc, EndLoc);<br>
}<br>
<br>
+OMPClause *Sema::ActOnOpenMPNowaitClause(SourceLocation StartLoc,<br>
+ SourceLocation EndLoc) {<br>
+ return new (Context) OMPNowaitClause(StartLoc, EndLoc);<br>
+}<br>
+<br>
OMPClause *Sema::ActOnOpenMPVarListClause(<br>
OpenMPClauseKind Kind, ArrayRef<Expr *> VarList, Expr *TailExpr,<br>
SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc,<br>
@@ -1950,6 +1961,7 @@ OMPClause *Sema::ActOnOpenMPVarListClaus<br>
case OMPC_proc_bind:<br>
case OMPC_schedule:<br>
case OMPC_ordered:<br>
+ case OMPC_nowait:<br>
case OMPC_threadprivate:<br>
case OMPC_unknown:<br>
llvm_unreachable("Clause is not allowed.");<br>
<br>
Modified: cfe/trunk/lib/Sema/TreeTransform.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/TreeTransform.h (original)<br>
+++ cfe/trunk/lib/Sema/TreeTransform.h Fri Jun 20 06:19:47 2014<br>
@@ -6507,6 +6507,13 @@ TreeTransform<Derived>::TransformOMPOrde<br>
<br>
template <typename Derived><br>
OMPClause *<br>
+TreeTransform<Derived>::TransformOMPNowaitClause(OMPNowaitClause *C) {<br>
+ // No need to rebuild this clause, no template-dependent parameters.<br>
+ return C;<br>
+}<br>
+<br>
+template <typename Derived><br>
+OMPClause *<br>
TreeTransform<Derived>::TransformOMPPrivateClause(OMPPrivateClause *C) {<br>
llvm::SmallVector<Expr *, 16> Vars;<br>
Vars.reserve(C->varlist_size());<br>
<br>
Modified: cfe/trunk/lib/Serialization/ASTReaderStmt.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderStmt.cpp?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderStmt.cpp?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Serialization/ASTReaderStmt.cpp (original)<br>
+++ cfe/trunk/lib/Serialization/ASTReaderStmt.cpp Fri Jun 20 06:19:47 2014<br>
@@ -1697,6 +1697,9 @@ OMPClause *OMPClauseReader::readClause()<br>
case OMPC_ordered:<br>
C = new (Context) OMPOrderedClause();<br>
break;<br>
+ case OMPC_nowait:<br>
+ C = new (Context) OMPNowaitClause();<br>
+ break;<br>
case OMPC_private:<br>
C = OMPPrivateClause::CreateEmpty(Context, Record[Idx++]);<br>
break;<br>
@@ -1774,6 +1777,8 @@ void OMPClauseReader::VisitOMPScheduleCl<br>
<br>
void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *) {}<br>
<br>
+void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}<br>
+<br>
void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {<br>
C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));<br>
unsigned NumVars = C->varlist_size();<br>
<br>
Modified: cfe/trunk/lib/Serialization/ASTWriterStmt.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterStmt.cpp?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterStmt.cpp?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Serialization/ASTWriterStmt.cpp (original)<br>
+++ cfe/trunk/lib/Serialization/ASTWriterStmt.cpp Fri Jun 20 06:19:47 2014<br>
@@ -1717,6 +1717,8 @@ void OMPClauseWriter::VisitOMPScheduleCl<br>
<br>
void OMPClauseWriter::VisitOMPOrderedClause(OMPOrderedClause *) {}<br>
<br>
+void OMPClauseWriter::VisitOMPNowaitClause(OMPNowaitClause *) {}<br>
+<br>
void OMPClauseWriter::VisitOMPPrivateClause(OMPPrivateClause *C) {<br>
Record.push_back(C->varlist_size());<br>
Writer->Writer.AddSourceLocation(C->getLParenLoc(), Record);<br>
<br>
Modified: cfe/trunk/test/OpenMP/for_ast_print.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_ast_print.cpp?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_ast_print.cpp?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/OpenMP/for_ast_print.cpp (original)<br>
+++ cfe/trunk/test/OpenMP/for_ast_print.cpp Fri Jun 20 06:19:47 2014<br>
@@ -20,12 +20,12 @@ T tmain(T argc) {<br>
// CHECK-NEXT: for (int i = 0; i < 2; ++i)<br>
// CHECK-NEXT: a = 2;<br>
#pragma omp parallel<br>
-#pragma omp for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered<br>
+#pragma omp for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered nowait<br>
for (int i = 0; i < 10; ++i)<br>
for (int j = 0; j < 10; ++j)<br>
foo();<br>
// CHECK-NEXT: #pragma omp parallel<br>
- // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered<br>
+ // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered nowait<br>
// CHECK-NEXT: for (int i = 0; i < 10; ++i)<br>
// CHECK-NEXT: for (int j = 0; j < 10; ++j)<br>
// CHECK-NEXT: foo();<br>
@@ -43,12 +43,12 @@ int main(int argc, char **argv) {<br>
// CHECK-NEXT: for (int i = 0; i < 2; ++i)<br>
// CHECK-NEXT: a = 2;<br>
#pragma omp parallel<br>
-#pragma omp for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) ordered<br>
+#pragma omp for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) ordered nowait<br>
for (int i = 0; i < 10; ++i)<br>
for (int j = 0; j < 10; ++j)<br>
foo();<br>
// CHECK-NEXT: #pragma omp parallel<br>
- // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) schedule(auto) ordered<br>
+ // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) schedule(auto) ordered nowait<br>
// CHECK-NEXT: for (int i = 0; i < 10; ++i)<br>
// CHECK-NEXT: for (int j = 0; j < 10; ++j)<br>
// CHECK-NEXT: foo();<br>
<br>
Modified: cfe/trunk/tools/libclang/CIndex.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=211352&r1=211351&r2=211352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=211352&r1=211351&r2=211352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/tools/libclang/CIndex.cpp (original)<br>
+++ cfe/trunk/tools/libclang/CIndex.cpp Fri Jun 20 06:19:47 2014<br>
@@ -1951,6 +1951,8 @@ void OMPClauseEnqueue::VisitOMPScheduleC<br>
<br>
void OMPClauseEnqueue::VisitOMPOrderedClause(const OMPOrderedClause *) {}<br>
<br>
+void OMPClauseEnqueue::VisitOMPNowaitClause(const OMPNowaitClause *) {}<br>
+<br>
template<typename T><br>
void OMPClauseEnqueue::VisitOMPClauseList(T *Node) {<br>
for (const auto *I : Node->varlists())<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>