Fix PR78588 - rtlanal.c:5210:38: runtime error: shift exponent 4294967295 is too large for 64-bit type
Building gcc with -fsanitize=undefined shows: rtlanal.c:5210:38: runtime error: shift exponent 4294967295 is too large for 64-bit type 'long unsigned int' This happens because if_then_else_cond() in combine.c calls num_sign_bit_copies() in rtlanal.c with mode==BLKmode. 5205 bitwidth = GET_MODE_PRECISION (mode); 5206 if (bitwidth > HOST_BITS_PER_WIDE_INT) 5207 return 1; 5208 5209 nonzero = nonzero_bits (x, mode); 5210 return nonzero & (HOST_WIDE_INT_1U << (bitwidth - 1)) 5211 ? 1 : bitwidth - floor_log2 (nonzero) - 1; This causes (bitwidth - 1) to wrap around. PR rtl-optimization/78588 * combine.c (if_then_else_cond): Also guard against BLKmode. * rtlanal.c (num_sign_bit_copies1): Add assert. From-SVN: r242997
This commit is contained in:
parent
a4f15a7d45
commit
ced17de640
|
@ -1,3 +1,9 @@
|
|||
2016-11-30 Markus Trippelsdorf <markus@trippelsdorf.de>
|
||||
|
||||
PR rtl-optimization/78588
|
||||
* combine.c (if_then_else_cond): Also guard against BLKmode.
|
||||
* rtlanal.c (num_sign_bit_copies1): Add assert.
|
||||
|
||||
2016-11-29 Jeff Law <law@redhat.com>
|
||||
|
||||
* common/config/arc/arc-common.c (arc_handle_option): Remove unused
|
||||
|
|
|
@ -9176,7 +9176,7 @@ if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse)
|
|||
/* If X is known to be either 0 or -1, those are the true and
|
||||
false values when testing X. */
|
||||
else if (x == constm1_rtx || x == const0_rtx
|
||||
|| (mode != VOIDmode
|
||||
|| (mode != VOIDmode && mode != BLKmode
|
||||
&& num_sign_bit_copies (x, mode) == GET_MODE_PRECISION (mode)))
|
||||
{
|
||||
*ptrue = constm1_rtx, *pfalse = const0_rtx;
|
||||
|
|
|
@ -4840,6 +4840,8 @@ num_sign_bit_copies1 (const_rtx x, machine_mode mode, const_rtx known_x,
|
|||
if (mode == VOIDmode)
|
||||
mode = GET_MODE (x);
|
||||
|
||||
gcc_checking_assert (mode != BLKmode);
|
||||
|
||||
if (mode == VOIDmode || FLOAT_MODE_P (mode) || FLOAT_MODE_P (GET_MODE (x))
|
||||
|| VECTOR_MODE_P (GET_MODE (x)) || VECTOR_MODE_P (mode))
|
||||
return 1;
|
||||
|
|
Loading…
Reference in New Issue