summaryrefslogtreecommitdiffstats
path: root/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
diff options
context:
space:
mode:
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