diff options
author | Nathaniel Shead <nathanieloshead@gmail.com> | 2025-04-04 12:24:10 +1100 |
---|---|---|
committer | Nathaniel Shead <nathanieloshead@gmail.com> | 2025-04-05 10:30:33 +1100 |
commit | 337b9ff4854c6a7fa47860ce0acad82ffb4d39be (patch) | |
tree | 0445851702df75ccf5c1efaab8a995442b369e60 | |
parent | b8e8829cfb73d7aa009d387ab09bdbab221930d7 (diff) | |
download | gcc-337b9ff4854c6a7fa47860ce0acad82ffb4d39be.zip gcc-337b9ff4854c6a7fa47860ce0acad82ffb4d39be.tar.gz gcc-337b9ff4854c6a7fa47860ce0acad82ffb4d39be.tar.bz2 |
c++: Fix GC with TU_LOCAL_ENTITY [PR119564]
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>
-rw-r--r-- | gcc/cp/decl.cc | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/gc-3_a.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/gc-3_b.C | 4 |
3 files changed, 15 insertions, 3 deletions
diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 2ed94fd..4e97093 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 0000000..b4adb2a --- /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 0000000..1d1dc87 --- /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; |