[clang] [ASTMatchers] fix captureVars assertion failure on capturesVariables (PR #76619)
Ding Fei via cfe-commits
cfe-commits at lists.llvm.org
Sat Dec 30 08:36:59 PST 2023
https://github.com/danix800 created https://github.com/llvm/llvm-project/pull/76619
Fixes #76425
>From b26fa2acfd4974d1c09eef408b4d6c2dcbb16479 Mon Sep 17 00:00:00 2001
From: dingfei <fding at feysh.com>
Date: Sun, 31 Dec 2023 00:32:01 +0800
Subject: [PATCH] [ASTMatchers] fix captureVars assertion failure on
capturesVariables
Fixes #76425
---
clang/include/clang/ASTMatchers/ASTMatchers.h | 2 ++
clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp | 2 ++
2 files changed, 4 insertions(+)
diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h
index 82a26356c58f55..91c33e4b1163e6 100644
--- a/clang/include/clang/ASTMatchers/ASTMatchers.h
+++ b/clang/include/clang/ASTMatchers/ASTMatchers.h
@@ -4817,6 +4817,8 @@ AST_MATCHER_P(LambdaExpr, hasAnyCapture, internal::Matcher<LambdaCapture>,
/// capturesVar(hasName("x")) matches `x` and `x = 1`.
AST_MATCHER_P(LambdaCapture, capturesVar, internal::Matcher<ValueDecl>,
InnerMatcher) {
+ if (!Node.capturesVariable())
+ return false;
auto *capturedVar = Node.getCapturedVar();
return capturedVar && InnerMatcher.matches(*capturedVar, Finder, Builder);
}
diff --git a/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
index 8f0dd5602307c5..eb493f9c3050ac 100644
--- a/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
+++ b/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
@@ -2308,6 +2308,8 @@ TEST_P(ASTMatchersTest, LambdaCaptureTest_BindsToCaptureOfVarDecl) {
matches("int main() { int cc; auto f = [=](){ return cc; }; }", matcher));
EXPECT_TRUE(
matches("int main() { int cc; auto f = [&](){ return cc; }; }", matcher));
+ EXPECT_TRUE(matches(
+ "void f(int a) { int cc[a]; auto f = [&](){ return cc;}; }", matcher));
}
TEST_P(ASTMatchersTest, LambdaCaptureTest_BindsToCaptureWithInitializer) {
More information about the cfe-commits
mailing list