[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