diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp --- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -1589,6 +1589,12 @@ [[Vector]] x2; Vector y; )cpp", + R"cpp(// Lambda capture initializer + void foo() { + int [[w^aldo]] = 42; + auto lambda = [x = [[waldo]]](){}; + } + )cpp", }; for (const char *Test : Tests) { Annotations T(Test); diff --git a/clang/lib/Index/IndexBody.cpp b/clang/lib/Index/IndexBody.cpp --- a/clang/lib/Index/IndexBody.cpp +++ b/clang/lib/Index/IndexBody.cpp @@ -391,11 +391,13 @@ if (C->capturesThis() || C->capturesVLAType()) return true; + if (!base::TraverseStmt(Init)) + return false; + if (C->capturesVariable() && IndexCtx.shouldIndexFunctionLocalSymbols()) return IndexCtx.handleReference(C->getCapturedVar(), C->getLocation(), Parent, ParentDC, SymbolRoleSet()); - // FIXME: Lambda init-captures. return true; }