[clang] 0183b58 - [Clang] Correctly diagnose a static function overloading a non-static function (#93460)
via cfe-commits
cfe-commits at lists.llvm.org
Mon May 27 05:17:15 PDT 2024
Author: cor3ntin
Date: 2024-05-27T14:17:10+02:00
New Revision: 0183b58e292d9d7004fabc92bd0da10eba5666db
URL: https://github.com/llvm/llvm-project/commit/0183b58e292d9d7004fabc92bd0da10eba5666db
DIFF: https://github.com/llvm/llvm-project/commit/0183b58e292d9d7004fabc92bd0da10eba5666db.diff
LOG: [Clang] Correctly diagnose a static function overloading a non-static function (#93460)
Regression in clang 18 introduced by af4751738db89a1
Fixes #93456
Added:
Modified:
clang/docs/ReleaseNotes.rst
clang/lib/Sema/SemaOverload.cpp
clang/test/SemaCXX/overload-decl.cpp
Removed:
################################################################################
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 81b8d42aaa84e..f5d0b69faf78d 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -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
^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 61d3c1633a2b7..c38164b7652f2 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -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();
diff --git a/clang/test/SemaCXX/overload-decl.cpp b/clang/test/SemaCXX/overload-decl.cpp
index 1201396996e75..5d1df89a0da7b 100644
--- a/clang/test/SemaCXX/overload-decl.cpp
+++ b/clang/test/SemaCXX/overload-decl.cpp
@@ -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 at -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 at -1 {{static and non-static member functions with the same parameter types cannot be overloaded}}
+};
+
+}
More information about the cfe-commits
mailing list