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 Rupprechtint 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