1// { dg-do run } 2// { dg-options "-w" } 3// Origin: Mark Mitchell <mark@codesourcery.com> 4 5#if defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 6 7struct S0 8{ 9}; 10 11struct S1 : public S0 12{ 13}; 14 15struct S2 : public S1 16{ 17 char c; 18}; 19 20// In S3, the S1 instance is allocated first at offset zero. The S2 21// instance has to be allocated at a subsequent offset; it's first 22// part is also an S1. 23 24struct S3 : public S1, public S2 25{ 26}; 27 28struct S4 29{ 30 int i; 31}; 32 33// In S4, in contrast to S3, S2 is allocated first, and S1 can be 34// allocated on top of S4. 35 36struct S5 : public S2, public S1, public S4 37{ 38}; 39 40// The T classes are by-hand layouts that should be equivalent to the 41// S classes. 42 43struct T3 44{ 45 S1 s1; 46 S2 s2; 47}; 48 49struct T5 50{ 51 S2 s2; 52 S4 s4; 53}; 54 55int main () 56{ 57 if (sizeof (S3) != sizeof (T3)) 58 return 1; 59 else if (sizeof (S5) != sizeof (T5)) 60 return 2; 61} 62 63#else /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */ 64 65int main () 66{ 67} 68 69#endif /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */ 70