[Bug c++/68847] [6 Regression] ICE in cxx_eval_constant_expression on __atomic_compare_exchange (constexpr.c:3719) in c++
mpolacek at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jan 8 15:02:00 GMT 2016
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.)
More information about the Gcc-bugs
mailing list