https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90840

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P2
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-06-12
          Component|rtl-optimization            |middle-end
      Known to work|                            |4.6.3
   Target Milestone|---                         |8.4
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  We end up in

#5  0x0000000000c39952 in expand_assignment (to=<mem_ref 0x7ffff6976370>, 
    from=<call_expr 0x7ffff69928a0>, nontemporal=false)
    at /space/rguenther/src/svn/trunk2/gcc/expr.c:5198
5198                                      nontemporal, reversep);
(gdb) l
5193                                     false, nontemporal, reversep);
5194              else if (known_le (bitpos + bitsize, inner_bitsize))
5195                result = store_field (XEXP (to_rtx, 0), bitsize, bitpos,
5196                                      bitregion_start, bitregion_end,
5197                                      mode1, from, get_alias_set (to),
5198                                      nontemporal, reversep);

with

(gdb) p debug_rtx (to_rtx)
(concat:XC (reg/v:XF 82 [ c ])
    (reg/v:XF 83 [ c+12 ]))
$3 = void

for expanding

MEM[(struct S *)&c] = f (); [return slot optimization]

ICEing here:

#2  0x0000000000c0c8dc in store_bit_field_1 (str_rtx=0x7ffff6984cf0, 
    bitsize=..., bitnum=..., bitregion_start=..., bitregion_end=..., 
    fieldmode=E_BLKmode, value=0x7ffff699e228, reverse=false, fallback_p=true)
    at /space/rguenther/src/svn/trunk2/gcc/expmed.c:842
842             op0 = gen_lowpart (op0_mode.require (), op0);

with op0_mode not present.

(gdb) p debug_rtx (op0)
(reg/v:XF 82 [ c ])

  /* Make sure we are playing with integral modes.  Pun with subregs
     if we aren't.  This must come after the entire register case above,
     since that case is valid for any mode.  The following cases are only
     valid for integral modes.  */
  opt_scalar_int_mode op0_mode = int_mode_for_mode (GET_MODE (op0));

fieldmode is BLKmode.

Reply via email to