diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2020-10-19 09:48:27 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2020-10-19 11:37:15 +0200 |
commit | 5b80069c7e65a3ed60ee16deac4a450a9c32efa6 (patch) | |
tree | 5fb15f141f9210cc3000530128906284d1eccf2f /gcc/range-op.cc | |
parent | 95f27849a580ac834d4f51a0642da9671f0a9dee (diff) | |
download | gcc-5b80069c7e65a3ed60ee16deac4a450a9c32efa6.zip gcc-5b80069c7e65a3ed60ee16deac4a450a9c32efa6.tar.gz gcc-5b80069c7e65a3ed60ee16deac4a450a9c32efa6.tar.bz2 |
Handle right shifts by zero in range-ops.
If the shift amount in operator_lshift::op1_range was zero, an invalid range
of [1, 0] was being created.
gcc/ChangeLog:
PR tree-optimization/97467
* range-op.cc (operator_lshift::op1_range): Handle shifts by 0.
gcc/testsuite/ChangeLog:
* gcc.dg/pr97467.c: New test.
Diffstat (limited to 'gcc/range-op.cc')
-rw-r--r-- | gcc/range-op.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/range-op.cc b/gcc/range-op.cc index 0efa001..30d2a4d 100644 --- a/gcc/range-op.cc +++ b/gcc/range-op.cc @@ -1579,6 +1579,11 @@ operator_lshift::op1_range (irange &r, wide_int shift = wi::to_wide (shift_amount); if (wi::lt_p (shift, 0, SIGNED)) return false; + if (shift == 0) + { + r = lhs; + return true; + } // Work completely in unsigned mode to start. tree utype = type; |