https://gcc.gnu.org/g:959af6f669e466fd6300a3f5f25dcf44b1c0d158

commit r13-10068-g959af6f669e466fd6300a3f5f25dcf44b1c0d158
Author: Iain Buclaw <[email protected]>
Date:   Thu Jan 29 18:07:57 2026 +0100

    d: Fix infinite loop in dump_generic_node [PR123264]
    
            PR d/123264
    
    gcc/d/ChangeLog:
    
            * types.cc (finish_aggregate_type): Propagate struct TYPE_NAME to 
all
            TYPE_NEXT_VARIANT types.
    
    gcc/testsuite/ChangeLog:
    
            * gdc.dg/pr123264.d: New test.
    
    (cherry picked from commit 94d887ec2bab35e6eb17f68848a917689526c4e0)

Diff:
---
 gcc/d/types.cc                  | 1 +
 gcc/testsuite/gdc.dg/pr123264.d | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/gcc/d/types.cc b/gcc/d/types.cc
index 19329b210707..27fbe715c89b 100644
--- a/gcc/d/types.cc
+++ b/gcc/d/types.cc
@@ -707,6 +707,7 @@ finish_aggregate_type (unsigned structsize, unsigned 
alignsize, tree type)
       if (t == type)
        continue;
 
+      TYPE_NAME (t) = TYPE_NAME (type);
       TYPE_FIELDS (t) = TYPE_FIELDS (type);
       TYPE_LANG_SPECIFIC (t) = TYPE_LANG_SPECIFIC (type);
       TYPE_SIZE (t) = TYPE_SIZE (type);
diff --git a/gcc/testsuite/gdc.dg/pr123264.d b/gcc/testsuite/gdc.dg/pr123264.d
new file mode 100644
index 000000000000..a786c054e74c
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/pr123264.d
@@ -0,0 +1,8 @@
+// { dg-do compile }
+// { dg-options "-fdump-tree-original" }
+struct S123264
+{
+    void infinite(const S123264) { }
+    auto fn = &infinite;
+}
+// { dg-final { scan-tree-dump "const struct S123264" "original" } }

Reply via email to