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
```

Reply via email to