diff options
author | Markus Trippelsdorf <markus@trippelsdorf.de> | 2016-11-28 18:33:19 +0000 |
---|---|---|
committer | Markus Trippelsdorf <trippels@gcc.gnu.org> | 2016-11-28 18:33:19 +0000 |
commit | 82979abd860fb54c2d0ab0a1001d86ec69f71ae2 (patch) | |
tree | e6743c2460e907d61bb919533385719fc850c395 | |
parent | 80cf1b8b60a246866808ee2e14cfcbe8f3bf7de0 (diff) | |
download | gcc-82979abd860fb54c2d0ab0a1001d86ec69f71ae2.zip gcc-82979abd860fb54c2d0ab0a1001d86ec69f71ae2.tar.gz gcc-82979abd860fb54c2d0ab0a1001d86ec69f71ae2.tar.bz2 |
Fix PR78556 - left shift of negative values
Running bootstrap-ubsan on ppc64le shows many instances of e.g.:
config/rs6000/rs6000.c:6217:36: runtime error: left shift of negative value -12301
PR target/78556
* config/rs6000/rs6000.c (vspltis_constant): Add casts to avoid
left shifting of negative values.
From-SVN: r242928
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 4 |
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ded5970..41dcb5d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-11-28 Markus Trippelsdorf <markus@trippelsdorf.de> + + PR target/78556 + * config/rs6000/rs6000.c (vspltis_constant): Add casts to avoid + left shifting of negative values. + 2016-11-28 Jakub Jelinek <jakub@redhat.com> PR fortran/78298 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 6c28e6aa..dfb5dc8 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -6214,7 +6214,9 @@ vspltis_constant (rtx op, unsigned step, unsigned copies) bitsize /= 2; small_val = splat_val >> bitsize; mask >>= bitsize; - if (splat_val != ((small_val << bitsize) | (small_val & mask))) + if (splat_val != ((HOST_WIDE_INT) + ((unsigned HOST_WIDE_INT) small_val << bitsize) + | (small_val & mask))) return false; splat_val = small_val; } |