https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127580

            Bug ID: 127580
           Summary: ICE on reflection of function template substituted
                    with variadic template parameters and spliced in
                    requires clause of generic lambda
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: eczbek.void at gmail dot com
  Target Milestone: ---

https://godbolt.org/z/bPaczeWTv

```
#include <meta>

void foo(auto) {}

template<typename... targs>
void bar() {
        constexpr auto info = substitute(^^foo, { ^^targs... });
        [](auto arg) requires requires { [:info:](arg); } {}(0);
}

int main() {
        bar<int>();
}
```

```
<source>: In substitution of 'template<class auto:9>
bar<int>()::<lambda(auto:9)> [with auto:9 = int]':
<source>:8:54:   required from 'void bar() [with targs = {int}]'
    8 |         [](auto arg) requires requires { [:info:](arg); } {}(0);
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
<source>:12:10:   required from here
   12 |         bar<int>();
      |         ~~~~~~~~^~
<source>:7:41: internal compiler error: tree check: accessed elt 1 of
'tree_vec' with 0 elts in tsubst_pack_expansion, at cp/pt.cc:14424
    7 |         constexpr auto info = substitute(^^foo, { ^^targs... });
      |                               ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
0x2c5b2c8 diagnostics::context::diagnostic_impl(rich_location*,
diagnostics::metadata const*, diagnostics::option_id, char const*,
__va_list_tag (*) [1], diagnostics::kind)
        ???:0
0x2c4ff0b internal_error(char const*, ...)
        ???:0
0xa45599 tree_vec_elt_check_failed(int, int, char const*, int, char const*)
        ???:0
0xc15dc6 tsubst_requires_expr(tree_node*, tree_node*, int, tree_node*)
        ???:0
0xc172e8 constraints_satisfied_p(tree_node*, tree_node*)
        ???:0
0xe3fd01 fn_type_unification(tree_node*, tree_node*, tree_node*, tree_node*
const*, unsigned int, tree_node*, unification_kind_t, int, conversion**, bool,
bool)
        ???:0
0xbbc687 build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
        ???:0
0xe7b5d6 finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
        ???:0
0xe3d07d instantiate_decl(tree_node*, bool, bool)
        ???:0
0xe46eba instantiate_pending_templates(int)
        ???:0
0xca8048 c_parse_final_cleanups()
        ???:0
0xf6b928 c_common_parse_file()
        ???:0
/cefs/1c/1c52de22e33a05b1cabef313_gcc-trunk-20260923/bin/../libexec/gcc/x86_64-linux-gnu/17.0.0/cc1plus
-quiet -imultiarch x86_64-linux-gnu -iprefix
/cefs/1c/1c52de22e33a05b1cabef313_gcc-trunk-20260923/bin/../lib/gcc/x86_64-linux-gnu/17.0.0/
-D_GNU_SOURCE <source> -quiet -dumpdir /app/ -dumpbase output.cpp -dumpbase-ext
.cpp -masm=intel -mtune=generic -march=x86-64 -g -std=c++26
-fdiagnostics-color=always -fno-verbose-asm -freflection -o /app/output.s
```

Reply via email to