diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -303,6 +303,8 @@ - Fix a failed assertion due to an invalid source location when trying to form a coverage report for an unresolved constructor expression. (`#62105 `_) +- Fix crash when member function contains invalid default argument. + (`#62122 `_) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -7383,6 +7383,7 @@ SourceLocation ArgStartLoc = NextToken().getLocation(); if (!ConsumeAndStoreInitializer(*DefArgToks, CIK_DefaultArgument)) { DefArgToks.reset(); + Diag(ArgStartLoc, diag::err_expected) << "initializer"; Actions.ActOnParamDefaultArgumentError(Param, EqualLoc); } else { Actions.ActOnParamUnparsedDefaultArgument(Param, EqualLoc, diff --git a/clang/test/Parser/cxx-member-initializers.cpp b/clang/test/Parser/cxx-member-initializers.cpp --- a/clang/test/Parser/cxx-member-initializers.cpp +++ b/clang/test/Parser/cxx-member-initializers.cpp @@ -108,4 +108,6 @@ // expected-error@-2 {{type name requires a specifier or qualifier}} // expected-error@-3 {{expected '>'}} // expected-note@-4 {{to match this '<'}} + + void n(int x = 1 ? 2) {} // expected-error {{expected initializer}} };