[clang] 514e3c3 - Add missing tests for parent traversal

Stephen Kelly via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 20 03:19:32 PST 2020


Author: Stephen Kelly
Date: 2020-01-20T11:18:35Z
New Revision: 514e3c3694a3457ea5c1b89420246fd845791afd

URL: https://github.com/llvm/llvm-project/commit/514e3c3694a3457ea5c1b89420246fd845791afd
DIFF: https://github.com/llvm/llvm-project/commit/514e3c3694a3457ea5c1b89420246fd845791afd.diff

LOG: Add missing tests for parent traversal

Added: 
    

Modified: 
    clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
index b0696fdb8a75..27f446467fa3 100644
--- a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
+++ b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
@@ -1633,6 +1633,15 @@ void foo()
               traverse(ast_type_traits::TK_IgnoreImplicitCastsAndParentheses,
                        Matcher)));
 
+  auto ParentMatcher = floatLiteral(hasParent(varDecl(hasName("i"))));
+
+  EXPECT_TRUE(
+      notMatches(VarDeclCode, traverse(ast_type_traits::TK_AsIs, ParentMatcher)));
+  EXPECT_TRUE(
+      matches(VarDeclCode,
+              traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+                       ParentMatcher)));
+
   EXPECT_TRUE(
       matches(VarDeclCode, decl(traverse(ast_type_traits::TK_AsIs,
                                          anyOf(cxxRecordDecl(), varDecl())))));
@@ -1714,6 +1723,13 @@ void bar()
       functionDecl(hasName("foo"), traverse(ast_type_traits::TK_AsIs,
                                             hasDescendant(floatLiteral())))));
 
+  EXPECT_TRUE(
+      notMatches(Code, traverse(ast_type_traits::TK_AsIs, floatLiteral(hasParent(callExpr(callee(functionDecl(hasName("foo")))))))));
+  EXPECT_TRUE(
+      matches(Code,
+              traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+                       floatLiteral(hasParent(callExpr(callee(functionDecl(hasName("foo")))))))));
+
   Code = R"cpp(
 void foo()
 {
@@ -1724,6 +1740,10 @@ void foo()
       matches(Code,
               traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
                        varDecl(hasInitializer(integerLiteral(equals(3)))))));
+  EXPECT_TRUE(
+      matches(Code,
+              traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+                       integerLiteral(equals(3), hasParent(varDecl(hasName("i")))))));
 }
 
 template <typename MatcherT>
@@ -1905,12 +1925,21 @@ void func14() {
                      returnStmt(forFunction(functionDecl(hasName("func1"))),
                                 hasReturnValue(integerLiteral(equals(42)))))));
 
+  EXPECT_TRUE(matches(
+      Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+        integerLiteral(equals(42), hasParent(returnStmt(forFunction(functionDecl(hasName("func1"))))))
+                     )));
+
   EXPECT_TRUE(matches(
       Code,
       traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
                returnStmt(forFunction(functionDecl(hasName("func2"))),
                           hasReturnValue(cxxTemporaryObjectExpr(
                               hasArgument(0, integerLiteral(equals(42)))))))));
+  EXPECT_TRUE(matches(
+      Code,
+      traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+        integerLiteral(equals(42), hasParent(cxxTemporaryObjectExpr(hasParent(returnStmt(forFunction(functionDecl(hasName("func2")))))))))));
 
   EXPECT_TRUE(matches(
       Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
@@ -1919,6 +1948,10 @@ void func14() {
                                     cxxFunctionalCastExpr(hasSourceExpression(
                                         integerLiteral(equals(42)))))))));
 
+  EXPECT_TRUE(matches(
+      Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+        integerLiteral(equals(42), hasParent(cxxFunctionalCastExpr(hasParent(returnStmt(forFunction(functionDecl(hasName("func3")))) )))))));
+
   EXPECT_TRUE(matches(
       Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
                      returnStmt(forFunction(functionDecl(hasName("func4"))),
@@ -1957,18 +1990,32 @@ void func14() {
                                 hasReturnValue(
                                     declRefExpr(to(varDecl(hasName("a")))))))));
 
+  EXPECT_TRUE(matches(
+      Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+        declRefExpr(to(varDecl(hasName("a"))), hasParent(returnStmt(forFunction(functionDecl(hasName("func10")))))))));
+
   EXPECT_TRUE(matches(
       Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
                      returnStmt(forFunction(functionDecl(hasName("func11"))),
                                 hasReturnValue(
                                     declRefExpr(to(varDecl(hasName("b")))))))));
 
+  EXPECT_TRUE(matches(
+      Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+        declRefExpr(to(varDecl(hasName("b"))), hasParent(returnStmt(forFunction(functionDecl(hasName("func11"))))))
+                     )));
+
   EXPECT_TRUE(matches(
       Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
                      returnStmt(forFunction(functionDecl(hasName("func12"))),
                                 hasReturnValue(
                                     declRefExpr(to(varDecl(hasName("c")))))))));
 
+  EXPECT_TRUE(matches(
+      Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+        declRefExpr(to(varDecl(hasName("c"))), hasParent(returnStmt(forFunction(functionDecl(hasName("func12"))))))
+                     )));
+
   EXPECT_TRUE(matches(
       Code,
       traverse(
@@ -1980,6 +2027,19 @@ void func14() {
                                                    varDecl(hasName("c"))))))),
                      has(parmVarDecl(hasName("d")))))));
 
+  EXPECT_TRUE(matches(
+      Code,
+      traverse(
+          ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+          declRefExpr(to(varDecl(hasName("a"))), hasParent( lambdaExpr(forFunction(functionDecl(hasName("func13")))) )))));
+
+  EXPECT_TRUE(matches(
+      Code,
+      traverse(
+          ast_type_traits::TK_IgnoreUnlessSpelledInSource,
+          varDecl(hasName("b"), hasInitializer(declRefExpr(to(
+                                                   varDecl(hasName("c"))))), hasParent( lambdaExpr(forFunction(functionDecl(hasName("func13")))) )))));
+
   EXPECT_TRUE(matches(
       Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
                      lambdaExpr(


        


More information about the cfe-commits mailing list