Author: Stephen Kelly Date: 2019-12-20T21:33:31Z New Revision: 0378f3a90341d990236c44f297b923a32b35fab1
URL: https://github.com/llvm/llvm-project/commit/0378f3a90341d990236c44f297b923a32b35fab1 DIFF: https://github.com/llvm/llvm-project/commit/0378f3a90341d990236c44f297b923a32b35fab1.diff LOG: Revert "Customize simplified dumping and matching of LambdaExpr" This reverts commit 494b1318ca77927e919bbf9a61749a58553d738c. Added: Modified: clang/include/clang/AST/ASTNodeTraverser.h clang/lib/ASTMatchers/ASTMatchFinder.cpp clang/unittests/AST/ASTTraverserTest.cpp clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/ASTNodeTraverser.h b/clang/include/clang/AST/ASTNodeTraverser.h index 9dab814b659b..f097d024c9e8 100644 --- a/clang/include/clang/AST/ASTNodeTraverser.h +++ b/clang/include/clang/AST/ASTNodeTraverser.h @@ -128,12 +128,9 @@ class ASTNodeTraverser ConstStmtVisitor<Derived>::Visit(S); // Some statements have custom mechanisms for dumping their children. - if (isa<DeclStmt>(S) || isa<GenericSelectionExpr>(S)) - return; - - if (isa<LambdaExpr>(S) && - Traversal == ast_type_traits::TK_IgnoreUnlessSpelledInSource) + if (isa<DeclStmt>(S) || isa<GenericSelectionExpr>(S)) { return; + } for (const Stmt *SubStmt : S->children()) Visit(SubStmt); @@ -649,23 +646,7 @@ class ASTNodeTraverser } void VisitLambdaExpr(const LambdaExpr *Node) { - if (Traversal == ast_type_traits::TK_IgnoreUnlessSpelledInSource) { - for (unsigned I = 0, N = Node->capture_size(); I != N; ++I) { - const auto *C = Node->capture_begin() + I; - if (!C->isExplicit()) - continue; - if (Node->isInitCapture(C)) - Visit(C->getCapturedVar()); - else - Visit(Node->capture_init_begin()[I]); - } - dumpTemplateParameters(Node->getTemplateParameterList()); - for (const auto *P : Node->getCallOperator()->parameters()) - Visit(P); - Visit(Node->getBody()); - } else { - return Visit(Node->getLambdaClass()); - } + Visit(Node->getLambdaClass()); } void VisitSizeOfPackExpr(const SizeOfPackExpr *Node) { diff --git a/clang/lib/ASTMatchers/ASTMatchFinder.cpp b/clang/lib/ASTMatchers/ASTMatchFinder.cpp index 2a43b4c7049f..8ac35d522843 100644 --- a/clang/lib/ASTMatchers/ASTMatchFinder.cpp +++ b/clang/lib/ASTMatchers/ASTMatchFinder.cpp @@ -145,9 +145,7 @@ class MatchChildASTVisitor ScopedIncrement ScopedDepth(&CurrentDepth); Stmt *StmtToTraverse = StmtNode; - if (auto *ExprNode = dyn_cast_or_null<LambdaExpr>(StmtNode)) - StmtToTraverse = ExprNode; - else if (auto *ExprNode = dyn_cast_or_null<Expr>(StmtNode)) + if (auto *ExprNode = dyn_cast_or_null<Expr>(StmtNode)) StmtToTraverse = Finder->getASTContext().traverseIgnored(ExprNode); if (Traversal == ast_type_traits::TraversalKind::TK_IgnoreImplicitCastsAndParentheses) { @@ -205,38 +203,6 @@ class MatchChildASTVisitor ScopedIncrement ScopedDepth(&CurrentDepth); return traverse(*CtorInit); } - bool TraverseLambdaExpr(LambdaExpr *Node) { - if (!Node) - return true; - ScopedIncrement ScopedDepth(&CurrentDepth); - - for (unsigned I = 0, N = Node->capture_size(); I != N; ++I) { - const auto *C = Node->capture_begin() + I; - if (!C->isExplicit()) - continue; - if (Node->isInitCapture(C) && !match(*C->getCapturedVar())) - return false; - if (!match(*Node->capture_init_begin()[I])) - return false; - } - - if (const auto *TPL = Node->getTemplateParameterList()) { - for (const auto *TP : *TPL) { - if (!match(*TP)) - return false; - } - } - - for (const auto *P : Node->getCallOperator()->parameters()) { - if (!match(*P)) - return false; - } - - if (!match(*Node->getBody())) - return false; - - return false; - } bool shouldVisitTemplateInstantiations() const { return true; } bool shouldVisitImplicitCode() const { return true; } diff --git a/clang/unittests/AST/ASTTraverserTest.cpp b/clang/unittests/AST/ASTTraverserTest.cpp index 4b982431297c..c995f55d3c89 100644 --- a/clang/unittests/AST/ASTTraverserTest.cpp +++ b/clang/unittests/AST/ASTTraverserTest.cpp @@ -479,123 +479,4 @@ FunctionDecl 'func12' )cpp"); } -TEST(Traverse, LambdaUnlessSpelledInSource) { - - auto AST = - buildASTFromCodeWithArgs(R"cpp( - -void captures() { - int a = 0; - int b = 0; - int d = 0; - int f = 0; - - [a, &b, c = d, &e = f](int g, int h = 42) {}; -} - -void templated() { - int a = 0; - [a]<typename T>(T t) {}; -} - -struct SomeStruct { - int a = 0; - void capture_this() { - [this]() {}; - } - void capture_this_copy() { - [self = *this]() {}; - } -}; -)cpp", - {"-Wno-unused-value", "-Wno-c++2a-extensions"}); - - auto getLambdaNode = [&AST](const std::string &name) { - auto BN = ast_matchers::match( - lambdaExpr(hasAncestor(functionDecl(hasName(name)))).bind("lambda"), - AST->getASTContext()); - EXPECT_EQ(BN.size(), 1u); - return BN[0].getNodeAs<LambdaExpr>("lambda"); - }; - - { - auto L = getLambdaNode("captures"); - - EXPECT_EQ(dumpASTString(ast_type_traits::TK_IgnoreUnlessSpelledInSource, L), - R"cpp( -LambdaExpr -|-DeclRefExpr 'a' -|-DeclRefExpr 'b' -|-VarDecl 'c' -| `-DeclRefExpr 'd' -|-VarDecl 'e' -| `-DeclRefExpr 'f' -|-ParmVarDecl 'g' -|-ParmVarDecl 'h' -| `-IntegerLiteral -`-CompoundStmt -)cpp"); - - EXPECT_EQ(dumpASTString(ast_type_traits::TK_AsIs, L), - R"cpp( -LambdaExpr -|-CXXRecordDecl '' -| |-CXXMethodDecl 'operator()' -| | |-ParmVarDecl 'g' -| | |-ParmVarDecl 'h' -| | | `-IntegerLiteral -| | `-CompoundStmt -| |-FieldDecl '' -| |-FieldDecl '' -| |-FieldDecl '' -| |-FieldDecl '' -| `-CXXDestructorDecl '~' -|-ImplicitCastExpr -| `-DeclRefExpr 'a' -|-DeclRefExpr 'b' -|-ImplicitCastExpr -| `-DeclRefExpr 'd' -|-DeclRefExpr 'f' -`-CompoundStmt -)cpp"); - } - - { - auto L = getLambdaNode("templated"); - - EXPECT_EQ(dumpASTString(ast_type_traits::TK_IgnoreUnlessSpelledInSource, L), - R"cpp( -LambdaExpr -|-DeclRefExpr 'a' -|-TemplateTypeParmDecl 'T' -|-ParmVarDecl 't' -`-CompoundStmt -)cpp"); - } - - { - auto L = getLambdaNode("capture_this"); - - EXPECT_EQ(dumpASTString(ast_type_traits::TK_IgnoreUnlessSpelledInSource, L), - R"cpp( -LambdaExpr -|-CXXThisExpr -`-CompoundStmt -)cpp"); - } - - { - auto L = getLambdaNode("capture_this_copy"); - - EXPECT_EQ(dumpASTString(ast_type_traits::TK_IgnoreUnlessSpelledInSource, L), - R"cpp( -LambdaExpr -|-VarDecl 'self' -| `-UnaryOperator -| `-CXXThisExpr -`-CompoundStmt -)cpp"); - } -} - } // namespace clang diff --git a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp index b9075927d745..a21ed04b32d4 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp @@ -1751,17 +1751,6 @@ B func12() { return c; } -void func13() { - int a = 0; - int c = 0; - - [a, b = c](int d) { int e = d; }; -} - -void func14() { - [] <typename TemplateType> (TemplateType t, TemplateType u) { int e = t + u; }; -} - )cpp"; EXPECT_TRUE(matches( @@ -1832,23 +1821,6 @@ void func14() { returnStmt(forFunction(functionDecl(hasName("func12"))), hasReturnValue( declRefExpr(to(varDecl(hasName("c"))))))))); - - EXPECT_TRUE(matches( - Code, - traverse( - ast_type_traits::TK_IgnoreUnlessSpelledInSource, - lambdaExpr(forFunction(functionDecl(hasName("func13"))), - has(compoundStmt(hasDescendant(varDecl(hasName("e"))))), - has(declRefExpr(to(varDecl(hasName("a"))))), - has(varDecl(hasName("b"), hasInitializer(declRefExpr(to( - varDecl(hasName("c"))))))), - has(parmVarDecl(hasName("d"))))))); - - EXPECT_TRUE(matches( - Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource, - lambdaExpr( - forFunction(functionDecl(hasName("func14"))), - has(templateTypeParmDecl(hasName("TemplateType"))))))); } TEST(IgnoringImpCasts, MatchesImpCasts) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits