https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90587
--- Comment #2 from David Binderman <dcb314 at hotmail dot com> --- Here is the reduced C++ code: typedef unsigned a; typedef char b; typedef struct { a *c; } d; int e(d *f) { if (f) return *f->c; } a g(d *f) { return e(f); } typedef struct { b channel; } h; b *j(d *f, int channel, b *dest) { int k = 80, i; for (i = 0; i < 4; ++i, k = 1) if (channel & k) dest[i] = g(f); return dest; } void l(int, b *dest, b *m) { int i; for (i = 0; i < 4; ++i) dest[i] = m[i]; } b n(d *f) { for (;;) { h *o; b *dest; b p[4]; if (j(f, o->channel, p)) l(o->channel, dest, p); } }