https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121724
Nathaniel Shead <nshead at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Keywords| |rejects-valid
CC| |nshead at gcc dot gnu.org
Ever confirmed|0 |1
Last reconfirmed| |2025-08-31
--- Comment #1 from Nathaniel Shead <nshead at gcc dot gnu.org> ---
Confirmed. With a checking build the DECL_MODULE_PURVIEW_P assertion here
fails when building foo:
/* Namespace, walk exactly once. */
data->met_namespace = true;
if (data->hash->add_namespace_entities (decl, data->partitions))
{
/* It contains an exported thing, so it is exported. */
gcc_checking_assert (DECL_MODULE_PURVIEW_P (decl));
gcc_checking_assert (TREE_PUBLIC (decl) || header_module_p ());
DECL_MODULE_EXPORT_P (decl) = true;
}
foo.cc:8:8: internal compiler error: in add_binding_entity, at
cp/module.cc:14659
8 | export module foo;
| ^~~~~~
0x3d0c265 internal_error(char const*, ...)
../../gcc/gcc/diagnostic-global-context.cc:534
0x3d1b364 fancy_abort(char const*, int, char const*)
../../gcc/gcc/diagnostics/context.cc:1687
0x1233e73 depset::hash::add_binding_entity(tree_node*, WMB_Flags, void*)
../../gcc/gcc/cp/module.cc:14659
0x1279f70 walk_module_binding(tree_node*, bitmap_head*, bool (*)(tree_node*,
WMB_Flags, void*), void*)
../../gcc/gcc/cp/name-lookup.cc:4314
0x1234136 depset::hash::add_namespace_entities(tree_node*, bitmap_head*)
../../gcc/gcc/cp/module.cc:14700
0x1233e0a depset::hash::add_binding_entity(tree_node*, WMB_Flags, void*)
../../gcc/gcc/cp/module.cc:14656
0x1279f70 walk_module_binding(tree_node*, bitmap_head*, bool (*)(tree_node*,
WMB_Flags, void*), void*)
../../gcc/gcc/cp/name-lookup.cc:4314
0x1234136 depset::hash::add_namespace_entities(tree_node*, bitmap_head*)
../../gcc/gcc/cp/module.cc:14700
0x1247090 module_state::write_begin(elf_out*, cpp_reader*,
module_state_config&, unsigned int&)
../../gcc/gcc/cp/module.cc:20249
0x124f182 finish_module_processing(cpp_reader*)
../../gcc/gcc/cp/module.cc:22800
0x11605ba c_parse_final_cleanups()
../../gcc/gcc/cp/decl2.cc:5799
0x157b062 c_common_parse_file()
../../gcc/gcc/c-family/c-opts.cc:1426
It looks like the issue is we mark B as exported but don't correctly mark its
containing inline namespace as exported; we probably need to walk up the tree
until we reach the parent namespace and mark them all as exported (and purview)
too.