public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r9-9391] wide-int: Fix up set_bit_large
@ 2021-04-20 23:29 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2021-04-20 23:29 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:0fbe916a1e4630ef706946f949759c3c0813cf16

commit r9-9391-g0fbe916a1e4630ef706946f949759c3c0813cf16
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Wed Oct 28 10:24:20 2020 +0100

    wide-int: Fix up set_bit_large
    
    > >> wide_int new_lb = wi::set_bit (r.lower_bound (0), 127)
    > >>
    > >> and creates the value:
    > >>
    > >> p new_lb
    > >> {<wide_int_storage> = {val = {-65535, -1, 0}, len = 2, precision = 128},
    > >> static is_sign_extended = true}
    > >
    > > This is non-canonical and so invalid, if the low HWI has the MSB set
    > > and the high HWI is -1, it should have been just
    > > val = {-65535}, len = 1, precision = 128}
    > >
    > > I guess the bug is that wi::set_bit_large doesn't call canonize.
    >
    > Yeah, looks like a micro-optimisation gone wrong.
    
    2020-10-28  Jakub Jelinek  <jakub@redhat.com>
    
            * wide-int.cc (wi::set_bit_large): Call canonize unless setting
            msb bit and clearing bits above it.
    
    (cherry picked from commit e41011e5edcd9606573d3450d98512450dddca77)

Diff:
---
 gcc/wide-int.cc | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/gcc/wide-int.cc b/gcc/wide-int.cc
index c2dfe85f2f0..fb2f442e89c 100644
--- a/gcc/wide-int.cc
+++ b/gcc/wide-int.cc
@@ -702,8 +702,11 @@ wi::set_bit_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
       /* If the bit we just set is at the msb of the block, make sure
 	 that any higher bits are zeros.  */
       if (bit + 1 < precision && subbit == HOST_BITS_PER_WIDE_INT - 1)
-	val[len++] = 0;
-      return len;
+	{
+	  val[len++] = 0;
+	  return len;
+	}
+      return canonize (val, len, precision);
     }
   else
     {


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-04-20 23:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-20 23:29 [gcc r9-9391] wide-int: Fix up set_bit_large Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).