Unión de tipos compatibles con el diseño

Mire este código:

struct A {
    short s;
    int i;
};
struct B {
    short s;
    int i;
};

union U {
    A a;
    B b;
};

int fn() {
    U u;
    u.a.i = 1;
    return u.b.i;
}

¿Está garantizado quefn() devoluciones1?

Nota: esta es una pregunta de seguimiento paraest.