https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97596

--- Comment #2 from Andrew Macleod <amacleod at redhat dot com> ---
This should be fixed with:

commit 279a9ce9d545f65a0bb1bc4564abafabfc25f82d
Author: Jakub Jelinek <ja...@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  <ja...@redhat.com>

            * wide-int.cc (wi::set_bit_large): Call canonize unless setting
            msb bit and clearing bits above it.

Reply via email to