]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.hp/virtfun-hp.cc
* config/sh/tm-sh.h (BELIEVE_PCC_PROMOTION): Define, so that
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.hp / virtfun-hp.cc
CommitLineData
8e260d52
DT
1// Pls try the following program on virtual functions and try to do print on
2// most of the code in main(). Almost none of them works !
3
4//
5// The inheritance structure is:
6//
7// V : VA VB
8// A : (V)
9// B : A
10// D : AD (V)
11// C : (V)
12// E : B (V) D C
13//
14
15class VA
16{
17public:
18 int va;
19};
20
21class VB
22{
23public:
24 int vb;
25 int fvb();
26 virtual vvb();
27};
28
29class V : public VA, public VB
30{
31public:
32 int f();
33 virtual vv();
34 int w;
35};
36
37class A : virtual public V
38{
39public:
40 virtual int f();
41private:
42 int a;
43};
44
45class B : public A
46{
47public:
48 int f();
49private:
50 int b;
51};
52
53class C : public virtual V
54{
55public:
56 int c;
57};
58
59class AD
60{
61public:
62 virtual int vg() = 0;
63};
64
65class D : public AD, virtual public V
66{
67public:
68 static void s();
69 virtual int vg();
70 virtual int vd();
71 int fd();
72 int d;
73};
74
75class E : public B, virtual public V, public D, public C
76{
77public:
78 int f();
79 int vg();
80 int vv();
81 int e;
82};
83
84D dd;
85D* ppd = ⅆ
86AD* pAd = ⅆ
87
88A a;
89B b;
90C c;
91D d;
92E e;
93V v;
94VB vb;
95
96
97A* pAa = &a;
98A* pAe = &e;
99
100B* pBe = &e;
101
102D* pDd = &d;
103D* pDe = &e;
104
105V* pVa = &a;
106V* pVv = &v;
107V* pVe = &e;
108V* pVd = &d;
109
110AD* pADe = &e;
111
112E* pEe = &e;
113
114VB* pVB = &vb;
115
116void init()
117{
118 a.vb = 1;
119 b.vb = 2;
120 c.vb = 3;
121 d.vb = 4;
122 e.vb = 5;
123 v.vb = 6;
124 vb.vb = 7;
125
126 d.d = 1;
127 e.d = 2;
128}
129
130extern "C" printf(const char *, ...);
131
132int all_count = 0;
133int failed_count = 0;
134
135#define TEST(EXPR, EXPECTED) \
136 ret = EXPR; \
137 if (ret != EXPECTED) {\
138 printf("Failed %s is %d, should be %d!\n", #EXPR, ret, EXPECTED); \
139 failed_count++; } \
140 all_count++;
141
142int ret;
143
144void test_calls()
145{
146 TEST(pAe->f(), 20);
147 TEST(pAa->f(), 1);
148
149 TEST(pDe->vg(), 202);
150 TEST(pADe->vg(), 202);
151 TEST(pDd->vg(), 101);
152
153 TEST(pEe->vvb(), 411);
154
155 TEST(pVB->vvb(), 407);
156
157 TEST(pBe->vvb(), 411);
158 TEST(pDe->vvb(), 411);
159
160 TEST(pEe->vd(), 282);
161 TEST(pEe->fvb(), 311);
162
163 TEST(pEe->D::vg(), 102);
164 printf("Did %d tests, of which %d failed.\n", all_count, failed_count);
165}
166
167int main()
168{
169
170 init();
171
172 e.w = 7;
173 e.vb = 11;
174
175 test_calls();
176 return 0;
177
178}
179
180int A::f() {return 1;}
181int B::f() {return 2;}
182void D::s() {}
183int E::f() {return 20;}
184int D::vg() {return 100+d;}
185int E::vg() {return 200+d;}
186int V::f() {return 600+w;}
187int V::vv() {return 400+w;}
188int E::vv() {return 450+w;}
189int D::fd() {return 250+d;}
190int D::vd() {return 280+d;}
191int VB::fvb() {return 300+vb;}
192int VB::vvb() {return 400+vb;}