]> git.ipfire.org Git - thirdparty/gcc.git/blob - libvtv/testsuite/virtual_inheritance.cc
89fe388a856c7d1a15acbf554518fd7962bd696f
[thirdparty/gcc.git] / libvtv / testsuite / virtual_inheritance.cc
1 #include <assert.h>
2 struct V {
3 V(): virtual_value(-123) {}
4 int virtual_value;
5 virtual int access_vv() { return virtual_value; }
6 };
7
8 struct A: virtual public V {
9 A():value(123) {}
10 int value;
11 virtual int access() { return value; }
12 };
13 struct B: virtual public V {
14 B():value(456) {}
15 int value;
16 virtual int access() { return value; }
17 };
18 struct C : public A, public B {
19 C():better_value(789) {}
20 int better_value;
21 virtual int access() { return better_value; }
22 };
23 struct D: public A, public B {
24 D():better_virtual_value(-345) {}
25 int better_virtual_value;
26 virtual int access_vv() { return better_virtual_value; }
27 };
28
29 int use(B *b)
30 {
31 return b->access();
32 }
33
34 int v_use(V * v)
35 {
36 return v->access_vv();
37 }
38
39 int main()
40 {
41 C c;
42 assert(v_use(&c) == -123);
43 D d;
44 assert(v_use(&d) == -345);
45 return 0;
46 }