c++: Fix consteval operator handling.

We were crashing trying to find the CALL_EXPR in the result of a call to a
consteval operator.

gcc/cp/ChangeLog:

	* call.c (build_new_op_1): Don't look for a CALL_EXPR when
	calling a consteval function.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/consteval17.C: New test.
This commit is contained in:
Jason Merrill 2020-06-16 00:19:53 -04:00
parent da2c9054f1
commit 14c831f5ef
2 changed files with 12 additions and 1 deletions

View File

@ -6341,7 +6341,7 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
result = build_over_call (cand, LOOKUP_NORMAL, ocomplain);
}
if (trivial_fn_p (cand->fn))
if (trivial_fn_p (cand->fn) || DECL_IMMEDIATE_FUNCTION_P (cand->fn))
/* There won't be a CALL_EXPR. */;
else if (result && result != error_mark_node)
{

View File

@ -0,0 +1,11 @@
// { dg-do compile { target c++20 } }
struct A
{
consteval int operator+() { return 42; }
};
int main()
{
+A();
}