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 };
...

Reply via email to