diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -685,6 +685,8 @@ (`#64005 _`) - Fix crash on nested templated class with template function call. (`#61159 _`) +- Fix crash on use of a variadic overloaded operator. + (`#42535 _`) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -13997,6 +13997,10 @@ std::swap(Args[0], Args[1]); if (FnDecl) { + + if (FnDecl->isInvalidDecl()) + return ExprError(); + Expr *Base = nullptr; // We matched an overloaded operator. Build a call to that // operator. diff --git a/clang/test/SemaCXX/overloaded-operator-decl.cpp b/clang/test/SemaCXX/overloaded-operator-decl.cpp --- a/clang/test/SemaCXX/overloaded-operator-decl.cpp +++ b/clang/test/SemaCXX/overloaded-operator-decl.cpp @@ -58,3 +58,9 @@ A()(i); } } + +namespace GH42535 { +class E {}; +void operator+(E, ...) {} // expected-error{{overloaded 'operator+' cannot be variadic}} +void d() { E() + E(); } +}