aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Trippelsdorf <markus@trippelsdorf.de>2016-11-28 18:33:19 +0000
committerMarkus Trippelsdorf <trippels@gcc.gnu.org>2016-11-28 18:33:19 +0000
commit82979abd860fb54c2d0ab0a1001d86ec69f71ae2 (patch)
treee6743c2460e907d61bb919533385719fc850c395
parent80cf1b8b60a246866808ee2e14cfcbe8f3bf7de0 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c4
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;
}