Skip to content

Commit 3ad4e85

Browse files
committed
[clang] [SemaCXX] Disallow deducing "this" on operator new and delete
Resolves Issue #82249
1 parent 38476b0 commit 3ad4e85

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

clang/lib/Sema/SemaDeclCXX.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11391,7 +11391,9 @@ void Sema::CheckExplicitObjectMemberFunction(Declarator &D,
1139111391
<< ExplicitObjectParam->getSourceRange();
1139211392
}
1139311393

11394-
if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static) {
11394+
if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static ||
11395+
(D.getContext() == clang::DeclaratorContext::Member &&
11396+
D.isStaticMember())) {
1139511397
Diag(ExplicitObjectParam->getBeginLoc(),
1139611398
diag::err_explicit_object_parameter_nonmember)
1139711399
<< D.getSourceRange() << /*static=*/0 << IsLambda;

clang/test/SemaCXX/cxx2b-deducing-this.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ struct S {
1616
static void f(this auto); // expected-error{{an explicit object parameter cannot appear in a static function}}
1717
virtual void f(this S); // expected-error{{an explicit object parameter cannot appear in a virtual function}}
1818

19+
// new and delete are implicitly static
20+
void *operator new(this unsigned long); // expected-error{{an explicit object parameter cannot appear in a static function}}
21+
void operator delete(this void*); // expected-error{{an explicit object parameter cannot appear in a static function}}
22+
1923
void g(this auto) const; // expected-error{{explicit object member function cannot have 'const' qualifier}}
2024
void h(this auto) &; // expected-error{{explicit object member function cannot have '&' qualifier}}
2125
void i(this auto) &&; // expected-error{{explicit object member function cannot have '&&' qualifier}}

0 commit comments

Comments
 (0)