[Clang] Correctly diagnose a static function overloading a non-static function (#93460)

Regression in clang 18 introduced by af4751738db89a1

Fixes #93456
This commit is contained in:
cor3ntin 2024-05-27 14:17:10 +02:00 committed by GitHub
parent 8def1288d2
commit 0183b58e29
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 1 deletions

View File

@ -797,6 +797,8 @@ Bug Fixes to C++ Support
in dependent contexts. Fixes (#GH92680).
- Fixed a crash when diagnosing failed conversions involving template parameter
packs. (#GH93076)
- Fixed a regression introduced in Clang 18 causing a static function overloading a non-static function
with the same parameters not to be diagnosed. (Fixes #GH93456).
Bug Fixes to AST Handling
^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -1482,7 +1482,7 @@ static bool IsOverloadOrOverrideImpl(Sema &SemaRef, FunctionDecl *New,
}
if (OldMethod && NewMethod && !OldMethod->isStatic() &&
!OldMethod->isStatic()) {
!NewMethod->isStatic()) {
bool HaveCorrespondingObjectParameters = [&](const CXXMethodDecl *Old,
const CXXMethodDecl *New) {
auto NewObjectType = New->getFunctionObjectParameterReferenceType();

View File

@ -36,3 +36,20 @@ class X {
int main() {} // expected-note {{previous definition is here}}
int main(int,char**) {} // expected-error {{conflicting types for 'main'}}
namespace GH93456 {
struct X {
static void f(); // expected-note {{previous declaration is here}}
void f() const;
// expected-error@-1 {{static and non-static member functions with the same parameter types cannot be overloaded}}
};
struct Y {
void f() const; // expected-note {{previous declaration is here}}
static void f();
// expected-error@-1 {{static and non-static member functions with the same parameter types cannot be overloaded}}
};
}