Fix overflow handling in sparc.c:sparc_fold_builtin
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Mon, 9 Jul 2018 12:44:19 +0000 (12:44 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Mon, 9 Jul 2018 12:44:19 +0000 (12:44 +0000)
* 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

gcc/ChangeLog
gcc/config/sparc/sparc.c

index e4ecd4cdd27cacf172f3adfc220c23549e9d3981..1b78c69a987088c797a9ef1b13d4c0b3bfd7a699 100644 (file)
@@ -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
index d90a260785c38e13d467dfa06f676dd41808f8b4..a9a02afa7dca312bc33a5ad21f4e10f0cb19fd20 100644 (file)
@@ -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);