https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118464
--- Comment #3 from Ted Rodgers <ted.d.rodgers at gmail dot com> --- Reduced: struct a { int begin; int end; }; using b = a[]; struct { b d; a &c(long e) { return d[e]; } } l; void f(char *, int, int, int) __attribute__((__noreturn__)); struct g { int operator!=(g e) { return h != e.h; } unsigned operator*() { return h; } void operator++() { h++; } long h; }; struct j { g begin() { return {}; } g end() { return {k}; } int from; long k; }; long o; a &m(long e) { return l.c(e); } struct { a n(long e) { unsigned q = o; e < q ? void() : f("", 1, 1, 1); return l.c(1); } } s; unsigned p; void fn3() { j r; p = o; r = {1, p}; for (auto i : r) m(i).begin = m(i).end = s.n(i).end; }