1 // { dg-do run }
2 // Test to see that primary bases are selected correctly.
3 // Origin: Mark Mitchell <mark@codesourcery.com>
4
5 #if defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100
6
7 // S1 is a nearly-empty base.
8
9 struct S1
10 {
fS111 virtual void f ()
12 {
13 }
14 };
15
16 // S2 is a dynamic, but not nearly-empty, base.
17
18 struct S2
19 {
gS220 virtual void g ()
21 {
22 }
23
24 int i;
25 };
26
27 // S1 should be the primary base.
28
29 struct T1 : public S1, public S2
30 {
31 };
32
33 // S2 should be the primary base.
34
35 struct T2 : public S2, public S1
36 {
37 };
38
39 // S2 should be the primary base.
40
41 struct T3 : virtual public S1, public S2
42 {
43 };
44
45 // S1 should be the primary base.
46
47 struct T4 : virtual public S1, virtual public S2
48 {
49 };
50
51 // Check that Y is the primary base for X. Otherwise, return N.
52 #define CHECK_PRIMARY_BASE(X, Y, N) \
53 { \
54 X x; \
55 if ((void*) &x != (void *) (Y*) (&x)) \
56 return N; \
57 }
58
main()59 int main ()
60 {
61 CHECK_PRIMARY_BASE (T1, S1, 1);
62 CHECK_PRIMARY_BASE (T2, S2, 2);
63 CHECK_PRIMARY_BASE (T3, S2, 3);
64 CHECK_PRIMARY_BASE (T4, S1, 4);
65 }
66
67 #else /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */
68
main()69 int main ()
70 {
71 }
72
73 #endif /* !(defined (__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100) */
74