https://github.com/a-tarasyuk created https://github.com/llvm/llvm-project/pull/110435
Fixes #100394 >From c52634882631a71fad956a70179b480abf13006a Mon Sep 17 00:00:00 2001 From: Oleksandr T <oleksandr.taras...@outlook.com> Date: Sun, 29 Sep 2024 22:01:38 +0300 Subject: [PATCH] [Clang] fix overload resolution for object parameters with top-level cv-qualifiers in member functions --- clang/docs/ReleaseNotes.rst | 1 + clang/lib/Sema/SemaOverload.cpp | 3 +++ clang/test/SemaCXX/cxx2b-deducing-this.cpp | 7 +++++++ 3 files changed, 11 insertions(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 28c759538f7df6..1bec2838765dab 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -447,6 +447,7 @@ Bug Fixes to C++ Support - Fixed an assertion failure in debug mode, and potential crashes in release mode, when diagnosing a failed cast caused indirectly by a failed implicit conversion to the type of the constructor parameter. - Fixed an assertion failure by adjusting integral to boolean vector conversions (#GH108326) +- Fixed overload handling for object parameters with top-level cv-qualifiers in explicit member functions (#GH100394) Bug Fixes to AST Handling ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 0c1e054f7c30a4..7c40bab70bbe9d 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -1511,6 +1511,9 @@ static bool IsOverloadOrOverrideImpl(Sema &SemaRef, FunctionDecl *New, auto NewObjectType = New->getFunctionObjectParameterReferenceType(); auto OldObjectType = Old->getFunctionObjectParameterReferenceType(); + if (NewObjectType.isConstQualified() != OldObjectType.isConstQualified()) + return false; + auto IsImplicitWithNoRefQual = [](const CXXMethodDecl *F) { return F->getRefQualifier() == RQ_None && !F->isExplicitObjectMemberFunction(); diff --git a/clang/test/SemaCXX/cxx2b-deducing-this.cpp b/clang/test/SemaCXX/cxx2b-deducing-this.cpp index 63bf92e8d5edd3..5fd02502ce6df4 100644 --- a/clang/test/SemaCXX/cxx2b-deducing-this.cpp +++ b/clang/test/SemaCXX/cxx2b-deducing-this.cpp @@ -1073,3 +1073,10 @@ int main() { return foo[]; // expected-error {{no viable overloaded operator[] for type 'Foo'}} } } + +namespace GH100394 { +struct C { + void f(this const C); + void f() const ; // ok +}; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits