/* PR tree-optimization/22043 */

extern void abort(void);

struct A {
    int i;
    int j;
    int k;
    int l;
};
struct B {
    struct A a;
    int r[1];
};
struct C {
    struct A a;
    int r[0];
};
struct D {
    struct A a;
    int r[];
};

void foo(struct A *x) {
    if (x->i != 0 || x->j != 5 || x->k != 0 || x->l != 0)
        abort();
}

int main() {
    struct B b = {.a.j = 5};
    struct C c = {.a.j = 5};
    struct D d = {.a.j = 5};
    foo(&b.a);
    foo(&c.a);
    foo(&d.a);
    return 0;
}
