/* PR target/7559
   This testcase was miscompiled on x86-64, because classify_argument
   wrongly computed the offset of nested structure fields.  */

extern void abort(void);

struct A {
    long x;
};

struct R {
    struct A a, b;
};

struct R R = {100, 200};

void f(struct R r) {
    if (r.a.x != R.a.x || r.b.x != R.b.x)
        abort();
}

struct R g(void) {
    return R;
}

int main(void) {
    struct R r;
    f(R);
    r = g();
    if (r.a.x != R.a.x || r.b.x != R.b.x)
        abort();
    return 0;
}
