// { dg-do run } // { dg-options "-w" } // Origin: Mark Mitchell #if defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 struct S0 { }; struct S1 : public S0 { }; struct S2 : public S1 { char c; }; // In S3, the S1 instance is allocated first at offset zero. The S2 // instance has to be allocated at a subsequent offset; it's first // part is also an S1. struct S3 : public S1, public S2 { }; struct S4 { int i; }; // In S4, in contrast to S3, S2 is allocated first, and S1 can be // allocated on top of S4. struct S5 : public S2, public S1, public S4 { }; // The T classes are by-hand layouts that should be equivalent to the // S classes. struct T3 { S1 s1; S2 s2; }; struct T5 { S2 s2; S4 s4; }; int main () { if (sizeof (S3) != sizeof (T3)) return 1; else if (sizeof (S5) != sizeof (T5)) return 2; } #else /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */ int main () { } #endif /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */