Commit a0d87c29 by Alan Modra Committed by Jeff Law

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
parent 7cfe71d1
2019-06-03 Alan Modra <amodra@gmail.com>
* bb-reorder.c (copy_bb_p): Don't overflow size calculation.
(get_uncond_jump_length): Assert length less than INT_MAX and
non-negative.
2019-06-03 Wilco Dijkstra <wdijkstr@arm.com> 2019-06-03 Wilco Dijkstra <wdijkstr@arm.com>
PR middle-end/64242 PR middle-end/64242
......
...@@ -1357,8 +1357,8 @@ connect_traces (int n_traces, struct trace *traces) ...@@ -1357,8 +1357,8 @@ connect_traces (int n_traces, struct trace *traces)
static bool static bool
copy_bb_p (const_basic_block bb, int code_may_grow) copy_bb_p (const_basic_block bb, int code_may_grow)
{ {
int size = 0; unsigned int size = 0;
int max_size = uncond_jump_length; unsigned int max_size = uncond_jump_length;
rtx_insn *insn; rtx_insn *insn;
if (EDGE_COUNT (bb->preds) < 2) if (EDGE_COUNT (bb->preds) < 2)
...@@ -1376,7 +1376,11 @@ copy_bb_p (const_basic_block bb, int code_may_grow) ...@@ -1376,7 +1376,11 @@ copy_bb_p (const_basic_block bb, int code_may_grow)
FOR_BB_INSNS (bb, insn) FOR_BB_INSNS (bb, insn)
{ {
if (INSN_P (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) if (size <= max_size)
...@@ -1385,7 +1389,7 @@ copy_bb_p (const_basic_block bb, int code_may_grow) ...@@ -1385,7 +1389,7 @@ copy_bb_p (const_basic_block bb, int code_may_grow)
if (dump_file) if (dump_file)
{ {
fprintf (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); bb->index, size);
} }
...@@ -1397,7 +1401,7 @@ copy_bb_p (const_basic_block bb, int code_may_grow) ...@@ -1397,7 +1401,7 @@ copy_bb_p (const_basic_block bb, int code_may_grow)
int int
get_uncond_jump_length (void) get_uncond_jump_length (void)
{ {
int length; unsigned int length;
start_sequence (); start_sequence ();
rtx_code_label *label = emit_label (gen_label_rtx ()); rtx_code_label *label = emit_label (gen_label_rtx ());
...@@ -1405,6 +1409,7 @@ get_uncond_jump_length (void) ...@@ -1405,6 +1409,7 @@ get_uncond_jump_length (void)
length = get_attr_min_length (jump); length = get_attr_min_length (jump);
end_sequence (); end_sequence ();
gcc_assert (length < INT_MAX);
return length; return length;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment