diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 231c5b5f709..a3af9cc248b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-11-26 Alan Modra + + * final.c: (insn_lengths): Make it an int *, so that large jump + tables don't overflow. + 2001-11-25 Joseph S. Myers * c-format.c (FMT_FLAG_DOLLAR_GAP_POINTER_OK): New. diff --git a/gcc/final.c b/gcc/final.c index 761bd7142ad..c7ad5e60a03 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -603,7 +603,7 @@ dbr_sequence_length () /* Arrays for insn lengths, and addresses. The latter is referenced by `insn_current_length'. */ -static short *insn_lengths; +static int *insn_lengths; #ifdef HAVE_ATTR_length varray_type insn_addresses_; @@ -1186,7 +1186,7 @@ shorten_branches (first) #ifdef HAVE_ATTR_length /* Allocate the rest of the arrays. */ - insn_lengths = (short *) xmalloc (max_uid * sizeof (short)); + insn_lengths = (int *) xmalloc (max_uid * sizeof (*insn_lengths)); insn_lengths_max_uid = max_uid; /* Syntax errors can lead to labels being outside of the main insn stream. Initialize insn_addresses, so that we get reproducible results. */