https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108059
Bug ID: 108059
Summary: internal compiler error: in tsubst_copy, at
cp/pt.c:16425
Product: gcc
Version: 10.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: lh_mouse at 126 dot com
Target Milestone: ---
This was reported on IRC by Vladimir_Kozelko:
https://godbolt.org/z/oMjTc1813
```
#include <utility>
struct unused {
template <typename T>
constexpr unused(T&&) noexcept {}
};
template <int>
using ignore_index_t = unused;
template <int index, typename... Tp>
constexpr inline auto pack_element(Tp&&... arr) noexcept {
auto unpack = [&](auto... v){
auto impl = [](ignore_index_t<v>..., auto&& out, auto&&) {
return out;
};
};
}
template <int index, typename... Tp>
using pack_element_t = decltype(pack_element<index>(std::declval<Tp>()...));
void f1() { using H = pack_element_t<1, int, int&>; }
//idea (and it works):
auto test = [](auto v){
constexpr auto vv = v;
};
void f2() { test(std::integral_constant<int, 0>()); }
```
which ICEs:
```
<source>: In instantiation of 'constexpr auto pack_element(Tp&& ...) [with int
index = 1; Tp = {int, int&}]':
<source>:21:52: required by substitution of 'template<int index, class ...
Tp> using pack_element_t = decltype (pack_element<index>((declval<Tp>)()...))
[with int index = 1; Tp = {int, int&}]'
<source>:23:50: required from here
<source>:14:21: internal compiler error: in tsubst_copy, at cp/pt.cc:16949
14 | auto impl = [](ignore_index_t<v>..., auto&& out, auto&&) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 | return out;
| ~~~~~~~~~~~
16 | };
| ~
0x1bb069e internal_error(char const*, ...)
???:0
0x6ff396 fancy_abort(char const*, int, char const*)
???:0
0x88d46f tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
???:0
0x87aa08 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x87a50a tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x887353 tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*)
???:0
0x87a817 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x89084a tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*)
???:0
0x890a58 tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*)
???:0
0x87d4f7 instantiate_decl(tree_node*, bool, bool)
???:0
0x7a1e03 maybe_instantiate_decl(tree_node*)
???:0
0x72588e build_new_function_call(tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
???:0
0x8aaf0c finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
???:0
0x87abbd tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x87b097 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x891f4a instantiate_template(tree_node*, tree_node*, int)
???:0
0x87a682 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x88495f lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
???:0
0x8aa461 finish_template_type(tree_node*, tree_node*, int)
???:0
0x861eaa c_parse_file()
???: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://gcc.gnu.org/bugs/> for instructions.
Compiler returned: 1
```