<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>