https://github.com/o3wiz updated 
https://github.com/llvm/llvm-project/pull/234918

>From 81536c26e74ea3a090aa40592c321ae566d42896 Mon Sep 17 00:00:00 2001
From: Daniel Aviv <[email protected]>
Date: Fri, 23 Oct 2026 15:04:21 +0300
Subject: [PATCH 1/2] fixed signature help for c++23 static () operator

---
 .../clangd/unittests/CodeCompleteTests.cpp    | 43 +++++++++++++++++++
 clang/lib/Sema/SemaCodeComplete.cpp           |  3 +-
 2 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp 
b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
index edfd29136881fd..a7b7f6c773486e 100644
--- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
@@ -3529,6 +3529,49 @@ TEST(SignatureHelpTest, VariadicType) {
   }
 }
 
+TEST(SignatureHelpTest, StaticCallOperator) {
+  Annotations Code(R"cpp(
+    struct A { static void operator()(bool a); };
+    struct B { static void operator()(bool a, bool b); };
+    struct C { template <typename T> static void operator()(T a); };
+    struct D { template <typename T> static void operator()(T a, bool b); };
+    void test() {
+      A{}($a^);
+      B{}($b^);
+      B{}(true, $b2^);
+      C{}($c^);
+      D{}($d^);
+      D{}(true, $d2^);
+    }
+  )cpp");
+  auto TU = TestTU::withCode(Code.code());
+  TU.ExtraArgs = {"-std=c++23"};
+  MockFS FS;
+  auto Inputs = TU.inputs(FS);
+  auto Preamble = TU.preamble();
+  ASSERT_TRUE(Preamble);
+
+  const struct {
+    const char *Point;
+    const char *Signature;
+    int ActiveParameter;
+  } Cases[] = {
+      {"a", "operator()([[bool a]]) -> void", 0},
+      {"b", "operator()([[bool a]], [[bool b]]) -> void", 0},
+      {"b2", "operator()([[bool a]], [[bool b]]) -> void", 1},
+      {"c", "operator()([[T a]]) -> void", 0},
+      {"d", "operator()([[T a]], [[bool b]]) -> void", 0},
+      {"d2", "operator()([[T a]], [[bool b]]) -> void", 1},
+  };
+  for (const auto &Case : Cases) {
+    SCOPED_TRACE(Case.Point);
+    auto Result = signatureHelp(testPath(TU.Filename), Code.point(Case.Point),
+                                *Preamble, Inputs, MarkupKind::PlainText);
+    EXPECT_THAT(Result.signatures, ElementsAre(sig(Case.Signature)));
+    EXPECT_EQ(Case.ActiveParameter, Result.activeParameter);
+  }
+}
+
 TEST(SignatureHelpTest, SkipExplicitObjectParameter) {
   Annotations Code(R"cpp(
     struct A {
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp 
b/clang/lib/Sema/SemaCodeComplete.cpp
index 2e852281395280..727933f7d7195f 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -6567,7 +6567,8 @@ SemaCodeCompletion::ProduceCallSignatureHelp(Expr *Fn, 
ArrayRef<Expr *> Args,
                                       CandidateSet,
                                       /*ExplicitArgs=*/nullptr,
                                       /*SuppressUserConversions=*/false,
-                                      /*PartialOverloading=*/true);
+                                      /*PartialOverloading=*/true,
+                                      /*FirstArgumentIsBase=*/true);
       }
     } else {
       // Lastly we check whether expression's type is function pointer or

>From b6a3ef8882dd8ac5aab0b9959aa47189ecc2b412 Mon Sep 17 00:00:00 2001
From: Daniel Aviv <[email protected]>
Date: Wed, 28 Oct 2026 21:11:15 +0200
Subject: [PATCH 2/2] added static operator, and lambda tests to
 SignatureHelpTest::StaticCallOperator

---
 .../clangd/unittests/CodeCompleteTests.cpp     | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp 
b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
index a7b7f6c773486e..01cf85ce9f1577 100644
--- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
@@ -3542,6 +3542,16 @@ TEST(SignatureHelpTest, StaticCallOperator) {
       C{}($c^);
       D{}($d^);
       D{}(true, $d2^);
+      B::operator()($static^);
+      B::operator()(true, $static2^);
+      D::operator()($staticTemplate^);
+      D::operator()(true, $staticTemplate2^);
+      auto Lambda = [](bool a, bool b) static {};
+      Lambda($lambda^);
+      Lambda(true, $lambda2^);
+      auto GenericLambda = []<typename T>(T a, bool b) static -> void {};
+      GenericLambda($genericLambda^);
+      GenericLambda(true, $genericLambda2^);
     }
   )cpp");
   auto TU = TestTU::withCode(Code.code());
@@ -3562,6 +3572,14 @@ TEST(SignatureHelpTest, StaticCallOperator) {
       {"c", "operator()([[T a]]) -> void", 0},
       {"d", "operator()([[T a]], [[bool b]]) -> void", 0},
       {"d2", "operator()([[T a]], [[bool b]]) -> void", 1},
+      {"static", "operator()([[bool a]], [[bool b]]) -> void", 0},
+      {"static2", "operator()([[bool a]], [[bool b]]) -> void", 1},
+      {"staticTemplate", "operator()([[T a]], [[bool b]]) -> void", 0},
+      {"staticTemplate2", "operator()([[T a]], [[bool b]]) -> void", 1},
+      {"lambda", "operator()([[bool a]], [[bool b]]) -> void", 0},
+      {"lambda2", "operator()([[bool a]], [[bool b]]) -> void", 1},
+      {"genericLambda", "operator()([[T a]], [[bool b]]) -> void", 0},
+      {"genericLambda2", "operator()([[T a]], [[bool b]]) -> void", 1},
   };
   for (const auto &Case : Cases) {
     SCOPED_TRACE(Case.Point);

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to