blob: 40aac9e9d071f695bbe1de161bd96a85ae81391b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
// { dg-do run }
// { dg-options "-w" }
// Origin: Mark Mitchell <mark@codesourcery.com>
#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) */
|