https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113360
--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
The "deducing from brace-enclosed initializer" error is emitted during parsing
from listify. The body of init_list is not potentially-constant (due to
erroneous FOR_COND), so we register_constexpr_fundef it with result ==
error_mark_node.
require_rvalue_constant_expression in finish_static_assert thinks init_list is
potentially-constant, so we call cxx_constant_value. new_call.fundef->result
is error_mark_node so we don't bother evaluating the body. We call
explain_invalid_constexpr_fn but that has nothing to say, so we end up with a
missing reason.
But we already said what went wrong, so we shouldn't repeat it here anyway.
The body is:
{
int total = 0;
<<cleanup_point int total = 0;>>;
{
int x = <<< error >>>;
<<< error >>> __for_range;
<<< error >>> __for_begin;
<<< error >>> __for_end;
<<< Unknown tree: for_stmt
<<< error >>>
<<< error >>>
<<cleanup_point int x = <<< error >>>;>>;
<<cleanup_point <<< Unknown tree: expr_stmt
(void) (total = total + VIEW_CONVERT_EXPR<int>(x)) >>>>>;
>>>;
}
return <retval> = VIEW_CONVERT_EXPR<int>(total) == 6;
}
Can be reproduced in C++20 with -Wno-invalid-constexpr.