Author: Nathan Ridge Date: 2026-02-25T01:09:40-05:00 New Revision: 0fa0bb10673cc8e55ff5d639cb741eded78aa255
URL: https://github.com/llvm/llvm-project/commit/0fa0bb10673cc8e55ff5d639cb741eded78aa255 DIFF: https://github.com/llvm/llvm-project/commit/0fa0bb10673cc8e55ff5d639cb741eded78aa255.diff LOG: [clangd] Handle MemberPointerTypeLoc in SelectionTree (#183242) This is another type loc that overlaps the name of the declaration whose type it is, and so needs special handling to allow the declaration itself to be targeted. Fixes https://github.com/clangd/clangd/issues/2608 Added: Modified: clang-tools-extra/clangd/Selection.cpp clang-tools-extra/clangd/unittests/XRefsTests.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/Selection.cpp b/clang-tools-extra/clangd/Selection.cpp index 01f1470f7fac3..fb2fb052388f5 100644 --- a/clang-tools-extra/clangd/Selection.cpp +++ b/clang-tools-extra/clangd/Selection.cpp @@ -959,6 +959,10 @@ class SelectionVisitor : public RecursiveASTVisitor<SelectionVisitor> { claimRange(PTL.getStarLoc(), Result); return; } + if (auto MPTL = TL->getAs<MemberPointerTypeLoc>()) { + claimRange(MPTL.getLocalSourceRange(), Result); + return; + } if (auto FTL = TL->getAs<FunctionTypeLoc>()) { claimRange(SourceRange(FTL.getLParenLoc(), FTL.getEndLoc()), Result); return; diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp index 757833c58ee17..8e97db7ab17c5 100644 --- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -2370,6 +2370,16 @@ TEST(FindReferences, WithinAST) { [$(Bar)[[F^oo]]...$(Bar)[[Fo^o]] + 1] = 0, [$(Bar)[[^Foo]] + 2] = 1 }; + )cpp", + // Field of pointer-to-member type + R"cpp( + struct S { void foo(); }; + struct A { + void (S::*$def(A)[[fi^eld]])(); + }; + void bar(A& a, S& s) { + (s.*(a.$(bar)[[field]]))(); + } )cpp"}; for (const char *Test : Tests) checkFindRefs(Test); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
