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

--- Comment #7 from Xi Ruoyao <xry111 at gcc dot gnu.org> ---
Reduced test case also fails on x86_64:

char buf[1111];
char *archive_le16dec_filename = buf;
unsigned int archive_le16dec_end, archive_le16dec_fn_end,
    archive_le16dec_filename_size, archive_le16dec_offset;
char archive_le16dec_p[] = { 21, 0x7f };

[[gnu::noipa]]
void
archive_le16dec ()
{
  archive_le16dec_filename_size = (short)archive_le16dec_filename_size;
  unsigned char flagbits = 0, flagbyte;
  archive_le16dec_end = archive_le16dec_filename_size;
  archive_le16dec_fn_end = archive_le16dec_filename_size * 2;
  archive_le16dec_filename_size = flagbits = 0;
  while (archive_le16dec_offset < archive_le16dec_end
         && archive_le16dec_filename_size < archive_le16dec_fn_end)
    {
      if (!flagbits)
        {
          flagbyte = archive_le16dec_p[archive_le16dec_offset++];
          flagbits = 8;
        }
      flagbits -= 2;
      if (!(flagbyte >> flagbits & 3))
        archive_le16dec_filename_size++;
    }
}

int
main ()
{
  archive_le16dec_filename_size = 2;
  archive_le16dec ();
  if (archive_le16dec_filename_size != 1)
    __builtin_trap ();
}

Reply via email to