xref: /llvm-project/lldb/test/API/lang/cpp/multiple-inheritance/main.cpp (revision 99451b4453688a94c6014cac233d371ab4cc342d)
1*99451b44SJordan Rupprecht struct CommonBase {
2*99451b44SJordan Rupprecht   int m_base;
3*99451b44SJordan Rupprecht   int virt_base_val;
4*99451b44SJordan Rupprecht   int func_base_val;
virt_baseCommonBase5*99451b44SJordan Rupprecht   virtual int virt_base() { return virt_base_val; }
virt_commonCommonBase6*99451b44SJordan Rupprecht   virtual int virt_common() { return 555; }
func_baseCommonBase7*99451b44SJordan Rupprecht   int func_base() { return func_base_val; }
func_commonCommonBase8*99451b44SJordan Rupprecht   int func_common() { return 777; }
9*99451b44SJordan Rupprecht };
10*99451b44SJordan Rupprecht 
11*99451b44SJordan Rupprecht struct Base1 : CommonBase {
12*99451b44SJordan Rupprecht   int m1 = 22;
Base1Base113*99451b44SJordan Rupprecht   Base1() {
14*99451b44SJordan Rupprecht     // Give the base functions/members unique values.
15*99451b44SJordan Rupprecht     virt_base_val = 111;
16*99451b44SJordan Rupprecht     func_base_val = 112;
17*99451b44SJordan Rupprecht     m_base = 11;
18*99451b44SJordan Rupprecht   }
virt1Base119*99451b44SJordan Rupprecht   virtual int virt1() { return 3; }
func1Base120*99451b44SJordan Rupprecht   int func1() { return 4; }
21*99451b44SJordan Rupprecht };
22*99451b44SJordan Rupprecht 
23*99451b44SJordan Rupprecht struct Base2 : CommonBase {
24*99451b44SJordan Rupprecht   int m2 = 33;
Base2Base225*99451b44SJordan Rupprecht   Base2() {
26*99451b44SJordan Rupprecht     // Give the base functions/members unique values.
27*99451b44SJordan Rupprecht     virt_base_val = 121;
28*99451b44SJordan Rupprecht     func_base_val = 122;
29*99451b44SJordan Rupprecht     m_base = 12;
30*99451b44SJordan Rupprecht   }
virt2Base231*99451b44SJordan Rupprecht   virtual int virt2() { return 5; }
func2Base232*99451b44SJordan Rupprecht   int func2() { return 6; }
33*99451b44SJordan Rupprecht };
34*99451b44SJordan Rupprecht 
35*99451b44SJordan Rupprecht struct FinalClass : Base1, Base2 {
36*99451b44SJordan Rupprecht   int m_final = 44;
final_virtFinalClass37*99451b44SJordan Rupprecht   virtual int final_virt() { return 7; }
final_funcFinalClass38*99451b44SJordan Rupprecht   int final_func() { return 8; }
virt_commonFinalClass39*99451b44SJordan Rupprecht   virtual int virt_common() { return 444; }
func_commonFinalClass40*99451b44SJordan Rupprecht   int func_common() { return 888; }
41*99451b44SJordan Rupprecht };
42*99451b44SJordan Rupprecht 
main()43*99451b44SJordan Rupprecht int main() {
44*99451b44SJordan Rupprecht   FinalClass C;
45*99451b44SJordan Rupprecht   // Call functions so they get emitted.
46*99451b44SJordan Rupprecht   C.func1();
47*99451b44SJordan Rupprecht   C.func2();
48*99451b44SJordan Rupprecht   C.final_func();
49*99451b44SJordan Rupprecht   C.func_common();
50*99451b44SJordan Rupprecht   C.Base1::func_base();
51*99451b44SJordan Rupprecht   return 0; // break here
52*99451b44SJordan Rupprecht }
53