[clang] 23f17ab - Fix use of directly-nested traverse() matchers

Stephen Kelly via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 9 11:28:40 PST 2020


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


        


More information about the cfe-commits mailing list