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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |vmakarov at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
static void
dfa_insn_code_enlarge (int uid)
{
  int i = dfa_insn_codes_length;
  dfa_insn_codes_length = 2 * uid;
  dfa_insn_codes = XRESIZEVEC (int, dfa_insn_codes,
                 dfa_insn_codes_length);
  for (; i < dfa_insn_codes_length; i++)
    dfa_insn_codes[i] = -1;
}

So, already when uid is 1 << 30 or larger, 2 * uid will overflow.
As no INSN_UID can be larger than INT_MAX and when that wraps around, all bets
are off,
perhaps we just want
  dfa_insn_codes_length = MIN (INT_MAX, HOST_WIDE_INT_C (2) * uid);
or so?

Reply via email to