]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: Fix GC with TU_LOCAL_ENTITY [PR119564]
authorNathaniel Shead <nathanieloshead@gmail.com>
Fri, 4 Apr 2025 01:24:10 +0000 (12:24 +1100)
committerNathaniel Shead <nathanieloshead@gmail.com>
Fri, 4 Apr 2025 23:30:33 +0000 (10:30 +1100)
When adding TU_LOCAL_ENTITY in r15-6379 I neglected to add it to
cp_tree_node_structure, so garbage collection was crashing on it.

PR c++/119564

gcc/cp/ChangeLog:

* decl.cc (cp_tree_node_structure): Add TU_LOCAL_ENTITY; fix
formatting.

gcc/testsuite/ChangeLog:

* g++.dg/modules/gc-3_a.C: New test.
* g++.dg/modules/gc-3_b.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/decl.cc
gcc/testsuite/g++.dg/modules/gc-3_a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/modules/gc-3_b.C [new file with mode: 0644]

index 2ed94fd786ce7532da6a1bfb773cb640b274f7e5..4e97093b1341d0e62be97963436d91321db383ca 100644 (file)
@@ -19834,14 +19834,14 @@ cp_tree_node_structure (union lang_tree_node * t)
 {
   switch (TREE_CODE (&t->generic))
     {
-    case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
+    case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
     case BASELINK:             return TS_CP_BASELINK;
-    case CONSTRAINT_INFO:       return TS_CP_CONSTRAINT_INFO;
+    case CONSTRAINT_INFO:      return TS_CP_CONSTRAINT_INFO;
     case DEFERRED_NOEXCEPT:    return TS_CP_DEFERRED_NOEXCEPT;
     case DEFERRED_PARSE:       return TS_CP_DEFERRED_PARSE;
     case IDENTIFIER_NODE:      return TS_CP_IDENTIFIER;
     case LAMBDA_EXPR:          return TS_CP_LAMBDA_EXPR;
-    case BINDING_VECTOR:               return TS_CP_BINDING_VECTOR;
+    case BINDING_VECTOR:       return TS_CP_BINDING_VECTOR;
     case OVERLOAD:             return TS_CP_OVERLOAD;
     case PTRMEM_CST:           return TS_CP_PTRMEM;
     case STATIC_ASSERT:                return TS_CP_STATIC_ASSERT;
@@ -19849,6 +19849,7 @@ cp_tree_node_structure (union lang_tree_node * t)
     case TEMPLATE_INFO:                return TS_CP_TEMPLATE_INFO;
     case TEMPLATE_PARM_INDEX:  return TS_CP_TPI;
     case TRAIT_EXPR:           return TS_CP_TRAIT_EXPR;
+    case TU_LOCAL_ENTITY:      return TS_CP_TU_LOCAL_ENTITY;
     case USERDEF_LITERAL:      return TS_CP_USERDEF_LITERAL;
     default:                   return TS_CP_GENERIC;
     }
diff --git a/gcc/testsuite/g++.dg/modules/gc-3_a.C b/gcc/testsuite/g++.dg/modules/gc-3_a.C
new file mode 100644 (file)
index 0000000..b4adb2a
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/119564
+// { dg-additional-options "-fmodules -Wtemplate-names-tu-local" }
+// { dg-module-cmi M }
+
+export module M;
+static void foo() {};  // { dg-message "declared" }
+template <typename> void bar() { foo(); }  // { dg-warning "TU-local" }
diff --git a/gcc/testsuite/g++.dg/modules/gc-3_b.C b/gcc/testsuite/g++.dg/modules/gc-3_b.C
new file mode 100644 (file)
index 0000000..1d1dc87
--- /dev/null
@@ -0,0 +1,4 @@
+// PR c++/119564
+// { dg-additional-options "-fmodules -fno-module-lazy --param=ggc-min-expand=0 --param=ggc-min-heapsize=0" }
+
+import M;