summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.abi/empty.C
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) */