https://github.com/MythreyaK created https://github.com/llvm/llvm-project/pull/152445
Attempts to fix code complete for ```cpp struct A { void foo(this auto&& self, int arg); void bar(this A self, int arg); }; int main() { A a {}; (&A::fo$c^; } ``` This should return ``` signature = (auto&& self, int arg) snippet = (${1: auto&& self}, ${2: int arg}) ``` >From 90fe63ae00fe24a12ab83594fbd6655a9688c73d Mon Sep 17 00:00:00 2001 From: Mythreya Kuricheti <g...@mythreya.dev> Date: Wed, 6 Aug 2025 22:49:28 -0700 Subject: [PATCH] [clang] CodeComplete fix for addr of deduced-this methods --- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp | 4 ++-- clang/lib/Sema/SemaCodeComplete.cpp | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp index 61bd6318b46cf..aff67d21fce7e 100644 --- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -4462,8 +4462,8 @@ TEST(CompletionTest, SkipExplicitObjectParameter) { Preamble.get(), Inputs, Opts); EXPECT_THAT( Result.Completions, - ElementsAre(AllOf(named("foo"), signature("<class self:auto>(int arg)"), - snippetSuffix("<${1:class self:auto}>")))); + ElementsAre(AllOf(named("foo"), signature("(int arg)"), + snippetSuffix("(${1:int arg})")))); } { auto Result = codeComplete(testPath(TU.Filename), Code.point("c3"), diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 0de55800ccdd1..8ccf91f17857f 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -1312,6 +1312,11 @@ bool ResultBuilder::canCxxMethodBeCalled(const CXXMethodDecl *Method, (CurrentClassScope == Method->getParent() || CurrentClassScope->isDerivedFrom(Method->getParent())); + // if method is using C++23 "deducing this", then it is a call + if (Method->isExplicitObjectMemberFunction()) { + FunctionCanBeCall = true; + } + // We skip the following calculation for exceptions if it's already true. if (FunctionCanBeCall) return true; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits