https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95690
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
(gdb) p t
$1 = <paren_expr 0x7ffff6d67940>
(gdb) p debug_generic_expr (t)
((erfc))
so that's the DECL_INITIAL of a CONST_DECL. The CONST_DECL is built that
way by the FE:
8833 /* Create a temporary var to hold the value. */
8834 if (TREE_CONSTANT (se->expr))
8835 {
8836 tree tmp = se->expr;
8837 STRIP_TYPE_NOPS (tmp);
8838 var = build_decl (input_location,
8839 CONST_DECL, NULL, TREE_TYPE (tmp));
8840 DECL_INITIAL (var) = tmp;
and the middle-end doesn't really expect PAREN_EXPRs. I don't see any
stripping of other codes on the path to the ICE so I'll amend what is already
there. But IMHO build_constant_desc shouldn't pass the constant expression
to be used as MEM_EXPR, instead passing down the type looks more appropriate
and future-proof...