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.