https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118415

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Minimal patch could be
--- gcc/expr.cc.jj      2025-01-08 10:05:24.498994763 +0100
+++ gcc/expr.cc 2025-01-11 13:31:34.608998939 +0100
@@ -14304,12 +14304,17 @@ generate_crc_table (unsigned HOST_WIDE_I
 {
   gcc_assert (crc_bits <= 64);

-  /* Buf size - 24 letters + 6 '_'
+  /* Buf size - 26 letters + 6 '_'
      + 20 numbers (2 for crc bit size + 2 for 0x + 16 for 64-bit polynomial)
      + 1 for \0.  */
-  char buf[51];
-  sprintf (buf, "crc_table_for_crc_%u_polynomial_" HOST_WIDE_INT_PRINT_HEX,
+  char buf[sizeof ("__crc_table_for_crc__polynomial_") + 20];
+  sprintf (buf, "__crc_table_for_crc_%u_polynomial_" HOST_WIDE_INT_PRINT_HEX,
           crc_bits, polynom);
+#if !defined (NO_DOT_IN_LABEL)
+  buf[sizeof ("__crc_table") - 1] = '.';
+#elif !defined (NO_DOLLAR_IN_LABEL)
+  buf[sizeof ("__crc_table") - 1] = '$';
+#endif

   tree id = maybe_get_identifier (buf);
   if (id)

though that is solely about the name.
I'm really surprised by
  if (TREE_PUBLIC (id))
    {
      TREE_PUBLIC (decl) = 1;
      make_decl_one_only (decl, DECL_ASSEMBLER_NAME (decl));
    }
since when IDENTIFIER_NODE should have TREE_PUBLIC set on it and what would do
that?

Reply via email to