aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2018-07-09 12:44:19 +0000
committerRainer Orth <ro@gcc.gnu.org>2018-07-09 12:44:19 +0000
commitc36c567c59336e3b611c2961864f567995f98051 (patch)
treee42fdfed0c9ead671f891146fd7da4b63bc4ba79 /gcc
parent56d04c75ef9df0e2c052c280cb8926e493edda6c (diff)
downloadgcc-c36c567c59336e3b611c2961864f567995f98051.zip
gcc-c36c567c59336e3b611c2961864f567995f98051.tar.gz
gcc-c36c567c59336e3b611c2961864f567995f98051.tar.bz2
Fix overflow handling in sparc.c:sparc_fold_builtin
* config/sparc/sparc.c (sparc_fold_builtin) <SPARC_BUILTIN_PDIST, SPARC_BUILTIN_PDISTN>: Adapt for signature change of wi::neg, wi::add. From-SVN: r262518
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/sparc/sparc.c9
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e4ecd4c..1b78c69 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-07-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config/sparc/sparc.c (sparc_fold_builtin) <SPARC_BUILTIN_PDIST,
+ SPARC_BUILTIN_PDISTN>: Adapt for signature change of wi::neg,
+ wi::add.
+
2018-07-09 Jakub Jelinek <jakub@redhat.com>
PR c/86420
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index d90a260..a9a02af 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -11854,16 +11854,19 @@ sparc_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED,
tree e0 = VECTOR_CST_ELT (arg0, i);
tree e1 = VECTOR_CST_ELT (arg1, i);
- bool neg1_ovf, neg2_ovf, add1_ovf, add2_ovf;
+ wi::overflow_type neg1_ovf, neg2_ovf, add1_ovf, add2_ovf;
tmp = wi::neg (wi::to_widest (e1), &neg1_ovf);
tmp = wi::add (wi::to_widest (e0), tmp, SIGNED, &add1_ovf);
if (wi::neg_p (tmp))
tmp = wi::neg (tmp, &neg2_ovf);
else
- neg2_ovf = false;
+ neg2_ovf = wi::OVF_NONE;
result = wi::add (result, tmp, SIGNED, &add2_ovf);
- overflow |= neg1_ovf | neg2_ovf | add1_ovf | add2_ovf;
+ overflow |= ((neg1_ovf != wi::OVF_NONE)
+ | (neg2_ovf != wi::OVF_NONE)
+ | (add1_ovf != wi::OVF_NONE)
+ | (add2_ovf != wi::OVF_NONE));
}
gcc_assert (!overflow);