diff options
author | Alan Modra <amodra@gmail.com> | 2019-06-04 03:05:47 +0930 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2019-06-03 11:35:47 -0600 |
commit | a0d87c29e29ba298f80e47fad57431ae3104447f (patch) | |
tree | 1f67eb71410c97fcac80dafc5aa3f008ebabd34e /gcc/bb-reorder.c | |
parent | 7cfe71d1d271cd6f5d181a75a25d535e67448f0d (diff) | |
download | gcc-a0d87c29e29ba298f80e47fad57431ae3104447f.zip gcc-a0d87c29e29ba298f80e47fad57431ae3104447f.tar.gz gcc-a0d87c29e29ba298f80e47fad57431ae3104447f.tar.bz2 |
bb-reorder.c (copy_bb_p): Don't overflow size calculation.
* bb-reorder.c (copy_bb_p): Don't overflow size calculation.
(get_uncond_jump_length): Assert length less than INT_MAX and
non-negative.
From-SVN: r271877
Diffstat (limited to 'gcc/bb-reorder.c')
-rw-r--r-- | gcc/bb-reorder.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index e4ae8b8..c21d204 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -1357,8 +1357,8 @@ connect_traces (int n_traces, struct trace *traces) static bool copy_bb_p (const_basic_block bb, int code_may_grow) { - int size = 0; - int max_size = uncond_jump_length; + unsigned int size = 0; + unsigned int max_size = uncond_jump_length; rtx_insn *insn; if (EDGE_COUNT (bb->preds) < 2) @@ -1376,7 +1376,11 @@ copy_bb_p (const_basic_block bb, int code_may_grow) FOR_BB_INSNS (bb, insn) { if (INSN_P (insn)) - size += get_attr_min_length (insn); + { + size += get_attr_min_length (insn); + if (size > max_size) + break; + } } if (size <= max_size) @@ -1385,7 +1389,7 @@ copy_bb_p (const_basic_block bb, int code_may_grow) if (dump_file) { fprintf (dump_file, - "Block %d can't be copied because its size = %d.\n", + "Block %d can't be copied because its size = %u.\n", bb->index, size); } @@ -1397,7 +1401,7 @@ copy_bb_p (const_basic_block bb, int code_may_grow) int get_uncond_jump_length (void) { - int length; + unsigned int length; start_sequence (); rtx_code_label *label = emit_label (gen_label_rtx ()); @@ -1405,6 +1409,7 @@ get_uncond_jump_length (void) length = get_attr_min_length (jump); end_sequence (); + gcc_assert (length < INT_MAX); return length; } |