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.