On Thu, Feb 27, 2014 at 3:29 AM, Alexey Bataev <a.bat...@hotmail.com> wrote: > Author: abataev > Date: Thu Feb 27 02:29:12 2014 > New Revision: 202360 > > URL: http://llvm.org/viewvc/llvm-project?rev=202360&view=rev > Log: > [OPENMP] First changes for Parsing and Sema for 'omp simd' directive support > > Added: > cfe/trunk/test/OpenMP/simd_ast_print.cpp (with props) > cfe/trunk/test/OpenMP/simd_misc_messages.c (with props) > Modified: > cfe/trunk/include/clang-c/Index.h > cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h > cfe/trunk/include/clang/AST/RecursiveASTVisitor.h > cfe/trunk/include/clang/AST/StmtOpenMP.h > cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > cfe/trunk/include/clang/Basic/OpenMPKinds.def > cfe/trunk/include/clang/Basic/StmtNodes.td > cfe/trunk/include/clang/Sema/Sema.h > cfe/trunk/include/clang/Serialization/ASTBitCodes.h > cfe/trunk/lib/AST/Stmt.cpp > cfe/trunk/lib/AST/StmtPrinter.cpp > cfe/trunk/lib/AST/StmtProfile.cpp > cfe/trunk/lib/Basic/OpenMPKinds.cpp > cfe/trunk/lib/CodeGen/CGStmt.cpp > cfe/trunk/lib/Parse/ParseOpenMP.cpp > cfe/trunk/lib/Sema/SemaOpenMP.cpp > cfe/trunk/lib/Sema/TreeTransform.h > cfe/trunk/lib/Serialization/ASTReaderStmt.cpp > cfe/trunk/lib/Serialization/ASTWriterStmt.cpp > cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp > cfe/trunk/tools/libclang/CIndex.cpp > cfe/trunk/tools/libclang/CXCursor.cpp > > Modified: cfe/trunk/include/clang-c/Index.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/include/clang-c/Index.h (original) > +++ cfe/trunk/include/clang-c/Index.h Thu Feb 27 02:29:12 2014 > @@ -2135,7 +2135,11 @@ enum CXCursorKind { > */ > CXCursor_OMPParallelDirective = 232, > > - CXCursor_LastStmt = CXCursor_OMPParallelDirective, > + /** \brief OpenMP simd directive. > + */ > + CXCursor_OMPSimdDirective = 233, > + > + CXCursor_LastStmt = CXCursor_OMPSimdDirective, > > /** > * \brief Cursor that represents the translation unit itself. > > Modified: cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h (original) > +++ cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h Thu Feb 27 02:29:12 > 2014 > @@ -424,6 +424,7 @@ private: > bool TraverseFunctionHelper(FunctionDecl *D); > bool TraverseVarHelper(VarDecl *D); > bool TraverseOMPClause(OMPClause *C); > + bool TraverseOMPExecutableDirective(OMPExecutableDirective *S); > #define OPENMP_CLAUSE(Name, Class) \ > bool Visit##Class(Class *C); > #include "clang/Basic/OpenMPKinds.def" > @@ -2331,11 +2332,22 @@ DEF_TRAVERSE_STMT(ObjCDictionaryLiteral, > DEF_TRAVERSE_STMT(AsTypeExpr, { }) > > // OpenMP directives. > -DEF_TRAVERSE_STMT(OMPParallelDirective, { > +template<typename Derived> > +bool DataRecursiveASTVisitor<Derived>::TraverseOMPExecutableDirective( > + OMPExecutableDirective *S) { > ArrayRef<OMPClause *> Clauses = S->clauses(); > for (ArrayRef<OMPClause *>::iterator I = Clauses.begin(), E = > Clauses.end(); > I != E; ++I) > if (!TraverseOMPClause(*I)) return false; > + return true; > +} > + > +DEF_TRAVERSE_STMT(OMPParallelDirective, { > + if (!TraverseOMPExecutableDirective(S)) return false; > +}) > + > +DEF_TRAVERSE_STMT(OMPSimdDirective, { > + if (!TraverseOMPExecutableDirective(S)) return false; > }) > > // OpenMP clauses. > > Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original) > +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Thu Feb 27 02:29:12 2014 > @@ -441,6 +441,7 @@ private: > bool TraverseFunctionHelper(FunctionDecl *D); > bool TraverseVarHelper(VarDecl *D); > bool TraverseOMPClause(OMPClause *C); > + bool TraverseOMPExecutableDirective(OMPExecutableDirective *S); > #define OPENMP_CLAUSE(Name, Class) \ > bool Visit##Class(Class *C); > #include "clang/Basic/OpenMPKinds.def" > @@ -2355,11 +2356,22 @@ DEF_TRAVERSE_STMT(ObjCDictionaryLiteral, > DEF_TRAVERSE_STMT(AsTypeExpr, { }) > > // OpenMP directives. > -DEF_TRAVERSE_STMT(OMPParallelDirective, { > +template<typename Derived> > +bool RecursiveASTVisitor<Derived>::TraverseOMPExecutableDirective( > + OMPExecutableDirective *S) { > ArrayRef<OMPClause *> Clauses = S->clauses(); > for (ArrayRef<OMPClause *>::iterator I = Clauses.begin(), E = > Clauses.end(); > I != E; ++I) > if (!TraverseOMPClause(*I)) return false; > + return true; > +} > + > +DEF_TRAVERSE_STMT(OMPParallelDirective, { > + if (!TraverseOMPExecutableDirective(S)) return false; > +}) > + > +DEF_TRAVERSE_STMT(OMPSimdDirective, { > + if (!TraverseOMPExecutableDirective(S)) return false; > }) > > // OpenMP clauses. > > Modified: cfe/trunk/include/clang/AST/StmtOpenMP.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/StmtOpenMP.h?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/include/clang/AST/StmtOpenMP.h (original) > +++ cfe/trunk/include/clang/AST/StmtOpenMP.h Thu Feb 27 02:29:12 2014 > @@ -140,17 +140,18 @@ class OMPParallelDirective : public OMPE > /// \param EndLoc Ending Location of the directive. > /// > OMPParallelDirective(SourceLocation StartLoc, SourceLocation EndLoc, > - unsigned N) > + unsigned NumClauses) > : OMPExecutableDirective(this, OMPParallelDirectiveClass, > OMPD_parallel, > - StartLoc, EndLoc, N, 1) {} > + StartLoc, EndLoc, NumClauses, 1) {} > > /// \brief Build an empty directive. > /// > - /// \param N Number of clauses. > + /// \param NumClauses Number of clauses. > /// > - explicit OMPParallelDirective(unsigned N) > + explicit OMPParallelDirective(unsigned NumClauses) > : OMPExecutableDirective(this, OMPParallelDirectiveClass, > OMPD_parallel, > - SourceLocation(), SourceLocation(), N, 1) {} > + SourceLocation(), SourceLocation(), > + NumClauses, 1) {} > > public: > /// \brief Creates directive with a list of \a Clauses. > @@ -168,9 +169,10 @@ public: > /// \brief Creates an empty directive with the place for \a N clauses. > /// > /// \param C AST context. > - /// \param N The number of clauses. > + /// \param NumClauses Number of clauses. > /// > - static OMPParallelDirective *CreateEmpty(const ASTContext &C, unsigned N, > + static OMPParallelDirective *CreateEmpty(const ASTContext &C, > + unsigned NumClauses, > EmptyShell); > > static bool classof(const Stmt *T) { > @@ -178,6 +180,76 @@ public: > } > }; > > +/// \brief This represents '#pragma omp simd' directive. > +/// > +/// \code > +/// #pragma omp simd private(a,b) linear(i,j:s) reduction(+:c,d) > +/// \endcode > +/// In this example directive '#pragma omp simd' has clauses 'private' > +/// with the variables 'a' and 'b', 'linear' with variables 'i', 'j' and > +/// linear step 's', 'reduction' with operator '+' and variables 'c' and 'd'. > +/// > +class OMPSimdDirective : public OMPExecutableDirective { > + friend class ASTStmtReader; > + /// \brief Number of collapsed loops as specified by 'collapse' clause. > + unsigned CollapsedNum; > + /// \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. > + /// > + OMPSimdDirective(SourceLocation StartLoc, SourceLocation EndLoc, > + unsigned CollapsedNum, unsigned NumClauses) > + : OMPExecutableDirective(this, OMPSimdDirectiveClass, OMPD_simd, > + StartLoc, EndLoc, NumClauses, 1), > + CollapsedNum(CollapsedNum) { } > + > + /// \brief Build an empty directive. > + /// > + /// \param CollapsedNum Number of collapsed nested loops. > + /// \param NumClauses Number of clauses. > + /// > + explicit OMPSimdDirective(unsigned CollapsedNum, unsigned NumClauses) > + : OMPExecutableDirective(this, OMPSimdDirectiveClass, OMPD_simd, > + SourceLocation(), SourceLocation(), > + NumClauses, 1), > + CollapsedNum(CollapsedNum) { } > +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 Clauses List of clauses. > + /// \param AssociatedStmt Statement, associated with the directive. > + /// > + static OMPSimdDirective *Create(const ASTContext &C, > + SourceLocation StartLoc, > + SourceLocation EndLoc, > + ArrayRef<OMPClause *> Clauses, > + Stmt *AssociatedStmt); > + > + /// \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 OMPSimdDirective *CreateEmpty(const ASTContext &C, > + unsigned NumClauses, > + unsigned CollapsedNum, > + EmptyShell); > + > + unsigned getCollapsedNumber() const { return CollapsedNum; } > + > + static bool classof(const Stmt *T) { > + return T->getStmtClass() == OMPSimdDirectiveClass; > + } > +}; > + > } // end namespace clang > > #endif > > Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) > +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Thu Feb 27 02:29:12 > 2014 > @@ -6835,24 +6835,26 @@ def err_omp_private_incomplete_type : Er > "a private variable with incomplete type %0">; > def err_omp_firstprivate_incomplete_type : Error< > "a firstprivate variable with incomplete type %0">; > -def err_omp_unexpected_clause_value : Error < > +def err_omp_unexpected_clause_value : Error< > "expected %0 in OpenMP clause '%1'">; > -def err_omp_expected_var_name : Error < > +def err_omp_expected_var_name : Error< > "expected variable name">; > -def err_omp_required_method : Error < > +def err_omp_required_method : Error< > "%0 variable must have an accessible, unambiguous %select{default > constructor|copy constructor|copy assignment operator|'%2'|destructor}1">; > def err_omp_clause_ref_type_arg : Error< > "arguments of OpenMP clause '%0' cannot be of reference type %1">; > def err_omp_threadprivate_incomplete_type : Error< > "threadprivate variable with incomplete type %0">; > -def err_omp_no_dsa_for_variable : Error < > +def err_omp_no_dsa_for_variable : Error< > "variable %0 must have explicitly specified data sharing attributes">; > def err_omp_wrong_dsa : Error< > "%0 variable cannot be %1">; > -def note_omp_explicit_dsa : Note < > +def note_omp_explicit_dsa : Note< > "defined as %0">; > -def note_omp_predetermined_dsa : Note < > +def note_omp_predetermined_dsa : Note< > "predetermined as %0">; > +def err_omp_not_for : Error< > + "statement after '#pragma omp %0' must be a for loop">; > } // end of OpenMP category > > let CategoryName = "Related Result Type Issue" in { > > Modified: cfe/trunk/include/clang/Basic/OpenMPKinds.def > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/OpenMPKinds.def?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/OpenMPKinds.def (original) > +++ cfe/trunk/include/clang/Basic/OpenMPKinds.def Thu Feb 27 02:29:12 2014 > @@ -21,6 +21,9 @@ > #ifndef OPENMP_PARALLEL_CLAUSE > # define OPENMP_PARALLEL_CLAUSE(Name) > #endif > +#ifndef OPENMP_SIMD_CLAUSE > +# define OPENMP_SIMD_CLAUSE(Name) > +#endif > #ifndef OPENMP_DEFAULT_KIND > # define OPENMP_DEFAULT_KIND(Name) > #endif > @@ -29,6 +32,7 @@ > OPENMP_DIRECTIVE(threadprivate) > OPENMP_DIRECTIVE(parallel) > OPENMP_DIRECTIVE(task) > +OPENMP_DIRECTIVE(simd) > > // OpenMP clauses. > OPENMP_CLAUSE(if, OMPIfClause) > @@ -44,6 +48,8 @@ OPENMP_PARALLEL_CLAUSE(private) > OPENMP_PARALLEL_CLAUSE(firstprivate) > OPENMP_PARALLEL_CLAUSE(shared) > > +// FIXME: clauses allowed for directive 'omp simd'. > + > // Static attributes for 'default' clause. > OPENMP_DEFAULT_KIND(none) > OPENMP_DEFAULT_KIND(shared) > @@ -52,3 +58,5 @@ OPENMP_DEFAULT_KIND(shared) > #undef OPENMP_DIRECTIVE > #undef OPENMP_CLAUSE > #undef OPENMP_PARALLEL_CLAUSE > +#undef OPENMP_SIMD_CLAUSE > + > > Modified: cfe/trunk/include/clang/Basic/StmtNodes.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/StmtNodes.td?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/StmtNodes.td (original) > +++ cfe/trunk/include/clang/Basic/StmtNodes.td Thu Feb 27 02:29:12 2014 > @@ -178,3 +178,4 @@ def AsTypeExpr : DStmt<Expr>; > // OpenMP Directives. > def OMPExecutableDirective : Stmt<1>; > def OMPParallelDirective : DStmt<OMPExecutableDirective>; > +def OMPSimdDirective : DStmt<OMPExecutableDirective>; > > Modified: cfe/trunk/include/clang/Sema/Sema.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Sema/Sema.h (original) > +++ cfe/trunk/include/clang/Sema/Sema.h Thu Feb 27 02:29:12 2014 > @@ -7111,6 +7111,12 @@ public: > Stmt *AStmt, > SourceLocation StartLoc, > SourceLocation EndLoc); > + /// \brief Called on well-formed '\#pragma omp simd' after parsing > + /// of the associated statement. > + StmtResult ActOnOpenMPSimdDirective(ArrayRef<OMPClause *> Clauses, > + Stmt *AStmt, > + SourceLocation StartLoc, > + SourceLocation EndLoc); > > OMPClause *ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind, > Expr *Expr, > > Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original) > +++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Thu Feb 27 02:29:12 > 2014 > @@ -1333,6 +1333,7 @@ namespace clang { > > // OpenMP drectives > STMT_OMP_PARALLEL_DIRECTIVE, > + STMT_OMP_SIMD_DIRECTIVE, > > // ARC > EXPR_OBJC_BRIDGED_CAST, // ObjCBridgedCastExpr > > Modified: cfe/trunk/lib/AST/Stmt.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Stmt.cpp?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/Stmt.cpp (original) > +++ cfe/trunk/lib/AST/Stmt.cpp Thu Feb 27 02:29:12 2014 > @@ -1217,10 +1217,39 @@ OMPParallelDirective *OMPParallelDirecti > } > > OMPParallelDirective *OMPParallelDirective::CreateEmpty(const ASTContext &C, > - unsigned N, > + unsigned NumClauses, > EmptyShell) { > unsigned Size = llvm::RoundUpToAlignment(sizeof(OMPParallelDirective), > llvm::alignOf<OMPClause *>()); > - void *Mem = C.Allocate(Size + sizeof(OMPClause *) * N + sizeof(Stmt *)); > - return new (Mem) OMPParallelDirective(N); > + void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses + > + sizeof(Stmt *)); > + return new (Mem) OMPParallelDirective(NumClauses); > } > + > +OMPSimdDirective *OMPSimdDirective::Create(const ASTContext &C, > + SourceLocation StartLoc, > + SourceLocation EndLoc, > + ArrayRef<OMPClause *> Clauses, > + Stmt *AssociatedStmt) { > + unsigned Size = llvm::RoundUpToAlignment(sizeof(OMPSimdDirective), > + llvm::alignOf<OMPClause *>()); > + void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + > + sizeof(Stmt *)); > + OMPSimdDirective *Dir = new (Mem) OMPSimdDirective(StartLoc, EndLoc, > + 1, Clauses.size()); > + Dir->setClauses(Clauses); > + Dir->setAssociatedStmt(AssociatedStmt); > + return Dir; > +} > + > +OMPSimdDirective *OMPSimdDirective::CreateEmpty(const ASTContext &C, > + unsigned NumClauses, > + unsigned CollapsedNum, > + EmptyShell) { > + unsigned Size = llvm::RoundUpToAlignment(sizeof(OMPSimdDirective), > + llvm::alignOf<OMPClause *>()); > + void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses + > + sizeof(Stmt *)); > + return new (Mem) OMPSimdDirective(CollapsedNum, NumClauses); > +} > + > > Modified: cfe/trunk/lib/AST/StmtPrinter.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/StmtPrinter.cpp (original) > +++ cfe/trunk/lib/AST/StmtPrinter.cpp Thu Feb 27 02:29:12 2014 > @@ -70,6 +70,7 @@ namespace { > void PrintCallArgs(CallExpr *E); > void PrintRawSEHExceptHandler(SEHExceptStmt *S); > void PrintRawSEHFinallyStmt(SEHFinallyStmt *S); > + void PrintOMPExecutableDirective(OMPExecutableDirective *S); > > void PrintExpr(Expr *E) { > if (E) > @@ -89,7 +90,7 @@ namespace { > return; > else StmtVisitor<StmtPrinter>::Visit(S); > } > - > + > void VisitStmt(Stmt *Node) LLVM_ATTRIBUTE_UNUSED { > Indent() << "<<unknown stmt type>>\n"; > } > @@ -656,11 +657,9 @@ void OMPClausePrinter::VisitOMPSharedCla > // OpenMP directives printing methods > > //===----------------------------------------------------------------------===// > > -void StmtPrinter::VisitOMPParallelDirective(OMPParallelDirective *Node) { > - Indent() << "#pragma omp parallel "; > - > +void StmtPrinter::PrintOMPExecutableDirective(OMPExecutableDirective *S) { > OMPClausePrinter Printer(OS, Policy); > - ArrayRef<OMPClause *> Clauses = Node->clauses(); > + ArrayRef<OMPClause *> Clauses = S->clauses(); > for (ArrayRef<OMPClause *>::iterator I = Clauses.begin(), E = > Clauses.end(); > I != E; ++I) > if (*I && !(*I)->isImplicit()) { > @@ -668,13 +667,24 @@ void StmtPrinter::VisitOMPParallelDirect > OS << ' '; > } > OS << "\n"; > - if (Node->getAssociatedStmt()) { > - assert(isa<CapturedStmt>(Node->getAssociatedStmt()) && > + if (S->getAssociatedStmt()) { > + assert(isa<CapturedStmt>(S->getAssociatedStmt()) && > "Expected captured statement!"); > - Stmt *CS = > cast<CapturedStmt>(Node->getAssociatedStmt())->getCapturedStmt(); > + Stmt *CS = cast<CapturedStmt>(S->getAssociatedStmt())->getCapturedStmt(); > PrintStmt(CS); > } > } > + > +void StmtPrinter::VisitOMPParallelDirective(OMPParallelDirective *Node) { > + Indent() << "#pragma omp parallel "; > + PrintOMPExecutableDirective(Node); > +} > + > +void StmtPrinter::VisitOMPSimdDirective(OMPSimdDirective *Node) { > + Indent() << "#pragma omp simd "; > + PrintOMPExecutableDirective(Node); > +} > + > > //===----------------------------------------------------------------------===// > // Expr printing methods. > > //===----------------------------------------------------------------------===// > > Modified: cfe/trunk/lib/AST/StmtProfile.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/StmtProfile.cpp (original) > +++ cfe/trunk/lib/AST/StmtProfile.cpp Thu Feb 27 02:29:12 2014 > @@ -293,7 +293,7 @@ void OMPClauseProfiler::VisitOMPSharedCl > } > > void > -StmtProfiler::VisitOMPParallelDirective(const OMPParallelDirective *S) { > +StmtProfiler::VisitOMPExecutableDirective(const OMPExecutableDirective *S) { > VisitStmt(S); > OMPClauseProfiler P(this); > ArrayRef<OMPClause *> Clauses = S->clauses(); > @@ -303,6 +303,14 @@ StmtProfiler::VisitOMPParallelDirective( > P.Visit(*I); > } > > +void StmtProfiler::VisitOMPParallelDirective(const OMPParallelDirective *S) { > + VisitOMPExecutableDirective(S); > +} > + > +void StmtProfiler::VisitOMPSimdDirective(const OMPSimdDirective *S) { > + VisitOMPExecutableDirective(S); > +} > + > void StmtProfiler::VisitExpr(const Expr *S) { > VisitStmt(S); > } > > Modified: cfe/trunk/lib/Basic/OpenMPKinds.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/OpenMPKinds.cpp?rev=202360&r1=202359&r2=202360&view=diff > ============================================================================== > --- cfe/trunk/lib/Basic/OpenMPKinds.cpp (original) > +++ cfe/trunk/lib/Basic/OpenMPKinds.cpp Thu Feb 27 02:29:12 2014 > @@ -125,6 +125,15 @@ bool clang::isAllowedClauseForDirective( > break; > } > break; > + case OMPD_simd: > + switch (CKind) { > +#define OPENMP_SIMD_CLAUSE(Name) \ > + case OMPC_##Name: return true; > +#include "clang/Basic/OpenMPKinds.def" > + default: > + break;
This is causing a warning for me in MSVC: Warning 1 warning C4065: switch statement contains 'default' but no 'case' labels E:\llvm\llvm\tools\clang\lib\Basic\OpenMPKinds.cpp 135 Will this switch statement gain content in the near future, or is this something we can remove for the time being? ~Aaron _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits