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;
}