[clang] [clang-tools-extra] [clang] CodeComplete fix for addr of deduced-this methods (PR #152445)

Mythreya Kuricheti via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 6 22:53:12 PDT 2025


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 <git at 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;



More information about the cfe-commits mailing list