https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84947
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Version|unknown |8.0.1 Target Milestone|8.0 |--- --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- #if defined (__GNUC__) { /* Take the faster path if the implementation-defined bits it's relying on are implemented the way we expect them to be. Namely, conversion from unsigned to signed preserves bit pattern, and right shift of a signed value propagates the sign bit. We have to convert from signed to unsigned and back, because when left shifting signed values, any overflow is undefined behavior. */ gcc_checking_assert (prec < HOST_BITS_PER_WIDE_INT); int shift = HOST_BITS_PER_WIDE_INT - prec; return ((HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) src << shift)) >> shift; } #else so prec is zero for some reason?