aboutsummaryrefslogtreecommitdiff
path: root/gcc/bb-reorder.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-06-04 03:05:47 +0930
committerJeff Law <law@gcc.gnu.org>2019-06-03 11:35:47 -0600
commita0d87c29e29ba298f80e47fad57431ae3104447f (patch)
tree1f67eb71410c97fcac80dafc5aa3f008ebabd34e /gcc/bb-reorder.c
parent7cfe71d1d271cd6f5d181a75a25d535e67448f0d (diff)
downloadgcc-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.c15
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;
}