https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92583
Bug ID: 92583
Summary: internal compiler error: in tsubst_copy, at
cp/pt.c:15552
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: fiesh at zefix dot tv
Target Milestone: ---
The following code leads to an internal compiler error with gcc 8, 9, and
trunk:
template <int> struct a {};
template <typename> using b = int;
template <typename d, d> struct e {};
template <typename d, d g> using h = e<d, __integer_pack(g)...>;
template <typename j, typename k, k... index> void apply(j f, e<k, index...>) {
(f(a<index>{}), ...);
}
template <auto l, typename j> void m(j f) {
using k = b<decltype(l)>;
using n = h<k, l>;
apply(f, n{});
}
template <int, int c> void o() {
auto p = [](auto i) {
if constexpr (a<i>{})
;
};
m<c>(p);
}
auto q() { o<0, 1>; }
% g++ -std=c++17 -c h.ii
h.ii: In instantiation of ‘o() [with int <anonymous> = 0; int c =
1]::<lambda(auto:1)> [with auto:1 = a<0>]’:
h.ii:6:5: required from ‘void apply(j, e<k, index ...>) [with j = o() [with
int <anonymous> = 0; int c = 1]::<lambda(auto:1)>; k = int; k ...index = {0}]’
h.ii:11:8: required from ‘void m(j) [with auto l = 1; j = o() [with int
<anonymous> = 0; int c = 1]::<lambda(auto:1)>]’
h.ii:18:7: required from ‘void o() [with int <anonymous> = 0; int c = 1]’
h.ii:20:19: required from here
h.ii:15:5: internal compiler error: in tsubst_copy, at cp/pt.c:15552
15 | if constexpr (a<i>{})
| ^~
0x58f8a4 tsubst_copy
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:15552
0x6c7fc0 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:19486
0x6d14d5 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:18242
0x6d14d5 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:17918
0x6d836a tsubst_template_args
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:12574
0x6db018 tsubst_aggr_type
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:12771
0x6cbe11 tsubst(tree_node*, tree_node*, int, tree_node*)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:14460
0x6c8299 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:19373
0x6d14d5 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:18242
0x6d14d5 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:17918
0x6d0720 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:17270
0x6d0629 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:17325
0x6d0629 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:17325
0x6d0629 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:17325
0x6cfd2a instantiate_decl(tree_node*, bool, bool)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/pt.c:24792
0x638f52 maybe_instantiate_decl
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/decl2.c:5300
0x638f52 maybe_instantiate_decl
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/decl2.c:5284
0x63ac08 mark_used(tree_node*, int)
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/decl2.c:5456
0x5dc7d8 build_over_call
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/call.c:8677
0x5df7b6 build_op_call_1
/usr/src/debug/sys-devel/gcc-9.2.0-r2/gcc-9.2.0/gcc/cp/call.c:4778
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://bugs.gentoo.org/> for instructions.