Commit f5dffc0b by Markus Trippelsdorf Committed by Markus Trippelsdorf

Fix PR61657 (undefined behavior in loop-iv.c)

bootstrap-ubsan shows:
 loop-iv.c:2626:14: runtime error: signed integer overflow: 9223372036854775806 - -9223372036854775808 cannot be represented in type 'long int'

Fixed by moving the variables in question from signed to unsigned.

	PR rtl-optimization/61657
	* loop-iv.c (iv_number_of_iterations): Declare up and down as
	unsigned. Remove superflous uint64_t cast.

From-SVN: r227075
parent cf6a9610
2015-08-21 Markus Trippelsdorf <markus@trippelsdorf.de>
PR rtl-optimization/61657
* loop-iv.c (iv_number_of_iterations): Declare up and down as
unsigned. Remove superflous uint64_t cast.
2014-08-21 Felix Yang <felix.yang@huawei.com>
Jiji Jiang <jiangjiji@huawei.com>
......
......@@ -2330,8 +2330,8 @@ iv_number_of_iterations (struct loop *loop, rtx_insn *insn, rtx condition,
enum rtx_code cond;
machine_mode mode, comp_mode;
rtx mmin, mmax, mode_mmin, mode_mmax;
uint64_t s, size, d, inv, max;
int64_t up, down, inc, step_val;
uint64_t s, size, d, inv, max, up, down;
int64_t inc, step_val;
int was_sharp = false;
rtx old_niter;
bool step_is_pow2;
......@@ -2621,7 +2621,7 @@ iv_number_of_iterations (struct loop *loop, rtx_insn *insn, rtx condition,
down = INTVAL (CONST_INT_P (iv0.base)
? iv0.base
: mode_mmin);
max = (uint64_t) (up - down) / inc + 1;
max = (up - down) / inc + 1;
if (!desc->infinite
&& !desc->assumptions)
record_niter_bound (loop, max, false, true);
......
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