On 4/3/25 9:28 PM, Nathaniel Shead wrote:
Tested on x86_64-pc-linux-gnu (so far just modules.exp), OK for trunk if
full bootstrap+regtest succeeds?

OK.

-- >8 --

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.

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 <nathanielosh...@gmail.com>
---
  gcc/cp/decl.cc                        | 7 ++++---
  gcc/testsuite/g++.dg/modules/gc-3_a.C | 7 +++++++
  gcc/testsuite/g++.dg/modules/gc-3_b.C | 4 ++++
  3 files changed, 15 insertions(+), 3 deletions(-)
  create mode 100644 gcc/testsuite/g++.dg/modules/gc-3_a.C
  create mode 100644 gcc/testsuite/g++.dg/modules/gc-3_b.C

diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc
index 2ed94fd786c..4e97093b134 100644
--- a/gcc/cp/decl.cc
+++ b/gcc/cp/decl.cc
@@ -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
index 00000000000..b4adb2aa5a3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/gc-3_a.C
@@ -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
index 00000000000..1d1dc872eaf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/gc-3_b.C
@@ -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;

Reply via email to