https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115641
Marek Polacek <mpolacek at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> --- It's the --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -4447,8 +4447,7 @@ simple_operand_p_2 (tree exp) { enum tree_code code; - if (TREE_SIDE_EFFECTS (exp) - || tree_could_trap_p (exp)) + if (TREE_SIDE_EFFECTS (exp) || generic_expr_could_trap_p (exp)) return false; while (CONVERT_EXPR_P (exp)) change. simple_condition_p gets ((short unsigned int) BIT_FIELD_REF <MEM <struct T> [(void *)&f ()], 16, 0> & 65535) != 513 and generic_expr_could_trap_p recurses down to tree_could_trap_p getting MEM <struct T> [(void *)&f ()] where we get the base which is "f ()" but DECL_SIZE_UNIT crashes on that.