------- Comment #1 from rguenth at gcc dot gnu dot org  2006-10-23 10:14 -------
Slightly more reduced:

void stpi_unpack_16_1(int length, unsigned char *out, unsigned char bit)
{
  unsigned char tempin;
  unsigned char temp[16];
  for (bit = 128; length > 0; length--) {
    if (tempin & 128)
      temp[0] |= bit;
    else
      {
        *out++ = temp[1];
        *out++ = temp[2];
        *out++ = temp[3];
        *out++ = temp[4];
        *out++ = temp[5];
        *out++ = temp[6];
        *out++ = temp[7];
        *out++ = temp[9];
        *out++ = temp[10];
        *out++ = temp[11];
        *out++ = temp[12];
        *out++ = temp[13];
        *out++ = temp[14];
        *out++ = temp[15];
        __builtin_memset (temp, 0, 16);
     }
  }
}

it ICEs on

          /* We track only variables whose size is <= MAX_VAR_PARTS bytes
             thus there are at most MAX_VAR_PARTS different offsets.  */
          gcc_assert (var->n_var_parts < MAX_VAR_PARTS);

because var->n_var_parts is == MAX_VAR_PARTS.  It looks like the analysis
part is wrong in trying to track temp[].


-- 


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

Reply via email to