https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123578
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
With little debugging help:
--- gcc/cp/tree.cc.jj 2026-01-13 17:06:38.000000000 +0100
+++ gcc/cp/tree.cc 2026-01-13 19:54:48.101387672 +0100
@@ -2863,9 +2863,15 @@ cxx_printable_name_internal (tree decl,
gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
}
+FILE *f = fopen ("/tmp/ring", "a");
+fprintf (f, "free %d %p\n", ring_counter, print_ring[ring_counter]);
+
free (print_ring[ring_counter]);
print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate));
+fprintf (f, "alloc %d %p\n", ring_counter, print_ring[ring_counter]);
+fclose (f);
+
uid_ring[ring_counter] = DECL_UID (decl);
trans_ring[ring_counter] = translate;
return print_ring[ring_counter];
this seems to be recursion which the function is clearly not prepared for:
...
free 0 0x3de27160
alloc 0 0x3de22290
free 1 0x3de274a0
alloc 1 0x3de26fd0
free 2 0x3de208f0
alloc 2 0x3de27160
free 3 0x3de272e0
alloc 2 0x3dd7c640
free 3 0x3de272e0