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...

Reply via email to