On 5/28/26 2:48 PM, yxj-github-437 wrote:
I try compile reflection test code with std module without
-freflection but build std module with -freflection. An ICE
accur when I do this.

Can you give us instruction to reproduce the crash?

The following is my reproduction record.

$ cat main.cc
import std;

template <typename T>
consteval auto nsdm_of() {
     const auto ctx = std::meta::access_context::current();
     return std::define_static_array(std::meta::nonstatic_data_members_of(^^T, 
ctx));
}

int main() {
     constexpr auto I = nsdm_of<std::vector<int>>();
}

$ g++ -B. -std=c++26 -fmodules -freflection -fmodule-only --compile-std-module
$ g++ -B. -std=c++26 -fmodules main.cc

Seems like we want to reject the import based on a dialect mismatch, i.e. check flag_reflection in module.cc get_dialect.

main.cc: In function 'consteval auto nsdm_of()':
main.cc:5:33: internal compiler error: Segmentation fault
     5 |     const auto ctx = std::meta::access_context::current();
       |                                 ^~~~~~~~~~~~~~
0x76ac28a45caf ???
         ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0
0x591f827efa4b name_lookup::search_namespace_only(tree_node*)
         ../../gcc/cp/name-lookup.cc:921
0x591f827efc02 name_lookup::search_namespace(tree_node*)
         ../../gcc/cp/name-lookup.cc:1014
0x591f827efd82 name_lookup::search_namespace(tree_node*)
         ../../gcc/cp/name-lookup.cc:1009
0x591f827efd82 name_lookup::search_qualified(tree_node*, bool)
         ../../gcc/cp/name-lookup.cc:1075
0x591f827f2a85 qualified_namespace_lookup
         ../../gcc/cp/name-lookup.cc:7750
0x591f827f3b8e lookup_qualified_name(tree_node*, tree_node*, LOOK_want, bool)
         ../../gcc/cp/name-lookup.cc:7709
0x591f82805f16 cp_parser_lookup_name
         ../../gcc/cp/parser.cc:35403
0x591f8284d8cf cp_parser_class_name
         ../../gcc/cp/parser.cc:29572
0x591f8283682e cp_parser_qualifying_entity
         ../../gcc/cp/parser.cc:8308
0x591f8283682e cp_parser_nested_name_specifier_opt
         ../../gcc/cp/parser.cc:7976
0x591f82831241 cp_parser_simple_type_specifier
         ../../gcc/cp/parser.cc:22843
0x591f828328ba cp_parser_postfix_expression
         ../../gcc/cp/parser.cc:8813
0x591f8282f1ae cp_parser_unary_expression
         ../../gcc/cp/parser.cc:10616
0x591f82811e39 cp_parser_cast_expression
         ../../gcc/cp/parser.cc:11531
0x591f82812ef3 cp_parser_binary_expression
         ../../gcc/cp/parser.cc:11634
0x591f82813bfe cp_parser_assignment_expression
         ../../gcc/cp/parser.cc:11987
0x591f82819ad0 cp_parser_constant_expression
         ../../gcc/cp/parser.cc:12307
0x591f82819c4c cp_parser_initializer_clause
         ../../gcc/cp/parser.cc:29059
0x591f8281e908 cp_parser_initializer
         ../../gcc/cp/parser.cc:28998


With debug, the std::meta::info cannot find original type (this
is a builtin type with -freflection), so add a DECL_ORIGINAL_TYPE
check.



Reply via email to