From 64356b6d94eac13780cc36ea12053d61a027561e Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sat, 23 May 2020 01:28:55 +0100 Subject: [PATCH] Add missing unit test --- .../ASTMatchers/ASTMatchersTraversalTest.cpp | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp index 8fcaeac..e8b0a31 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp @@ -1830,6 +1830,43 @@ void stringConstruct() hasDescendant(cxxOperatorCallExpr( isAssignmentOperator(), hasArgument(1, stringLiteral()))))))); + + Code = R"cpp( + +struct C1 {}; +struct C2 { operator C1(); }; + +void conversionOperator() +{ + C2* c2; + C1 c1 = (*c2); +} + +)cpp"; + EXPECT_TRUE(matches( + Code, + traverse( + TK_AsIs, + functionDecl( + hasName("conversionOperator"), + hasDescendant( + varDecl( + hasName("c1"), + hasInitializer( + ignoringImplicit(cxxConstructExpr(hasArgument( + 0, ignoringImplicit( + cxxMemberCallExpr(onImplicitObjectArgument( + ignoringParenImpCasts(unaryOperator( + hasOperatorName("*"))))))))))) + .bind("c1")))))); + + EXPECT_TRUE(matches( + Code, + traverse(TK_IgnoreUnlessSpelledInSource, + functionDecl(hasName("conversionOperator"), + hasDescendant(varDecl( + hasName("c1"), hasInitializer(unaryOperator( + hasOperatorName("*"))))))))); } template -- 2.7.4