diff options
author | Markus Trippelsdorf <markus@trippelsdorf.de> | 2016-11-30 07:30:55 +0000 |
---|---|---|
committer | Markus Trippelsdorf <trippels@gcc.gnu.org> | 2016-11-30 07:30:55 +0000 |
commit | ced17de64000713e99af200bb9ff468b907ec1f9 (patch) | |
tree | 58329b3b6437635ddd11d472f913badec576d090 /gcc/ipa-inline-transform.c | |
parent | a4f15a7d4557811b8e5fef05a105cd68daa41a84 (diff) | |
download | gcc-ced17de64000713e99af200bb9ff468b907ec1f9.zip gcc-ced17de64000713e99af200bb9ff468b907ec1f9.tar.gz gcc-ced17de64000713e99af200bb9ff468b907ec1f9.tar.bz2 |
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
Diffstat (limited to 'gcc/ipa-inline-transform.c')
0 files changed, 0 insertions, 0 deletions