mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 09:06:43 +00:00
[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:
parent
8def1288d2
commit
0183b58e29
@ -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
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -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();
|
||||
|
@ -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}}
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user