summaryrefslogtreecommitdiffstats
path: root/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
diff options
context:
space:
mode:
authorReid <rhiro@google.com>2020-01-10 15:49:43 -0500
committerAaron Ballman <aaron@aaronballman.com>2020-01-10 15:49:43 -0500
commit4ffcec40acebae7161ac7426edc68290bbaca2b8 (patch)
tree47ec6586fbf36f69186d20476068a0bacffc76eb /clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
parent9e13cff44d6b8b9c9c8420870132931c218707cb (diff)
downloadbcm5719-llvm-4ffcec40acebae7161ac7426edc68290bbaca2b8.tar.gz
bcm5719-llvm-4ffcec40acebae7161ac7426edc68290bbaca2b8.zip
Implement new AST matcher hasAnyCapture to match on LambdaExpr captures.
Accepts child matchers cxxThisExpr to match on capture of this and also on varDecl.
Diffstat (limited to 'clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp')
-rw-r--r--clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
index ee7b3bfd5b1..23447baf912 100644
--- a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
+++ b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
@@ -454,6 +454,26 @@ TEST(Matcher, HasReceiver) {
objcMessageExpr(hasReceiver(declRefExpr(to(varDecl(hasName("x"))))))));
}
+TEST(Matcher, HasAnyCapture) {
+ auto HasCaptureX = lambdaExpr(hasAnyCapture(varDecl(hasName("x"))));
+ EXPECT_TRUE(matches("void f() { int x = 3; [x](){}; }", HasCaptureX));
+ EXPECT_TRUE(matches("void f() { int x = 3; [&x](){}; }", HasCaptureX));
+ EXPECT_TRUE(notMatches("void f() { [](){}; }", HasCaptureX));
+ EXPECT_TRUE(notMatches("void f() { int z = 3; [&z](){}; }", HasCaptureX));
+ EXPECT_TRUE(
+ notMatches("struct a { void f() { [this](){}; }; };", HasCaptureX));
+}
+
+TEST(Matcher, CapturesThis) {
+ auto HasCaptureThis = lambdaExpr(hasAnyCapture(cxxThisExpr()));
+ EXPECT_TRUE(
+ matches("struct a { void f() { [this](){}; }; };", HasCaptureThis));
+ EXPECT_TRUE(notMatches("void f() { [](){}; }", HasCaptureThis));
+ EXPECT_TRUE(notMatches("void f() { int x = 3; [x](){}; }", HasCaptureThis));
+ EXPECT_TRUE(notMatches("void f() { int x = 3; [&x](){}; }", HasCaptureThis));
+ EXPECT_TRUE(notMatches("void f() { int z = 3; [&z](){}; }", HasCaptureThis));
+}
+
TEST(Matcher, isClassMessage) {
EXPECT_TRUE(matchesObjC(
"@interface NSString +(NSString *) stringWithFormat; @end "
OpenPOWER on IntegriCloud