https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97004
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Tom de Vries from comment #1) > Tentative patch: > ... > diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c > index 0376ad6ce9f..26868590322 100644 > --- a/gcc/config/nvptx/nvptx.c > +++ b/gcc/config/nvptx/nvptx.c > @@ -2054,7 +2054,11 @@ nvptx_assemble_value (unsigned HOST_WIDE_INT val, > unsigned size) > > for (unsigned part = 0; size; size -= part) > { > - val >>= part * BITS_PER_UNIT; > + if (part == sizeof (val)) That assumes that CHAR_BIT == BITS_PER_UNIT, which is mostly the case, but shouldn't be relied on. Perhaps just use val >>= (part * BITS_PER_UNIT / 2); val >>= (part * BITS_PER_UNIT / 2); or if (part * BITS_PER_UNIT == sizeof (val) * CHAR_BIT) Though, as val is unsigned HOST_WIDE_INT, we already have a macro for that, so if (part * BITS_PER_UNIT == HOST_BITS_PER_WIDE_INT) ?