diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -7786,7 +7786,8 @@ Method->getType()->castAs())) return ExprError(); - return CE; + return CheckForImmediateInvocation(MaybeBindToTemporary(CE), + CE->getMethodDecl()); } ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand, diff --git a/clang/test/CodeGenCXX/cxx2a-consteval.cpp b/clang/test/CodeGenCXX/cxx2a-consteval.cpp --- a/clang/test/CodeGenCXX/cxx2a-consteval.cpp +++ b/clang/test/CodeGenCXX/cxx2a-consteval.cpp @@ -210,3 +210,15 @@ AggCtor C(i); return C.a + C.b; } + +struct UserConv { + consteval operator int() const noexcept { return 42; } +}; + +// EVAL-FN-LABEL: @_Z13test_UserConvv( +// EVAL-FN-NEXT: entry: +// EVAL-FN-NEXT: ret i32 42 +// +int test_UserConv() { + return UserConv(); +}