Author: Aleksandr Platonov Date: 2025-06-13T18:32:42+03:00 New Revision: ca5040990ed17fa444d30c22fffcfa7ddc72612f
URL: https://github.com/llvm/llvm-project/commit/ca5040990ed17fa444d30c22fffcfa7ddc72612f DIFF: https://github.com/llvm/llvm-project/commit/ca5040990ed17fa444d30c22fffcfa7ddc72612f.diff LOG: [clangd] Collect references in array designators (#140356) Added: Modified: clang-tools-extra/clangd/unittests/XRefsTests.cpp clang/lib/Index/IndexBody.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp index 1892f87c8e82a..b04d6431f89f9 100644 --- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -2311,6 +2311,14 @@ TEST(FindReferences, WithinAST) { $(S::deleteObject)[[de^lete]] S; } }; + )cpp", + // Array designators + R"cpp( + const int $def[[F^oo]] = 0; + int Bar[] = { + [$(Bar)[[F^oo]]...$(Bar)[[Fo^o]] + 1] = 0, + [$(Bar)[[^Foo]] + 2] = 1 + }; )cpp"}; for (const char *Test : Tests) checkFindRefs(Test); diff --git a/clang/lib/Index/IndexBody.cpp b/clang/lib/Index/IndexBody.cpp index 2ed20df22bda0..98ce6f73ec849 100644 --- a/clang/lib/Index/IndexBody.cpp +++ b/clang/lib/Index/IndexBody.cpp @@ -435,6 +435,13 @@ class BodyIndexer : public RecursiveASTVisitor<BodyIndexer> { ParentDC, SymbolRoleSet(), /*Relations=*/{}, E); } + } else { + if (D.isArrayDesignator()) + TraverseStmt(E->getArrayIndex(D)); + else if (D.isArrayRangeDesignator()) { + TraverseStmt(E->getArrayRangeStart(D)); + TraverseStmt(E->getArrayRangeEnd(D)); + } } } return true; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits