diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2018-07-09 12:44:19 +0000 |
---|---|---|
committer | Rainer Orth <ro@gcc.gnu.org> | 2018-07-09 12:44:19 +0000 |
commit | c36c567c59336e3b611c2961864f567995f98051 (patch) | |
tree | e42fdfed0c9ead671f891146fd7da4b63bc4ba79 /gcc | |
parent | 56d04c75ef9df0e2c052c280cb8926e493edda6c (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 9 |
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); |