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

            Bug ID: 107579
           Summary: ICE on fold-expression on .* member access operator
           Product: gcc
           Version: 12.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jeanmichael.celerier at gmail dot com
  Target Milestone: ---

The function that is causing the ICE:

```
constexpr int index_in_struct(const auto& s, auto... member)
{
  int index = -1;
  int k = 0;

  avnd::for_each_field_ref(s, [&](auto& m) {
    if constexpr(requires { bool(&m == &(s.*....*member)); })
    {
      if(&m == &(s.*....*member))
      {
        index = k;
      }
    }
    ++k;
  });
  assert(index >= 0);
  return index;
}
```

The error:

/home/jcelerier/score/3rdparty/avendish/include/avnd/common/for_nth.hpp:114:26:
internal compiler error: trying to capture 'member#0' in instantiation of
generic lambda
  114 |       if(&m == &(s.*....*member))
      |                          ^~~~~~
0x19eab38 internal_error(char const*, ...)
        ???:0
0x71c547 add_capture(tree_node*, tree_node*, tree_node*, bool, bool)
        ???:0
0x71c5b3 add_default_capture(tree_node*, tree_node*, tree_node*)
        ???:0
0x7e232a tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ???:0
0x7e0baa tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ???:0
0x7e8d8c tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*)
        ???:0
0x7dff89 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ???:0
0x7e0d41 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ???:0
0x7dfdeb tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ???:0
0x7db043 instantiate_decl(tree_node*, bool, bool)
        ???:0
0x6edb1b mark_used(tree_node*, int)
        ???:0
0x68b85f build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
        ???:0
0x810f2d finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
        ???:0
0x7e1f0c tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ???:0
0x7e8d8c tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*)
        ???:0
0x7dff89 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ???:0
0x7db043 instantiate_decl(tree_node*, bool, bool)
        ???:0
0x6edb1b mark_used(tree_node*, int)
        ???:0
0x68b85f build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
        ???:0
0x810f2d finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
        ???:0

Reply via email to