------- Comment #1 from rguenth at gcc dot gnu dot org  2008-10-19 12:40 -------
Confirmed.

We try to expand

  return (unsigned int) VIEW_CONVERT_EXPR<struct
  {
    char dummy[8];
    <unnamed-unsigned:7> yyy;
  }>(arg).yyy;

which is SRAed from the gimplified memcpy

  copy = VIEW_CONVERT_EXPR<struct
  {
    char dummy[8];
    <unnamed-unsigned:7> yyy;
  }>(arg);

to

<bb 2>:
  copy$yyy_5 = 0;
  copy$dummy$7_6 = VIEW_CONVERT_EXPR<struct
  {
    char dummy[8];
    <unnamed-unsigned:7> yyy;
  }>(arg_4(D)).dummy[7];
...
  SR.9_14 = VIEW_CONVERT_EXPR<struct
  {
    char dummy[8];
    <unnamed-unsigned:7> yyy;
  }>(arg_4(D)).yyy;
  copy$yyy_15 = SR.9_14;
  SR.10_16 = copy$yyy_15;
  D.1204_1 = SR.10_16;
  D.1203_2 = (unsigned int) D.1204_1;
  return D.1203_2;


It seems extract_bitfield_1 doesn't have a fallback path going through memory:

1261      /* Make sure we are playing with integral modes.  Pun with subregs
1262         if we aren't.  */
1263      {
1264        enum machine_mode imode = int_mode_for_mode (GET_MODE (op0));
1265        if (imode != GET_MODE (op0))
(gdb) l
1266          {
1267            if (MEM_P (op0))
1268              op0 = adjust_address (op0, imode, 0);
1269            else
1270              {
1271                gcc_assert (imode != BLKmode);

obviously fails on i?86 with

(gdb) call debug_rtx (op0)
(reg/v:XF 59 [ arg ])

simply not going down this path and relying on the fallback seems to work.


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
          Component|c                           |middle-end
     Ever Confirmed|0                           |1
           Keywords|                            |ice-on-valid-code
      Known to fail|                            |4.3.2 4.4.0
      Known to work|                            |4.2.4
   Last reconfirmed|0000-00-00 00:00:00         |2008-10-19 12:40:45
               date|                            |
            Summary|ICE in extract_bit_field_1  |[4.3/4.4 Regression] ICE in
                   |                            |extract_bit_field_1
   Target Milestone|---                         |4.3.3


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37870

Reply via email to