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.

Reply via email to