// Red Hat bugzilla 65210 | |
// { dg-do run } | |
struct A { | |
int a; | |
}; | |
struct B : public virtual A {}; | |
struct C { | |
long double c; | |
}; | |
struct D : public virtual C { | |
int d; | |
}; | |
struct E : public B, public D { | |
int e; | |
}; | |
E e; | |
/* The layout of E should begin with the B-in-E vtable pointer, followed by | |
the D-in-E vtable pointer. The bug was that we used to pad out the D | |
fields for long double alignment. */ | |
int main () | |
{ | |
D* dp = &e; | |
unsigned long d_offset = ((char*)dp) - ((char*) &e); | |
return (d_offset != sizeof(void *)); | |
} |