https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97004
--- Comment #1 from Tom de Vries <vries at gcc dot gnu.org> --- 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)) + /* Avoid undefined behaviour. */ + val = 0; + else + val >>= (part * BITS_PER_UNIT); part = init_frag.size - init_frag.offset; part = MIN (part, size); ... And we have: ... // BEGIN GLOBAL VAR DEF: g .visible .global .align 8 .u64 g[2] = { 9, 0 }; ...