https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119864
Bug ID: 119864
Summary: [modules] ICE -fmodules and omp reduction of UDT
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: pilarlatiesa at gmail dot com
Target Milestone: ---
$ cat p1.cpp
export module p1;
export
template<unsigned>
struct T
{
double d;
T &operator +=(T const &x) { d += x.d; return *this; }
};
export
template<unsigned d>
T<d> sum(T<d> const *p, unsigned N)
{
T<d> Sum = {};
#pragma omp declare reduction(Op: T<d>: omp_out += omp_in) initializer(omp_priv
= {})
#pragma omp parallel for reduction(Op: Sum)
for (unsigned i = 0u; i < N; ++i)
{
Sum += *p;
++p;
}
return Sum;
}
$ ~/gcc-15/bin/g++ -std=c++20 -fmodules -fopenmp -c p1.cpp -fmodule-only
$ cat main.cpp
import p1;
int main()
{
T<1u> v[3u] = {};
T s = sum(v, 3u);
}
$ ~/gcc-15/bin/g++ -std=c++20 -fmodules -fopenmp -freport-bug -c main.cpp
main.cpp: In function ‘void omp declare reduction Op(T@p1<d>&)’:
main.cpp:8:9: error interno del compilador: Violación de segmento
8 | T s = sum(v, 3u);
| ^~~
0x22373d6 internal_error(char const*, ...)
../../gcc-15.1.0-RC-20250418/gcc/diagnostic-global-context.cc:517
0xf8a223 crash_signal
../../gcc-15.1.0-RC-20250418/gcc/toplev.cc:322
0x77463624532f ???
./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0
0xf7b946 relayout_decl(tree_node*)
../../gcc-15.1.0-RC-20250418/gcc/stor-layout.cc:854
0xc1caee allocate_struct_function(tree_node*, bool)
../../gcc-15.1.0-RC-20250418/gcc/function.cc:4882
0x8a6c87 module_state::read_cluster(unsigned int)
../../gcc-15.1.0-RC-20250418/gcc/cp/module.cc:16705
0x8a739d module_state::load_section(unsigned int, binding_slot*)
../../gcc-15.1.0-RC-20250418/gcc/cp/module.cc:20217
0x8a754e lazy_load_binding(unsigned int, tree_node*, tree_node*, binding_slot*)
../../gcc-15.1.0-RC-20250418/gcc/cp/module.cc:21100
0x8ba57d name_lookup::search_namespace_only(tree_node*)
../../gcc-15.1.0-RC-20250418/gcc/cp/name-lookup.cc:929
0x8bbbf3 name_lookup::search_unqualified(tree_node*, cp_binding_level*)
../../gcc-15.1.0-RC-20250418/gcc/cp/name-lookup.cc:1159
0x8bdcae lookup_name(tree_node*, LOOK_where, LOOK_want)
../../gcc-15.1.0-RC-20250418/gcc/cp/name-lookup.cc:8121
0x8cd182 lookup_name(tree_node*, LOOK_want)
../../gcc-15.1.0-RC-20250418/gcc/cp/name-lookup.h:410
0x8cd182 cp_parser_lookup_name
../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:32997
0x90f17a cp_parser_class_name
../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:27374
0x90f49c cp_parser_type_name
../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:21464
0x90487e cp_parser_simple_type_specifier
../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:21157
0x9064ac cp_parser_postfix_expression
../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:8158
0x902ec8 cp_parser_unary_expression
../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:9733
0x8d726a cp_parser_cast_expression
../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:10648
0x8d807b cp_parser_binary_expression
../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:10751
Please submit a full bug report, with preprocessed source.
Please include the complete backtrace with any bug report.
Véase <https://gcc.gnu.org/bugs/> para instrucciones.
$ cat /tmp/ccKxMTkW.out
// Objetivo: x86_64-pc-linux-gnu
// Configurado con: ../gcc-15.1.0-RC-20250418/configure --disable-multilib
--disable-bootstrap --enable-languages=c++ --prefix=/home/pililatiesa/gcc-15/
// Modelo de hilos: posix
// Algoritmos de compresión LTO admitidos: zlib zstd
// gcc versión 15.0.1 20250418 (prerelease) (GCC)
//
// main.cpp: In function ‘void omp declare reduction Op(T@p1<d>&)’:
// main.cpp:8:9: error interno del compilador: Violación de segmento
// 8 | T s = sum(v, 3u);
// | ^~~
// 0x22373d6 internal_error(char const*, ...)
// ../../gcc-15.1.0-RC-20250418/gcc/diagnostic-global-context.cc:517
// 0xf8a223 crash_signal
// ../../gcc-15.1.0-RC-20250418/gcc/toplev.cc:322
// 0x7ffff7a4532f ???
// ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0
// 0xf7b946 relayout_decl(tree_node*)
// ../../gcc-15.1.0-RC-20250418/gcc/stor-layout.cc:854
// 0xc1caee allocate_struct_function(tree_node*, bool)
// ../../gcc-15.1.0-RC-20250418/gcc/function.cc:4882
// 0x8a6c87 module_state::read_cluster(unsigned int)
// ../../gcc-15.1.0-RC-20250418/gcc/cp/module.cc:16705
// 0x8a739d module_state::load_section(unsigned int, binding_slot*)
// ../../gcc-15.1.0-RC-20250418/gcc/cp/module.cc:20217
// 0x8a754e lazy_load_binding(unsigned int, tree_node*, tree_node*,
binding_slot*)
// ../../gcc-15.1.0-RC-20250418/gcc/cp/module.cc:21100
// 0x8ba57d name_lookup::search_namespace_only(tree_node*)
// ../../gcc-15.1.0-RC-20250418/gcc/cp/name-lookup.cc:929
// 0x8bbbf3 name_lookup::search_unqualified(tree_node*, cp_binding_level*)
// ../../gcc-15.1.0-RC-20250418/gcc/cp/name-lookup.cc:1159
// 0x8bdcae lookup_name(tree_node*, LOOK_where, LOOK_want)
// ../../gcc-15.1.0-RC-20250418/gcc/cp/name-lookup.cc:8121
// 0x8cd182 lookup_name(tree_node*, LOOK_want)
// ../../gcc-15.1.0-RC-20250418/gcc/cp/name-lookup.h:410
// 0x8cd182 cp_parser_lookup_name
// ../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:32997
// 0x90f17a cp_parser_class_name
// ../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:27374
// 0x90f49c cp_parser_type_name
// ../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:21464
// 0x90487e cp_parser_simple_type_specifier
// ../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:21157
// 0x9064ac cp_parser_postfix_expression
// ../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:8158
// 0x902ec8 cp_parser_unary_expression
// ../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:9733
// 0x8d726a cp_parser_cast_expression
// ../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:10648
// 0x8d807b cp_parser_binary_expression
// ../../gcc-15.1.0-RC-20250418/gcc/cp/parser.cc:10751
// Please submit a full bug report, with preprocessed source.
// Please include the complete backtrace with any bug report.
// Véase <https://gcc.gnu.org/bugs/> para instrucciones.
// /home/pililatiesa/gcc-15/libexec/gcc/x86_64-pc-linux-gnu/15.0.1/cc1plus
-quiet -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D_REENTRANT main.cpp -quiet
-dumpbase main.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -std=c++20
-fmodules -fopenmp -freport-bug -o - -frandom-seed=0 -fdump-noaddr
# 0 "main.cpp"
# 0 "<interno>"
# 0 "<línea-de-órdenes>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<línea-de-órdenes>" 2
# 1 "main.cpp"
import p1;
int main()
{
T<1u> v[3u] = {};
T s = sum(v, 3u);
}