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@-1 {{expected ';' at end of declaration list}} + // expected-error@-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 { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
