Author: Stephen Kelly Date: 2020-11-09T19:23:17Z New Revision: 23f17ab5ff64c993c6242551de44af58c5b43b23
URL: https://github.com/llvm/llvm-project/commit/23f17ab5ff64c993c6242551de44af58c5b43b23 DIFF: https://github.com/llvm/llvm-project/commit/23f17ab5ff64c993c6242551de44af58c5b43b23.diff LOG: Fix use of directly-nested traverse() matchers Added: Modified: clang/include/clang/ASTMatchers/ASTMatchersInternal.h clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp Removed: ################################################################################ diff --git a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h index b6934c6349b71..f5563977cb7e1 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h +++ b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h @@ -1206,6 +1206,8 @@ template <typename T> class TraversalMatcher : public MatcherInterface<T> { } llvm::Optional<clang::TraversalKind> TraversalKind() const override { + if (auto NestedKind = this->InnerMatcher.getTraversalKind()) + return NestedKind; return Traversal; } }; diff --git a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp index c7ce63c5784aa..0d06bdce7f343 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp @@ -2372,6 +2372,11 @@ void foo() callExpr(has(callExpr(traverse( TK_AsIs, callExpr(has(implicitCastExpr( has(floatLiteral()))))))))))); + + EXPECT_TRUE(matches( + Code, + traverse(TK_IgnoreImplicitCastsAndParentheses, + traverse(TK_AsIs, implicitCastExpr(has(floatLiteral())))))); } TEST(Traversal, traverseMatcherThroughImplicit) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits