https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68847

--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
We ICE since the C++ delayed folding merge, because build_cxx_call now does
this for every argument of a built-in function:

 7743       /* We need to take care that values to BUILT_IN_NORMAL
 7744          are reduced.  */
 7745       for (i = 0; i < nargs; i++)
 7746         argarray[i] = maybe_constant_value (argarray[i]);

maybe_constant_value eventually leads to cxx_eval_constant_expression, but that
function doesn't handle IMPLICIT_CONV_EXPR.  I suppose it should, but the
question is whether to handle IMPLICIT_CONV_EXPR same as e.g. CONVERT_EXPR
(Honza's patch), or rather like MODOP_EXPR (~ treat the expression as
non-constant).  Both approaches fix the testcase and pass dg.exp.

Jason, would you have some advice?

(Also I wonder whether cxx_eval_constant_expression should handle e.g.
CAST_EXPR etc., or whether these expressions should never have gotten into
cxx_eval_constant_expression.)

Reply via email to