diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/final.c | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 231c5b5..a3af9cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-11-26 Alan Modra <amodra@bigpond.net.au> + + * final.c: (insn_lengths): Make it an int *, so that large jump + tables don't overflow. + 2001-11-25 Joseph S. Myers <jsm28@cam.ac.uk> * c-format.c (FMT_FLAG_DOLLAR_GAP_POINTER_OK): New. diff --git a/gcc/final.c b/gcc/final.c index 761bd71..c7ad5e6 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. */ |