[clang] a8a766d - [clang] Fix a crash when default argument is passed to an explicit object parameter (#177534)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Jan 31 08:45:34 PST 2026
Author: Kartik
Date: 2026-01-31T17:45:29+01:00
New Revision: a8a766df2290bd629e23bca28fd4159e2e1d4b91
URL: https://github.com/llvm/llvm-project/commit/a8a766df2290bd629e23bca28fd4159e2e1d4b91
DIFF: https://github.com/llvm/llvm-project/commit/a8a766df2290bd629e23bca28fd4159e2e1d4b91.diff
LOG: [clang] Fix a crash when default argument is passed to an explicit object parameter (#177534)
Fixes #176639.
Added:
Modified:
clang/docs/ReleaseNotes.rst
clang/lib/Sema/SemaDeclCXX.cpp
clang/test/SemaCXX/cxx2b-deducing-this.cpp
Removed:
################################################################################
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 2e7a9fff3161b..fe573afc99422 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -232,6 +232,7 @@ Bug Fixes to Attribute Support
Bug Fixes to C++ Support
^^^^^^^^^^^^^^^^^^^^^^^^
- Fixed a crash when instantiating ``requires`` expressions involving substitution failures in C++ concepts. (#GH176402)
+- Fixed a crash when a default argument is passed to an explicit object parameter. (#GH176639)
- Fixed a crash when diagnosing an invalid static member function with an explicit object parameter (#GH177741)
Bug Fixes to AST Handling
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index c96189172a010..5837ecd6b9163 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -11600,6 +11600,7 @@ void Sema::CheckExplicitObjectMemberFunction(Declarator &D,
Diag(ExplicitObjectParam->getLocation(),
diag::err_explicit_object_default_arg)
<< ExplicitObjectParam->getSourceRange();
+ D.setInvalidType();
}
if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static ||
diff --git a/clang/test/SemaCXX/cxx2b-deducing-this.cpp b/clang/test/SemaCXX/cxx2b-deducing-this.cpp
index 0d472a608fcca..995397f65b20c 100644
--- a/clang/test/SemaCXX/cxx2b-deducing-this.cpp
+++ b/clang/test/SemaCXX/cxx2b-deducing-this.cpp
@@ -1431,6 +1431,30 @@ namespace ConstexprBacktrace {
// expected-note {{in call to}}
}
+namespace GH176639 {
+
+struct S {
+ void operator()(this S =) // expected-error {{the explicit object parameter cannot have a default argument}}
+ // expected-error at -1 {{expected ';' at end of declaration list}}
+ // expected-error at -2 {{expected expression}}
+};
+
+void foo() {
+ S s{};
+ s(0); // expected-error {{no matching function for call to object of type 'S'}}
+}
+
+struct S2 {
+ void operator()(this S2 = S2 {}){} // expected-error {{the explicit object parameter cannot have a default argument}}
+};
+
+void foo2() {
+ S2 s{};
+ s(0); // expected-error {{no matching function for call to object of type 'S2'}}
+}
+
+}
+
namespace GH177741 {
struct S {
More information about the cfe-commits
mailing list