summaryrefslogtreecommitdiff
path: root/unittests/ASTMatchers
diff options
context:
space:
mode:
authorShuai Wang <shuaiwang@google.com>2018-08-12 23:30:05 +0000
committerShuai Wang <shuaiwang@google.com>2018-08-12 23:30:05 +0000
commit9c1b31eade8c5024750be34fea9eb824a2041abd (patch)
tree4e3cd9b61b487f09c906ad70177286022cfd5830 /unittests/ASTMatchers
parente11c988605770e9e87777d9d10af948b3c009579 (diff)
downloadclang-9c1b31eade8c5024750be34fea9eb824a2041abd.tar.gz
[ASTMatchers] Let hasAnyArgument also support CXXUnresolvedConstructExpr
Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D50605 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@339530 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests/ASTMatchers')
-rw-r--r--unittests/ASTMatchers/ASTMatchersTraversalTest.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp b/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
index 3b8f362101..443b0588ca 100644
--- a/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
+++ b/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
@@ -406,9 +406,22 @@ TEST(Matcher, AnyArgument) {
auto HasArgumentY = hasAnyArgument(
ignoringParenImpCasts(declRefExpr(to(varDecl(hasName("y"))))));
StatementMatcher CallArgumentY = callExpr(HasArgumentY);
+ StatementMatcher CtorArgumentY = cxxConstructExpr(HasArgumentY);
+ StatementMatcher UnresolvedCtorArgumentY =
+ cxxUnresolvedConstructExpr(HasArgumentY);
StatementMatcher ObjCCallArgumentY = objcMessageExpr(HasArgumentY);
EXPECT_TRUE(matches("void x(int, int) { int y; x(1, y); }", CallArgumentY));
EXPECT_TRUE(matches("void x(int, int) { int y; x(y, 42); }", CallArgumentY));
+ EXPECT_TRUE(matches("struct Y { Y(int, int); };"
+ "void x() { int y; (void)Y(1, y); }",
+ CtorArgumentY));
+ EXPECT_TRUE(matches("struct Y { Y(int, int); };"
+ "void x() { int y; (void)Y(y, 42); }",
+ CtorArgumentY));
+ EXPECT_TRUE(matches("template <class Y> void x() { int y; (void)Y(1, y); }",
+ UnresolvedCtorArgumentY));
+ EXPECT_TRUE(matches("template <class Y> void x() { int y; (void)Y(y, 42); }",
+ UnresolvedCtorArgumentY));
EXPECT_TRUE(matchesObjC("@interface I -(void)f:(int) y; @end "
"void x(I* i) { int y; [i f:y]; }",
ObjCCallArgumentY));
@@ -416,6 +429,12 @@ TEST(Matcher, AnyArgument) {
"void x(I* i) { int z; [i f:z]; }",
ObjCCallArgumentY));
EXPECT_TRUE(notMatches("void x(int, int) { x(1, 2); }", CallArgumentY));
+ EXPECT_TRUE(notMatches("struct Y { Y(int, int); };"
+ "void x() { int y; (void)Y(1, 2); }",
+ CtorArgumentY));
+ EXPECT_TRUE(notMatches("template <class Y>"
+ "void x() { int y; (void)Y(1, 2); }",
+ UnresolvedCtorArgumentY));
StatementMatcher ImplicitCastedArgument = callExpr(
hasAnyArgument(implicitCastExpr()));