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
