https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116682
Bug ID: 116682
Summary: internal compiler error: in tsubst_expr, at
cp/pt.cc:21463
Product: gcc
Version: 14.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: djnz00 at gmail dot com
Target Milestone: ---
gcc bombs out on this code; clang does not
see https://github.com/djnz00/gcc-bug/tree/main
(pre-processed source code file may be too large to attach here)
] g++ -D_REENTRANT -D_GNU_SOURCE -D__x86_64__ -Wall -Wno-parentheses
-Wno-invalid-offsetof -Wno-misleading-indentation -fstrict-aliasing
-std=gnu++2b -ftemplate-backtrace-limit=0 -g -march=x86-64-v2 -fno-math-errno
-fno-trapping-math -fno-rounding-math -fno-signaling-nans -DZDEBUG
-Wno-non-template-friend -Wno-enum-compare -Wno-deprecated-enum-enum-conversion
-Wno-int-in-bool-context -Wno-unused-value -Wno-sign-compare -c gcc-bug.cc -o
gcc-bug.o
gcc-bug.cc: In instantiation of ‘Zdf::DFWriter_<Zdf::WrapType<Frame, false>,
ZmHeap__<Zdf::DFWriter_HeapID, 64, 8, false> >::write(const
O&)::<lambda(auto:131)> [with auto:131 = ZuConstant<unsigned int, 0>]’:
gcc-bug.cc:8091:44: required from ‘struct ZuUnroll::Deduce<ZuSeq<0, 1>,
Zdf::DFWriter_<Zdf::WrapType<Frame, false>, ZmHeap__<Zdf::DFWriter_HeapID, 64,
8, false> >::write(const O&)::<lambda(auto:131)> >’
8091 | using R = ZuDecay<decltype(ZuDeclVal<L>()(ZuUnsigned<0>{}))>;
| ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
gcc-bug.cc:8102:52: required from ‘constexpr decltype(auto) ZuUnroll::all(L)
[with List = ZuSeq<0, 1>; L = Zdf::DFWriter_<Zdf::WrapType<Frame, false>,
ZmHeap__<Zdf::DFWriter_HeapID, 64, 8, false> >::write(const
O&)::<lambda(auto:131)>]’
8102 | return All<typename Deduce<List, L>::R, List>::fn(ZuMv(l));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
gcc-bug.cc:8105:25: required from ‘constexpr decltype(auto) ZuUnroll::all(L)
[with unsigned int N = 2; L = Zdf::DFWriter_<Zdf::WrapType<Frame, false>,
ZmHeap__<Zdf::DFWriter_HeapID, 64, 8, false> >::write(const
O&)::<lambda(auto:131)>]’
8105 | return all<ZuMkSeq<N>>(ZuMv(l));
| ~~~~~~~~~~~~~~~^~~~~~~~~
gcc-bug.cc:67341:29: required from ‘void Zdf::DFWriter_<W, Heap>::write(const
O&) [with W = Zdf::WrapType<Frame, false>; Heap =
ZmHeap__<Zdf::DFWriter_HeapID, 64, 8, false>; O = Frame]’
67341 | ZuUnroll::all<WrRefs::N>([this, &o, &ok](auto I) {
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
67342 | if (!ok) return;
| ~~~~~~~~~~~~~~~~
67343 | using Field = ZuType<I, Fields>;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67344 | enum { NDP = GetNDP<Field>{} };
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67345 | if constexpr (Field::Code == Float)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67346 | ok = ok && m_wrRefs.template p<I>()->write(Field::get(o));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67347 | else if constexpr (Field::Code == Fixed)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67348 | ok = ok && m_wrRefs.template
p<I>()->write(Field::get(o).adjust(NDP));
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67349 | else if constexpr (Field::Code == Int8 || Field::Code == UInt8 ||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67350 | Field::Code == Int16 || Field::Code == UInt16
||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67351 | Field::Code == Int32 || Field::Code == UInt32
||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67352 | Field::Code == Int64 || Field::Code == UInt64)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67353 | ok = ok && m_wrRefs.template p<I>()->write(Field::get(o));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67354 | else if constexpr (Field::Code == Decimal)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67355 | ok = ok && m_wrRefs.template
p<I>()->write(ZuFixed{Field::get(o), NDP});
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67356 | else if constexpr (Field::Code == Time)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67357 | ok = ok &&
| ~~~~~~~~~~
67358 | m_wrRefs.template p<I>()->write(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67359 | m_df->template series<I>()->nsecs(Field::get(o))
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67360 | );
| ~~
67361 | });
| ~~
gcc-bug.cc:67927:15: required from here
67927 | w->write(frame);
| ~~~~~~~~^~~~~~~
gcc-bug.cc:67344:12: internal compiler error: in tsubst_expr, at cp/pt.cc:21463
67344 | enum { NDP = GetNDP<Field>{} };
| ^
0x21a7bea internal_error(char const*, ...)
???:0
0x703e99 fancy_abort(char const*, int, char const*)
???:0
0x8e1dcf tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
???:0
0x8d7e80 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x8e1dcf tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
???:0
0x8d72c8 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x8d1578 tsubst_expr(tree_node*, tree_node*, int, tree_node*)
???:0
0x8e412c lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
???:0
0x8ca115 instantiate_decl(tree_node*, bool, bool)
???:0
0x7a2512 maybe_instantiate_decl(tree_node*)
???:0
0x7ffdcd mark_used(tree_node*, int)
???:0
0x73fd5e build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
???:0
0x90829a finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
???:0
0x8d48af tsubst_expr(tree_node*, tree_node*, int, tree_node*)
???:0
0x8d7d7d tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x8e1dcf tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
???:0
0x8d72c8 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x8e093d instantiate_class_template(tree_node*)
???:0
0x93990b complete_type(tree_node*)
???:0
0x944bbb complete_type_or_maybe_complain(tree_node*, tree_node*, int)
???:0
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/issues>
for instructions.