1 struct CommonBase {
2   int m_base;
3   int virt_base_val;
4   int func_base_val;
5   virtual int virt_base() { return virt_base_val; }
6   virtual int virt_common() { return 555; }
7   int func_base() { return func_base_val; }
8   int func_common() { return 777; }
9 };
10 
11 struct Base1 : CommonBase {
12   int m1 = 22;
13   Base1() {
14     // Give the base functions/members unique values.
15     virt_base_val = 111;
16     func_base_val = 112;
17     m_base = 11;
18   }
19   virtual int virt1() { return 3; }
20   int func1() { return 4; }
21 };
22 
23 struct Base2 : CommonBase {
24   int m2 = 33;
25   Base2() {
26     // Give the base functions/members unique values.
27     virt_base_val = 121;
28     func_base_val = 122;
29     m_base = 12;
30   }
31   virtual int virt2() { return 5; }
32   int func2() { return 6; }
33 };
34 
35 struct FinalClass : Base1, Base2 {
36   int m_final = 44;
37   virtual int final_virt() { return 7; }
38   int final_func() { return 8; }
39   virtual int virt_common() { return 444; }
40   int func_common() { return 888; }
41 };
42 
43 int main() {
44   FinalClass C;
45   // Call functions so they get emitted.
46   C.func1();
47   C.func2();
48   C.final_func();
49   C.func_common();
50   C.Base1::func_base();
51   return 0; // break here
52 }
53