[test-suite] r214126 - ABI-Testsuite: Bulk of the testsuite

Sunil Srivastava sunil_srivastava at playstation.sony.com
Mon Jul 28 14:20:39 PDT 2014


Added: test-suite/trunk/ABI-Testsuite/test/s2_6/T_ksc2.x
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/s2_6/T_ksc2.x?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/s2_6/T_ksc2.x (added)
+++ test-suite/trunk/ABI-Testsuite/test/s2_6/T_ksc2.x Mon Jul 28 16:20:34 2014
@@ -0,0 +1,297201 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
+// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
+// RUN: c_compiler -c %s -I "common" -o %t3.o
+// RUN: linker -o %t2%exeext  %t1.o %t2.o %t3.o
+// RUN: runtool %t2%exeext | checker "TEST PASSED"
+#include "testsuite.h"
+#ifdef __cplusplus
+
+struct  aa0  {
+  int a;
+};
+//SIG(-1 aa0) C1{ Fi}
+
+
+
+static void Test_aa0()
+{
+  {
+    init_simple_test("aa0");
+    aa0 lv;
+    check2(sizeof(lv), 4, "sizeof(aa0)");
+    check2(__alignof__(lv), 4, "__alignof__(aa0)");
+    check_field_offset(lv, a, 0, "aa0.a");
+  }
+}
+static Arrange_To_Call_Me vaa0(Test_aa0, "aa0", 4);
+
+#else // __cplusplus
+
+extern VTBL_ENTRY _ZTI3aa0[];
+VTBL_ENTRY *P__ZTI3aa0 = _ZTI3aa0; 
+Class_Descriptor cd_aa0 = {  "aa0", // class name
+  0,0,//no base classes
+  0, // no vftv
+  0, //no vtt
+  4, // object size
+  NSPAIRA(_ZTI3aa0),ABISELECT(16,8), //typeinfo_var
+  {0,0},0, // virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa1  {
+  int a;
+  virtual void  foo(); // _ZN3aa13fooEv
+  ~aa1(); // tgen
+  aa1(); // tgen
+};
+//SIG(-1 aa1) C1{ v1 Fi}
+
+
+void  aa1 ::foo(){vfunc_called(this, "_ZN3aa13fooEv");}
+aa1 ::~aa1(){ note_dtor("aa1", this);} // tgen
+aa1 ::aa1(){ note_ctor("aa1", this);} // tgen
+
+static void Test_aa1()
+{
+  extern Class_Descriptor cd_aa1;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa1, buf);
+    aa1 *dp, &lv = *(dp=new (buf) aa1());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa1)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa1)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa1.a");
+    test_class_info(&lv, &cd_aa1);
+    dp->~aa1();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa1(Test_aa1, "aa1", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa1C1Ev();
+extern void _ZN3aa1D1Ev();
+Name_Map name_map_aa1[] = {
+  NSPAIR(_ZN3aa1C1Ev),
+  NSPAIR(_ZN3aa1D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa1[];
+extern void _ZN3aa13fooEv();
+static  VTBL_ENTRY vtc_aa1[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa1[0]),
+  (VTBL_ENTRY)&_ZN3aa13fooEv,
+};
+extern VTBL_ENTRY _ZTI3aa1[];
+extern  VTBL_ENTRY _ZTV3aa1[];
+Class_Descriptor cd_aa1 = {  "aa1", // class name
+  0,0,//no base classes
+  &(vtc_aa1[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa1),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa1),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa2  {
+  int a;
+  virtual void  foo(); // _ZN3aa23fooEv
+  virtual void  bar(); // _ZN3aa23barEv
+  ~aa2(); // tgen
+  aa2(); // tgen
+};
+//SIG(-1 aa2) C1{ v1 v2 Fi}
+
+
+void  aa2 ::foo(){vfunc_called(this, "_ZN3aa23fooEv");}
+void  aa2 ::bar(){vfunc_called(this, "_ZN3aa23barEv");}
+aa2 ::~aa2(){ note_dtor("aa2", this);} // tgen
+aa2 ::aa2(){ note_ctor("aa2", this);} // tgen
+
+static void Test_aa2()
+{
+  extern Class_Descriptor cd_aa2;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa2, buf);
+    aa2 *dp, &lv = *(dp=new (buf) aa2());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa2)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa2)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa2.a");
+    test_class_info(&lv, &cd_aa2);
+    dp->~aa2();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa2(Test_aa2, "aa2", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa2C1Ev();
+extern void _ZN3aa2D1Ev();
+Name_Map name_map_aa2[] = {
+  NSPAIR(_ZN3aa2C1Ev),
+  NSPAIR(_ZN3aa2D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa2[];
+extern void _ZN3aa23fooEv();
+extern void _ZN3aa23barEv();
+static  VTBL_ENTRY vtc_aa2[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa2[0]),
+  (VTBL_ENTRY)&_ZN3aa23fooEv,
+  (VTBL_ENTRY)&_ZN3aa23barEv,
+};
+extern VTBL_ENTRY _ZTI3aa2[];
+extern  VTBL_ENTRY _ZTV3aa2[];
+Class_Descriptor cd_aa2 = {  "aa2", // class name
+  0,0,//no base classes
+  &(vtc_aa2[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa2),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa2),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  bb20  : aa0 {
+  int b;
+  virtual void  foo(); // _ZN4bb203fooEv
+  ~bb20(); // tgen
+  bb20(); // tgen
+};
+//SIG(-1 bb20) C1{ BC2{ Fi} v1 Fi}
+
+
+void  bb20 ::foo(){vfunc_called(this, "_ZN4bb203fooEv");}
+bb20 ::~bb20(){ note_dtor("bb20", this);} // tgen
+bb20 ::bb20(){ note_ctor("bb20", this);} // tgen
+
+static void Test_bb20()
+{
+  extern Class_Descriptor cd_bb20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(3,4)];
+    init_test(&cd_bb20, buf);
+    bb20 *dp, &lv = *(dp=new (buf) bb20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,12), "sizeof(bb20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb20)");
+    check_base_class_offset(lv, (aa0*), ABISELECT(8,4), "bb20");
+    check_field_offset(lv, b, ABISELECT(12,8), "bb20.b");
+    test_class_info(&lv, &cd_bb20);
+    dp->~bb20();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb20(Test_bb20, "bb20", ABISELECT(16,12));
+
+#else // __cplusplus
+
+extern void _ZN4bb20C1Ev();
+extern void _ZN4bb20D1Ev();
+Name_Map name_map_bb20[] = {
+  NSPAIR(_ZN4bb20C1Ev),
+  NSPAIR(_ZN4bb20D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+static Base_Class bases_bb20[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4bb20[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_bb20[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb20[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+Class_Descriptor cd_bb20 = {  "bb20", // class name
+  bases_bb20, 1,
+  &(vtc_bb20[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,12), // object size
+  NSPAIRA(_ZTI4bb20),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4bb20),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  cc020  : bb20 {
+  int c;
+  ~cc020(); // tgen
+  cc020(); // tgen
+};
+//SIG(-1 cc020) C1{ BC2{ BC3{ Fi} v1 Fi} Fi}
+
+
+cc020 ::~cc020(){ note_dtor("cc020", this);} // tgen
+cc020 ::cc020(){ note_ctor("cc020", this);} // tgen
+
+static void Test_cc020()
+{
+  extern Class_Descriptor cd_cc020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(4,5)];
+    init_test(&cd_cc020, buf);
+    cc020 *dp, &lv = *(dp=new (buf) cc020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,16), "sizeof(cc020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc020)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(8,4), "cc020");
+    check_base_class_offset(lv, (bb20*), 0, "cc020");
+    check_field_offset(lv, c, ABISELECT(16,12), "cc020.c");
+    test_class_info(&lv, &cd_cc020);
+    dp->~cc020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc020(Test_cc020, "cc020", ABISELECT(24,16));
+
+#else // __cplusplus
+
+extern void _ZN5cc020C1Ev();
+extern void _ZN5cc020D1Ev();
+Name_Map name_map_cc020[] = {
+  NSPAIR(_ZN5cc020C1Ev),
+  NSPAIR(_ZN5cc020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+static Base_Class bases_cc020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    0, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI5cc020[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_cc020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+Class_Descriptor cd_cc020 = {  "cc020", // class name
+  bases_cc020, 2,
+  &(vtc_cc020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(24,16), // object size
+  NSPAIRA(_ZTI5cc020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV5cc020),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  1, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd0020  : cc020 {
+  int d;
+  ~dd0020(); // tgen
+  dd0020(); // tgen
+};
+//SIG(-1 dd0020) C1{ BC2{ BC3{ BC4{ Fi} v1 Fi} Fi} Fi}
+
+
+dd0020 ::~dd0020(){ note_dtor("dd0020", this);} // tgen
+dd0020 ::dd0020(){ note_ctor("dd0020", this);} // tgen
+
+static void Test_dd0020()
+{
+  extern Class_Descriptor cd_dd0020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(4,6)];
+    init_test(&cd_dd0020, buf);
+    dd0020 *dp, &lv = *(dp=new (buf) dd0020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,20), "sizeof(dd0020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd0020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(8,4), "dd0020");
+    check_base_class_offset(lv, (bb20*)(cc020*), 0, "dd0020");
+    check_base_class_offset(lv, (cc020*), 0, "dd0020");
+    check_field_offset(lv, d, ABISELECT(20,16), "dd0020.d");
+    test_class_info(&lv, &cd_dd0020);
+    dp->~dd0020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd0020(Test_dd0020, "dd0020", ABISELECT(24,20));
+
+#else // __cplusplus
+
+extern void _ZN6dd0020C1Ev();
+extern void _ZN6dd0020D1Ev();
+Name_Map name_map_dd0020[] = {
+  NSPAIR(_ZN6dd0020C1Ev),
+  NSPAIR(_ZN6dd0020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+static Base_Class bases_dd0020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    0, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_dd0020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern  VTBL_ENTRY _ZTV6dd0020[];
+Class_Descriptor cd_dd0020 = {  "dd0020", // class name
+  bases_dd0020, 3,
+  &(vtc_dd0020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(24,20), // object size
+  NSPAIRA(_ZTI6dd0020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd0020),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  2, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee00020  : dd0020 {
+  int e;
+  ~ee00020(); // tgen
+  ee00020(); // tgen
+};
+//SIG(1 ee00020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} Fi}
+
+
+ee00020 ::~ee00020(){ note_dtor("ee00020", this);} // tgen
+ee00020 ::ee00020(){ note_ctor("ee00020", this);} // tgen
+
+static void Test_ee00020()
+{
+  extern Class_Descriptor cd_ee00020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee00020, buf);
+    ee00020 *dp, &lv = *(dp=new (buf) ee00020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee00020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee00020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd0020*), ABISELECT(8,4), "ee00020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd0020*), 0, "ee00020");
+    check_base_class_offset(lv, (cc020*)(dd0020*), 0, "ee00020");
+    check_base_class_offset(lv, (dd0020*), 0, "ee00020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee00020.e");
+    test_class_info(&lv, &cd_ee00020);
+    dp->~ee00020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee00020(Test_ee00020, "ee00020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee00020C1Ev();
+extern void _ZN7ee00020D1Ev();
+Name_Map name_map_ee00020[] = {
+  NSPAIR(_ZN7ee00020C1Ev),
+  NSPAIR(_ZN7ee00020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd0020;
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern  VTBL_ENTRY _ZTV6dd0020[];
+static Base_Class bases_ee00020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    0, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee00020[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee00020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee00020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTI7ee00020[];
+extern  VTBL_ENTRY _ZTV7ee00020[];
+Class_Descriptor cd_ee00020 = {  "ee00020", // class name
+  bases_ee00020, 4,
+  &(vtc_ee00020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee00020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee00020),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee10020  : virtual dd0020 {
+  int e;
+  ~ee10020(); // tgen
+  ee10020(); // tgen
+};
+//SIG(1 ee10020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} Fi}
+
+
+ee10020 ::~ee10020(){ note_dtor("ee10020", this);} // tgen
+ee10020 ::ee10020(){ note_ctor("ee10020", this);} // tgen
+
+static void Test_ee10020()
+{
+  extern Class_Descriptor cd_ee10020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee10020, buf);
+    ee10020 *dp, &lv = *(dp=new (buf) ee10020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee10020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee10020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd0020*), ABISELECT(24,12), "ee10020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd0020*), ABISELECT(16,8), "ee10020");
+    check_base_class_offset(lv, (cc020*)(dd0020*), ABISELECT(16,8), "ee10020");
+    check_base_class_offset(lv, (dd0020*), ABISELECT(16,8), "ee10020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee10020.e");
+    test_class_info(&lv, &cd_ee10020);
+    dp->~ee10020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee10020(Test_ee10020, "ee10020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee10020C1Ev();
+extern void _ZN7ee10020D1Ev();
+Name_Map name_map_ee10020[] = {
+  NSPAIR(_ZN7ee10020C1Ev),
+  NSPAIR(_ZN7ee10020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd0020;
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern  VTBL_ENTRY _ZTV6dd0020[];
+static Base_Class bases_ee10020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee10020[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee10020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee10020[0]),
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee10020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee10020[];
+static  VTT_ENTRY vtt_ee10020[] = {
+  {&(_ZTV7ee10020[3]),  3,7},
+  {&(_ZTV7ee10020[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI7ee10020[];
+extern  VTBL_ENTRY _ZTV7ee10020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee10020[];
+Class_Descriptor cd_ee10020 = {  "ee10020", // class name
+  bases_ee10020, 4,
+  &(vtc_ee10020[0]), // expected_vtbl_contents
+  &(vtt_ee10020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee10020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee10020),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee10020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee20020  : dd0020 {
+  int e;
+  virtual void  foo(); // _ZN7ee200203fooEv
+  ~ee20020(); // tgen
+  ee20020(); // tgen
+};
+//SIG(1 ee20020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee20020 ::foo(){vfunc_called(this, "_ZN7ee200203fooEv");}
+ee20020 ::~ee20020(){ note_dtor("ee20020", this);} // tgen
+ee20020 ::ee20020(){ note_ctor("ee20020", this);} // tgen
+
+static void Test_ee20020()
+{
+  extern Class_Descriptor cd_ee20020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee20020, buf);
+    ee20020 *dp, &lv = *(dp=new (buf) ee20020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee20020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee20020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd0020*), ABISELECT(8,4), "ee20020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd0020*), 0, "ee20020");
+    check_base_class_offset(lv, (cc020*)(dd0020*), 0, "ee20020");
+    check_base_class_offset(lv, (dd0020*), 0, "ee20020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee20020.e");
+    test_class_info(&lv, &cd_ee20020);
+    dp->~ee20020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee20020(Test_ee20020, "ee20020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee20020C1Ev();
+extern void _ZN7ee20020D1Ev();
+Name_Map name_map_ee20020[] = {
+  NSPAIR(_ZN7ee20020C1Ev),
+  NSPAIR(_ZN7ee20020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd0020;
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern  VTBL_ENTRY _ZTV6dd0020[];
+static Base_Class bases_ee20020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee20020[];
+extern void _ZN7ee200203fooEv();
+static  VTBL_ENTRY vtc_ee20020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee20020[0]),
+  (VTBL_ENTRY)&_ZN7ee200203fooEv,
+};
+extern VTBL_ENTRY _ZTI7ee20020[];
+extern  VTBL_ENTRY _ZTV7ee20020[];
+Class_Descriptor cd_ee20020 = {  "ee20020", // class name
+  bases_ee20020, 4,
+  &(vtc_ee20020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee20020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee20020),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee30020  : virtual dd0020 {
+  int e;
+  virtual void  foo(); // _ZN7ee300203fooEv
+  ~ee30020(); // tgen
+  ee30020(); // tgen
+};
+//SIG(1 ee30020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee30020 ::foo(){vfunc_called(this, "_ZN7ee300203fooEv");}
+ee30020 ::~ee30020(){ note_dtor("ee30020", this);} // tgen
+ee30020 ::ee30020(){ note_ctor("ee30020", this);} // tgen
+
+static void Test_ee30020()
+{
+  extern Class_Descriptor cd_ee30020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee30020, buf);
+    ee30020 *dp, &lv = *(dp=new (buf) ee30020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee30020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee30020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd0020*), ABISELECT(24,12), "ee30020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd0020*), ABISELECT(16,8), "ee30020");
+    check_base_class_offset(lv, (cc020*)(dd0020*), ABISELECT(16,8), "ee30020");
+    check_base_class_offset(lv, (dd0020*), ABISELECT(16,8), "ee30020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee30020.e");
+    test_class_info(&lv, &cd_ee30020);
+    dp->~ee30020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee30020(Test_ee30020, "ee30020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee30020C1Ev();
+extern void _ZN7ee30020D1Ev();
+Name_Map name_map_ee30020[] = {
+  NSPAIR(_ZN7ee30020C1Ev),
+  NSPAIR(_ZN7ee30020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd0020;
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern  VTBL_ENTRY _ZTV6dd0020[];
+static Base_Class bases_ee30020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee30020[];
+extern void _ZN7ee300203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee300203fooEv,_ZTv0_n12_N7ee300203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee300203fooEv,_ZThn8_N7ee300203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee30020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee30020[0]),
+  (VTBL_ENTRY)&_ZN7ee300203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee30020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee300203fooEv,_ZTv0_n12_N7ee300203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee30020[];
+static  VTT_ENTRY vtt_ee30020[] = {
+  {&(_ZTV7ee30020[3]),  3,8},
+  {&(_ZTV7ee30020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee30020[];
+extern  VTBL_ENTRY _ZTV7ee30020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee30020[];
+static VTBL_ENTRY alt_thunk_names1[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee300203fooEv,_ZTv0_n12_N7ee300203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee300203fooEv,_ZThn8_N7ee300203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee30020 = {  "ee30020", // class name
+  bases_ee30020, 4,
+  &(vtc_ee30020[0]), // expected_vtbl_contents
+  &(vtt_ee30020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee30020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee30020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee30020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names1,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee40020  : dd0020 {
+  int e;
+  virtual void  bar(); // _ZN7ee400203barEv
+  ~ee40020(); // tgen
+  ee40020(); // tgen
+};
+//SIG(1 ee40020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee40020 ::bar(){vfunc_called(this, "_ZN7ee400203barEv");}
+ee40020 ::~ee40020(){ note_dtor("ee40020", this);} // tgen
+ee40020 ::ee40020(){ note_ctor("ee40020", this);} // tgen
+
+static void Test_ee40020()
+{
+  extern Class_Descriptor cd_ee40020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee40020, buf);
+    ee40020 *dp, &lv = *(dp=new (buf) ee40020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee40020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee40020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd0020*), ABISELECT(8,4), "ee40020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd0020*), 0, "ee40020");
+    check_base_class_offset(lv, (cc020*)(dd0020*), 0, "ee40020");
+    check_base_class_offset(lv, (dd0020*), 0, "ee40020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee40020.e");
+    test_class_info(&lv, &cd_ee40020);
+    dp->~ee40020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee40020(Test_ee40020, "ee40020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee40020C1Ev();
+extern void _ZN7ee40020D1Ev();
+Name_Map name_map_ee40020[] = {
+  NSPAIR(_ZN7ee40020C1Ev),
+  NSPAIR(_ZN7ee40020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd0020;
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern  VTBL_ENTRY _ZTV6dd0020[];
+static Base_Class bases_ee40020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee40020[];
+extern void _ZN4bb203fooEv();
+extern void _ZN7ee400203barEv();
+static  VTBL_ENTRY vtc_ee40020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee40020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+  (VTBL_ENTRY)&_ZN7ee400203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee40020[];
+extern  VTBL_ENTRY _ZTV7ee40020[];
+Class_Descriptor cd_ee40020 = {  "ee40020", // class name
+  bases_ee40020, 4,
+  &(vtc_ee40020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee40020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee40020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee50020  : virtual dd0020 {
+  int e;
+  virtual void  bar(); // _ZN7ee500203barEv
+  ~ee50020(); // tgen
+  ee50020(); // tgen
+};
+//SIG(1 ee50020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee50020 ::bar(){vfunc_called(this, "_ZN7ee500203barEv");}
+ee50020 ::~ee50020(){ note_dtor("ee50020", this);} // tgen
+ee50020 ::ee50020(){ note_ctor("ee50020", this);} // tgen
+
+static void Test_ee50020()
+{
+  extern Class_Descriptor cd_ee50020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee50020, buf);
+    ee50020 *dp, &lv = *(dp=new (buf) ee50020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee50020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee50020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd0020*), ABISELECT(24,12), "ee50020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd0020*), ABISELECT(16,8), "ee50020");
+    check_base_class_offset(lv, (cc020*)(dd0020*), ABISELECT(16,8), "ee50020");
+    check_base_class_offset(lv, (dd0020*), ABISELECT(16,8), "ee50020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee50020.e");
+    test_class_info(&lv, &cd_ee50020);
+    dp->~ee50020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee50020(Test_ee50020, "ee50020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee50020C1Ev();
+extern void _ZN7ee50020D1Ev();
+Name_Map name_map_ee50020[] = {
+  NSPAIR(_ZN7ee50020C1Ev),
+  NSPAIR(_ZN7ee50020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd0020;
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern  VTBL_ENTRY _ZTV6dd0020[];
+static Base_Class bases_ee50020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee50020[];
+extern void _ZN7ee500203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee50020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee50020[0]),
+  (VTBL_ENTRY)&_ZN7ee500203barEv,
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee50020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee50020[];
+static  VTT_ENTRY vtt_ee50020[] = {
+  {&(_ZTV7ee50020[3]),  3,8},
+  {&(_ZTV7ee50020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee50020[];
+extern  VTBL_ENTRY _ZTV7ee50020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee50020[];
+Class_Descriptor cd_ee50020 = {  "ee50020", // class name
+  bases_ee50020, 4,
+  &(vtc_ee50020[0]), // expected_vtbl_contents
+  &(vtt_ee50020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee50020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee50020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee50020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee60020  : dd0020 {
+  int e;
+  virtual void  foo(); // _ZN7ee600203fooEv
+  virtual void  bar(); // _ZN7ee600203barEv
+  ~ee60020(); // tgen
+  ee60020(); // tgen
+};
+//SIG(1 ee60020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 v2 Fi}
+
+
+void  ee60020 ::foo(){vfunc_called(this, "_ZN7ee600203fooEv");}
+void  ee60020 ::bar(){vfunc_called(this, "_ZN7ee600203barEv");}
+ee60020 ::~ee60020(){ note_dtor("ee60020", this);} // tgen
+ee60020 ::ee60020(){ note_ctor("ee60020", this);} // tgen
+
+static void Test_ee60020()
+{
+  extern Class_Descriptor cd_ee60020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee60020, buf);
+    ee60020 *dp, &lv = *(dp=new (buf) ee60020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee60020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee60020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd0020*), ABISELECT(8,4), "ee60020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd0020*), 0, "ee60020");
+    check_base_class_offset(lv, (cc020*)(dd0020*), 0, "ee60020");
+    check_base_class_offset(lv, (dd0020*), 0, "ee60020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee60020.e");
+    test_class_info(&lv, &cd_ee60020);
+    dp->~ee60020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee60020(Test_ee60020, "ee60020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee60020C1Ev();
+extern void _ZN7ee60020D1Ev();
+Name_Map name_map_ee60020[] = {
+  NSPAIR(_ZN7ee60020C1Ev),
+  NSPAIR(_ZN7ee60020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd0020;
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern  VTBL_ENTRY _ZTV6dd0020[];
+static Base_Class bases_ee60020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee60020[];
+extern void _ZN7ee600203fooEv();
+extern void _ZN7ee600203barEv();
+static  VTBL_ENTRY vtc_ee60020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee60020[0]),
+  (VTBL_ENTRY)&_ZN7ee600203fooEv,
+  (VTBL_ENTRY)&_ZN7ee600203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee60020[];
+extern  VTBL_ENTRY _ZTV7ee60020[];
+Class_Descriptor cd_ee60020 = {  "ee60020", // class name
+  bases_ee60020, 4,
+  &(vtc_ee60020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee60020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee60020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee70020  : virtual dd0020 {
+  int e;
+  virtual void  foo(); // _ZN7ee700203fooEv
+  virtual void  bar(); // _ZN7ee700203barEv
+  ~ee70020(); // tgen
+  ee70020(); // tgen
+};
+//SIG(1 ee70020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 v2 Fi}
+
+
+void  ee70020 ::foo(){vfunc_called(this, "_ZN7ee700203fooEv");}
+void  ee70020 ::bar(){vfunc_called(this, "_ZN7ee700203barEv");}
+ee70020 ::~ee70020(){ note_dtor("ee70020", this);} // tgen
+ee70020 ::ee70020(){ note_ctor("ee70020", this);} // tgen
+
+static void Test_ee70020()
+{
+  extern Class_Descriptor cd_ee70020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee70020, buf);
+    ee70020 *dp, &lv = *(dp=new (buf) ee70020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee70020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee70020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd0020*), ABISELECT(24,12), "ee70020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd0020*), ABISELECT(16,8), "ee70020");
+    check_base_class_offset(lv, (cc020*)(dd0020*), ABISELECT(16,8), "ee70020");
+    check_base_class_offset(lv, (dd0020*), ABISELECT(16,8), "ee70020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee70020.e");
+    test_class_info(&lv, &cd_ee70020);
+    dp->~ee70020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee70020(Test_ee70020, "ee70020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee70020C1Ev();
+extern void _ZN7ee70020D1Ev();
+Name_Map name_map_ee70020[] = {
+  NSPAIR(_ZN7ee70020C1Ev),
+  NSPAIR(_ZN7ee70020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd0020;
+extern VTBL_ENTRY _ZTI6dd0020[];
+extern  VTBL_ENTRY _ZTV6dd0020[];
+static Base_Class bases_ee70020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee70020[];
+extern void _ZN7ee700203fooEv();
+extern void _ZN7ee700203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee700203fooEv,_ZTv0_n12_N7ee700203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee700203fooEv,_ZThn8_N7ee700203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee70020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee70020[0]),
+  (VTBL_ENTRY)&_ZN7ee700203fooEv,
+  (VTBL_ENTRY)&_ZN7ee700203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee70020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee700203fooEv,_ZTv0_n12_N7ee700203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee70020[];
+static  VTT_ENTRY vtt_ee70020[] = {
+  {&(_ZTV7ee70020[3]),  3,9},
+  {&(_ZTV7ee70020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee70020[];
+extern  VTBL_ENTRY _ZTV7ee70020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee70020[];
+static VTBL_ENTRY alt_thunk_names2[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee700203fooEv,_ZTv0_n12_N7ee700203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee700203fooEv,_ZThn8_N7ee700203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee70020 = {  "ee70020", // class name
+  bases_ee70020, 4,
+  &(vtc_ee70020[0]), // expected_vtbl_contents
+  &(vtt_ee70020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee70020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee70020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee70020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names2,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd1020  : virtual cc020 {
+  int d;
+  ~dd1020(); // tgen
+  dd1020(); // tgen
+};
+//SIG(-1 dd1020) C1{ VBC2{ BC3{ BC4{ Fi} v1 Fi} Fi} Fi}
+
+
+dd1020 ::~dd1020(){ note_dtor("dd1020", this);} // tgen
+dd1020 ::dd1020(){ note_ctor("dd1020", this);} // tgen
+
+static void Test_dd1020()
+{
+  extern Class_Descriptor cd_dd1020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,7)];
+    init_test(&cd_dd1020, buf);
+    dd1020 *dp, &lv = *(dp=new (buf) dd1020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,24), "sizeof(dd1020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd1020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,12), "dd1020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,8), "dd1020");
+    check_base_class_offset(lv, (cc020*), ABISELECT(16,8), "dd1020");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd1020.d");
+    test_class_info(&lv, &cd_dd1020);
+    dp->~dd1020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd1020(Test_dd1020, "dd1020", ABISELECT(40,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd1020C1Ev();
+extern void _ZN6dd1020D1Ev();
+Name_Map name_map_dd1020[] = {
+  NSPAIR(_ZN6dd1020C1Ev),
+  NSPAIR(_ZN6dd1020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+static Base_Class bases_dd1020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_dd1020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV6dd1020[];
+static  VTT_ENTRY vtt_dd1020[] = {
+  {&(_ZTV6dd1020[3]),  3,7},
+  {&(_ZTV6dd1020[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern  VTBL_ENTRY _ZTV6dd1020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1020[];
+Class_Descriptor cd_dd1020 = {  "dd1020", // class name
+  bases_dd1020, 3,
+  &(vtc_dd1020[0]), // expected_vtbl_contents
+  &(vtt_dd1020[0]), // expected_vtt_contents
+  ABISELECT(40,24), // object size
+  NSPAIRA(_ZTI6dd1020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd1020),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd1020),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee01020  : dd1020 {
+  int e;
+  ~ee01020(); // tgen
+  ee01020(); // tgen
+};
+//SIG(1 ee01020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} Fi}
+
+
+ee01020 ::~ee01020(){ note_dtor("ee01020", this);} // tgen
+ee01020 ::ee01020(){ note_ctor("ee01020", this);} // tgen
+
+static void Test_ee01020()
+{
+  extern Class_Descriptor cd_ee01020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee01020, buf);
+    ee01020 *dp, &lv = *(dp=new (buf) ee01020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee01020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee01020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee01020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee01020");
+    check_base_class_offset(lv, (cc020*)(dd1020*), ABISELECT(16,12), "ee01020");
+    check_base_class_offset(lv, (dd1020*), 0, "ee01020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee01020.e");
+    test_class_info(&lv, &cd_ee01020);
+    dp->~ee01020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee01020(Test_ee01020, "ee01020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee01020C1Ev();
+extern void _ZN7ee01020D1Ev();
+Name_Map name_map_ee01020[] = {
+  NSPAIR(_ZN7ee01020C1Ev),
+  NSPAIR(_ZN7ee01020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd1020;
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern  VTBL_ENTRY _ZTV6dd1020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1020[];
+static Base_Class bases_ee01020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee01020[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee01020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee01020[0]),
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee01020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee01020[];
+static  VTBL_ENTRY _tg__ZTV6dd1020__7ee01020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd1020__7ee01020[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee01020[] = {
+  {&(_ZTV7ee01020[3]),  3,7},
+  {&(_tg__ZTV6dd1020__7ee01020[3]),  3,3},
+  {&(_tg__ZTV4bb205cc020__6dd1020__7ee01020[3]),  3,4},
+  {&(_ZTV7ee01020[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI7ee01020[];
+extern  VTBL_ENTRY _ZTV7ee01020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee01020[];
+Class_Descriptor cd_ee01020 = {  "ee01020", // class name
+  bases_ee01020, 4,
+  &(vtc_ee01020[0]), // expected_vtbl_contents
+  &(vtt_ee01020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee01020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee01020),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee01020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee11020  : virtual dd1020 {
+  int e;
+  ~ee11020(); // tgen
+  ee11020(); // tgen
+};
+//SIG(1 ee11020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} Fi}
+
+
+ee11020 ::~ee11020(){ note_dtor("ee11020", this);} // tgen
+ee11020 ::ee11020(){ note_ctor("ee11020", this);} // tgen
+
+static void Test_ee11020()
+{
+  extern Class_Descriptor cd_ee11020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee11020, buf);
+    ee11020 *dp, &lv = *(dp=new (buf) ee11020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee11020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee11020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee11020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee11020");
+    check_base_class_offset(lv, (cc020*)(dd1020*), ABISELECT(32,16), "ee11020");
+    check_base_class_offset(lv, (dd1020*), ABISELECT(16,8), "ee11020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee11020.e");
+    test_class_info(&lv, &cd_ee11020);
+    dp->~ee11020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee11020(Test_ee11020, "ee11020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee11020C1Ev();
+extern void _ZN7ee11020D1Ev();
+Name_Map name_map_ee11020[] = {
+  NSPAIR(_ZN7ee11020C1Ev),
+  NSPAIR(_ZN7ee11020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd1020;
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern  VTBL_ENTRY _ZTV6dd1020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1020[];
+static Base_Class bases_ee11020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee11020[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee11020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee11020[0]),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee11020[0]),
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee11020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee11020[];
+static  VTBL_ENTRY _tg__ZTV6dd1020__7ee11020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd1020__7ee11020[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee11020[] = {
+  {&(_ZTV7ee11020[4]),  4,11},
+  {&(_ZTV7ee11020[7]),  7,11},
+  {&(_ZTV7ee11020[10]),  10,11},
+  {&(_tg__ZTV6dd1020__7ee11020[3]),  3,3},
+  {&(_tg__ZTV4bb205cc020__6dd1020__7ee11020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee11020[];
+extern  VTBL_ENTRY _ZTV7ee11020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee11020[];
+Class_Descriptor cd_ee11020 = {  "ee11020", // class name
+  bases_ee11020, 4,
+  &(vtc_ee11020[0]), // expected_vtbl_contents
+  &(vtt_ee11020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee11020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee11020),11, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee11020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee21020  : dd1020 {
+  int e;
+  virtual void  foo(); // _ZN7ee210203fooEv
+  ~ee21020(); // tgen
+  ee21020(); // tgen
+};
+//SIG(1 ee21020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee21020 ::foo(){vfunc_called(this, "_ZN7ee210203fooEv");}
+ee21020 ::~ee21020(){ note_dtor("ee21020", this);} // tgen
+ee21020 ::ee21020(){ note_ctor("ee21020", this);} // tgen
+
+static void Test_ee21020()
+{
+  extern Class_Descriptor cd_ee21020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee21020, buf);
+    ee21020 *dp, &lv = *(dp=new (buf) ee21020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee21020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee21020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee21020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee21020");
+    check_base_class_offset(lv, (cc020*)(dd1020*), ABISELECT(16,12), "ee21020");
+    check_base_class_offset(lv, (dd1020*), 0, "ee21020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee21020.e");
+    test_class_info(&lv, &cd_ee21020);
+    dp->~ee21020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee21020(Test_ee21020, "ee21020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee21020C1Ev();
+extern void _ZN7ee21020D1Ev();
+Name_Map name_map_ee21020[] = {
+  NSPAIR(_ZN7ee21020C1Ev),
+  NSPAIR(_ZN7ee21020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd1020;
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern  VTBL_ENTRY _ZTV6dd1020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1020[];
+static Base_Class bases_ee21020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee21020[];
+extern void _ZN7ee210203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee210203fooEv,_ZTv0_n12_N7ee210203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee210203fooEv,_ZThn12_N7ee210203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee21020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee21020[0]),
+  (VTBL_ENTRY)&_ZN7ee210203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee21020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee210203fooEv,_ZTv0_n12_N7ee210203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee21020[];
+static  VTBL_ENTRY _tg__ZTV6dd1020__7ee21020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd1020__7ee21020[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee21020[] = {
+  {&(_ZTV7ee21020[3]),  3,8},
+  {&(_tg__ZTV6dd1020__7ee21020[3]),  3,3},
+  {&(_tg__ZTV4bb205cc020__6dd1020__7ee21020[3]),  3,4},
+  {&(_ZTV7ee21020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee21020[];
+extern  VTBL_ENTRY _ZTV7ee21020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee21020[];
+static VTBL_ENTRY alt_thunk_names3[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee210203fooEv,_ZTv0_n12_N7ee210203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee210203fooEv,_ZThn12_N7ee210203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee21020 = {  "ee21020", // class name
+  bases_ee21020, 4,
+  &(vtc_ee21020[0]), // expected_vtbl_contents
+  &(vtt_ee21020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee21020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee21020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee21020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names3,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee31020  : virtual dd1020 {
+  int e;
+  virtual void  foo(); // _ZN7ee310203fooEv
+  ~ee31020(); // tgen
+  ee31020(); // tgen
+};
+//SIG(1 ee31020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee31020 ::foo(){vfunc_called(this, "_ZN7ee310203fooEv");}
+ee31020 ::~ee31020(){ note_dtor("ee31020", this);} // tgen
+ee31020 ::ee31020(){ note_ctor("ee31020", this);} // tgen
+
+static void Test_ee31020()
+{
+  extern Class_Descriptor cd_ee31020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee31020, buf);
+    ee31020 *dp, &lv = *(dp=new (buf) ee31020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee31020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee31020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee31020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee31020");
+    check_base_class_offset(lv, (cc020*)(dd1020*), ABISELECT(32,16), "ee31020");
+    check_base_class_offset(lv, (dd1020*), ABISELECT(16,8), "ee31020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee31020.e");
+    test_class_info(&lv, &cd_ee31020);
+    dp->~ee31020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee31020(Test_ee31020, "ee31020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee31020C1Ev();
+extern void _ZN7ee31020D1Ev();
+Name_Map name_map_ee31020[] = {
+  NSPAIR(_ZN7ee31020C1Ev),
+  NSPAIR(_ZN7ee31020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd1020;
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern  VTBL_ENTRY _ZTV6dd1020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1020[];
+static Base_Class bases_ee31020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee31020[];
+extern void _ZN7ee310203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee310203fooEv,_ZTv0_n12_N7ee310203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee310203fooEv,_ZThn16_N7ee310203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee31020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee31020[0]),
+  (VTBL_ENTRY)&_ZN7ee310203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee31020[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee31020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee310203fooEv,_ZTv0_n12_N7ee310203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee31020[];
+static  VTBL_ENTRY _tg__ZTV6dd1020__7ee31020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd1020__7ee31020[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee31020[] = {
+  {&(_ZTV7ee31020[4]),  4,12},
+  {&(_ZTV7ee31020[8]),  8,12},
+  {&(_ZTV7ee31020[11]),  11,12},
+  {&(_tg__ZTV6dd1020__7ee31020[3]),  3,3},
+  {&(_tg__ZTV4bb205cc020__6dd1020__7ee31020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee31020[];
+extern  VTBL_ENTRY _ZTV7ee31020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee31020[];
+static VTBL_ENTRY alt_thunk_names4[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee310203fooEv,_ZTv0_n12_N7ee310203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee310203fooEv,_ZThn16_N7ee310203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee31020 = {  "ee31020", // class name
+  bases_ee31020, 4,
+  &(vtc_ee31020[0]), // expected_vtbl_contents
+  &(vtt_ee31020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee31020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee31020),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee31020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names4,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee41020  : dd1020 {
+  int e;
+  virtual void  bar(); // _ZN7ee410203barEv
+  ~ee41020(); // tgen
+  ee41020(); // tgen
+};
+//SIG(1 ee41020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee41020 ::bar(){vfunc_called(this, "_ZN7ee410203barEv");}
+ee41020 ::~ee41020(){ note_dtor("ee41020", this);} // tgen
+ee41020 ::ee41020(){ note_ctor("ee41020", this);} // tgen
+
+static void Test_ee41020()
+{
+  extern Class_Descriptor cd_ee41020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee41020, buf);
+    ee41020 *dp, &lv = *(dp=new (buf) ee41020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee41020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee41020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee41020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee41020");
+    check_base_class_offset(lv, (cc020*)(dd1020*), ABISELECT(16,12), "ee41020");
+    check_base_class_offset(lv, (dd1020*), 0, "ee41020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee41020.e");
+    test_class_info(&lv, &cd_ee41020);
+    dp->~ee41020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee41020(Test_ee41020, "ee41020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee41020C1Ev();
+extern void _ZN7ee41020D1Ev();
+Name_Map name_map_ee41020[] = {
+  NSPAIR(_ZN7ee41020C1Ev),
+  NSPAIR(_ZN7ee41020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd1020;
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern  VTBL_ENTRY _ZTV6dd1020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1020[];
+static Base_Class bases_ee41020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee41020[];
+extern void _ZN7ee410203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee41020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee41020[0]),
+  (VTBL_ENTRY)&_ZN7ee410203barEv,
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee41020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee41020[];
+static  VTBL_ENTRY _tg__ZTV6dd1020__7ee41020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd1020__7ee41020[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee41020[] = {
+  {&(_ZTV7ee41020[3]),  3,8},
+  {&(_tg__ZTV6dd1020__7ee41020[3]),  3,3},
+  {&(_tg__ZTV4bb205cc020__6dd1020__7ee41020[3]),  3,4},
+  {&(_ZTV7ee41020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee41020[];
+extern  VTBL_ENTRY _ZTV7ee41020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee41020[];
+Class_Descriptor cd_ee41020 = {  "ee41020", // class name
+  bases_ee41020, 4,
+  &(vtc_ee41020[0]), // expected_vtbl_contents
+  &(vtt_ee41020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee41020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee41020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee41020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee51020  : virtual dd1020 {
+  int e;
+  virtual void  bar(); // _ZN7ee510203barEv
+  ~ee51020(); // tgen
+  ee51020(); // tgen
+};
+//SIG(1 ee51020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee51020 ::bar(){vfunc_called(this, "_ZN7ee510203barEv");}
+ee51020 ::~ee51020(){ note_dtor("ee51020", this);} // tgen
+ee51020 ::ee51020(){ note_ctor("ee51020", this);} // tgen
+
+static void Test_ee51020()
+{
+  extern Class_Descriptor cd_ee51020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee51020, buf);
+    ee51020 *dp, &lv = *(dp=new (buf) ee51020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee51020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee51020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee51020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee51020");
+    check_base_class_offset(lv, (cc020*)(dd1020*), ABISELECT(32,16), "ee51020");
+    check_base_class_offset(lv, (dd1020*), ABISELECT(16,8), "ee51020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee51020.e");
+    test_class_info(&lv, &cd_ee51020);
+    dp->~ee51020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee51020(Test_ee51020, "ee51020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee51020C1Ev();
+extern void _ZN7ee51020D1Ev();
+Name_Map name_map_ee51020[] = {
+  NSPAIR(_ZN7ee51020C1Ev),
+  NSPAIR(_ZN7ee51020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd1020;
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern  VTBL_ENTRY _ZTV6dd1020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1020[];
+static Base_Class bases_ee51020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee51020[];
+extern void _ZN7ee510203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee51020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee51020[0]),
+  (VTBL_ENTRY)&_ZN7ee510203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee51020[0]),
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee51020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee51020[];
+static  VTBL_ENTRY _tg__ZTV6dd1020__7ee51020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd1020__7ee51020[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee51020[] = {
+  {&(_ZTV7ee51020[4]),  4,12},
+  {&(_ZTV7ee51020[8]),  8,12},
+  {&(_ZTV7ee51020[11]),  11,12},
+  {&(_tg__ZTV6dd1020__7ee51020[3]),  3,3},
+  {&(_tg__ZTV4bb205cc020__6dd1020__7ee51020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee51020[];
+extern  VTBL_ENTRY _ZTV7ee51020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee51020[];
+Class_Descriptor cd_ee51020 = {  "ee51020", // class name
+  bases_ee51020, 4,
+  &(vtc_ee51020[0]), // expected_vtbl_contents
+  &(vtt_ee51020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee51020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee51020),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee51020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee61020  : dd1020 {
+  int e;
+  virtual void  foo(); // _ZN7ee610203fooEv
+  virtual void  bar(); // _ZN7ee610203barEv
+  ~ee61020(); // tgen
+  ee61020(); // tgen
+};
+//SIG(1 ee61020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 v2 Fi}
+
+
+void  ee61020 ::foo(){vfunc_called(this, "_ZN7ee610203fooEv");}
+void  ee61020 ::bar(){vfunc_called(this, "_ZN7ee610203barEv");}
+ee61020 ::~ee61020(){ note_dtor("ee61020", this);} // tgen
+ee61020 ::ee61020(){ note_ctor("ee61020", this);} // tgen
+
+static void Test_ee61020()
+{
+  extern Class_Descriptor cd_ee61020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee61020, buf);
+    ee61020 *dp, &lv = *(dp=new (buf) ee61020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee61020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee61020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee61020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee61020");
+    check_base_class_offset(lv, (cc020*)(dd1020*), ABISELECT(16,12), "ee61020");
+    check_base_class_offset(lv, (dd1020*), 0, "ee61020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee61020.e");
+    test_class_info(&lv, &cd_ee61020);
+    dp->~ee61020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee61020(Test_ee61020, "ee61020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee61020C1Ev();
+extern void _ZN7ee61020D1Ev();
+Name_Map name_map_ee61020[] = {
+  NSPAIR(_ZN7ee61020C1Ev),
+  NSPAIR(_ZN7ee61020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd1020;
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern  VTBL_ENTRY _ZTV6dd1020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1020[];
+static Base_Class bases_ee61020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee61020[];
+extern void _ZN7ee610203fooEv();
+extern void _ZN7ee610203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee610203fooEv,_ZTv0_n12_N7ee610203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee610203fooEv,_ZThn12_N7ee610203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee61020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee61020[0]),
+  (VTBL_ENTRY)&_ZN7ee610203fooEv,
+  (VTBL_ENTRY)&_ZN7ee610203barEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee61020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee610203fooEv,_ZTv0_n12_N7ee610203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee61020[];
+static  VTBL_ENTRY _tg__ZTV6dd1020__7ee61020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd1020__7ee61020[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee61020[] = {
+  {&(_ZTV7ee61020[3]),  3,9},
+  {&(_tg__ZTV6dd1020__7ee61020[3]),  3,3},
+  {&(_tg__ZTV4bb205cc020__6dd1020__7ee61020[3]),  3,4},
+  {&(_ZTV7ee61020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee61020[];
+extern  VTBL_ENTRY _ZTV7ee61020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee61020[];
+static VTBL_ENTRY alt_thunk_names5[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee610203fooEv,_ZTv0_n12_N7ee610203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee610203fooEv,_ZThn12_N7ee610203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee61020 = {  "ee61020", // class name
+  bases_ee61020, 4,
+  &(vtc_ee61020[0]), // expected_vtbl_contents
+  &(vtt_ee61020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee61020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee61020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee61020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names5,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee71020  : virtual dd1020 {
+  int e;
+  virtual void  foo(); // _ZN7ee710203fooEv
+  virtual void  bar(); // _ZN7ee710203barEv
+  ~ee71020(); // tgen
+  ee71020(); // tgen
+};
+//SIG(1 ee71020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 v2 Fi}
+
+
+void  ee71020 ::foo(){vfunc_called(this, "_ZN7ee710203fooEv");}
+void  ee71020 ::bar(){vfunc_called(this, "_ZN7ee710203barEv");}
+ee71020 ::~ee71020(){ note_dtor("ee71020", this);} // tgen
+ee71020 ::ee71020(){ note_ctor("ee71020", this);} // tgen
+
+static void Test_ee71020()
+{
+  extern Class_Descriptor cd_ee71020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee71020, buf);
+    ee71020 *dp, &lv = *(dp=new (buf) ee71020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee71020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee71020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee71020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee71020");
+    check_base_class_offset(lv, (cc020*)(dd1020*), ABISELECT(32,16), "ee71020");
+    check_base_class_offset(lv, (dd1020*), ABISELECT(16,8), "ee71020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee71020.e");
+    test_class_info(&lv, &cd_ee71020);
+    dp->~ee71020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee71020(Test_ee71020, "ee71020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee71020C1Ev();
+extern void _ZN7ee71020D1Ev();
+Name_Map name_map_ee71020[] = {
+  NSPAIR(_ZN7ee71020C1Ev),
+  NSPAIR(_ZN7ee71020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd1020;
+extern VTBL_ENTRY _ZTI6dd1020[];
+extern  VTBL_ENTRY _ZTV6dd1020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1020[];
+static Base_Class bases_ee71020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1020,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee71020[];
+extern void _ZN7ee710203fooEv();
+extern void _ZN7ee710203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee710203fooEv,_ZTv0_n12_N7ee710203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee710203fooEv,_ZThn16_N7ee710203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee71020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee71020[0]),
+  (VTBL_ENTRY)&_ZN7ee710203fooEv,
+  (VTBL_ENTRY)&_ZN7ee710203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee71020[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee71020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee710203fooEv,_ZTv0_n12_N7ee710203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee71020[];
+static  VTBL_ENTRY _tg__ZTV6dd1020__7ee71020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd1020__7ee71020[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee71020[] = {
+  {&(_ZTV7ee71020[4]),  4,13},
+  {&(_ZTV7ee71020[9]),  9,13},
+  {&(_ZTV7ee71020[12]),  12,13},
+  {&(_tg__ZTV6dd1020__7ee71020[3]),  3,3},
+  {&(_tg__ZTV4bb205cc020__6dd1020__7ee71020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee71020[];
+extern  VTBL_ENTRY _ZTV7ee71020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee71020[];
+static VTBL_ENTRY alt_thunk_names6[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee710203fooEv,_ZTv0_n12_N7ee710203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee710203fooEv,_ZThn16_N7ee710203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee71020 = {  "ee71020", // class name
+  bases_ee71020, 4,
+  &(vtc_ee71020[0]), // expected_vtbl_contents
+  &(vtt_ee71020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee71020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee71020),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee71020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names6,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd2020  : cc020 {
+  int d;
+  virtual void  foo(); // _ZN6dd20203fooEv
+  ~dd2020(); // tgen
+  dd2020(); // tgen
+};
+//SIG(-1 dd2020) C1{ BC2{ BC3{ BC4{ Fi} v1 Fi} Fi} v1 Fi}
+
+
+void  dd2020 ::foo(){vfunc_called(this, "_ZN6dd20203fooEv");}
+dd2020 ::~dd2020(){ note_dtor("dd2020", this);} // tgen
+dd2020 ::dd2020(){ note_ctor("dd2020", this);} // tgen
+
+static void Test_dd2020()
+{
+  extern Class_Descriptor cd_dd2020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(4,6)];
+    init_test(&cd_dd2020, buf);
+    dd2020 *dp, &lv = *(dp=new (buf) dd2020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,20), "sizeof(dd2020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd2020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(8,4), "dd2020");
+    check_base_class_offset(lv, (bb20*)(cc020*), 0, "dd2020");
+    check_base_class_offset(lv, (cc020*), 0, "dd2020");
+    check_field_offset(lv, d, ABISELECT(20,16), "dd2020.d");
+    test_class_info(&lv, &cd_dd2020);
+    dp->~dd2020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd2020(Test_dd2020, "dd2020", ABISELECT(24,20));
+
+#else // __cplusplus
+
+extern void _ZN6dd2020C1Ev();
+extern void _ZN6dd2020D1Ev();
+Name_Map name_map_dd2020[] = {
+  NSPAIR(_ZN6dd2020C1Ev),
+  NSPAIR(_ZN6dd2020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+static Base_Class bases_dd2020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern void _ZN6dd20203fooEv();
+static  VTBL_ENTRY vtc_dd2020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2020[0]),
+  (VTBL_ENTRY)&_ZN6dd20203fooEv,
+};
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern  VTBL_ENTRY _ZTV6dd2020[];
+Class_Descriptor cd_dd2020 = {  "dd2020", // class name
+  bases_dd2020, 3,
+  &(vtc_dd2020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(24,20), // object size
+  NSPAIRA(_ZTI6dd2020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd2020),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  2, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee02020  : dd2020 {
+  int e;
+  ~ee02020(); // tgen
+  ee02020(); // tgen
+};
+//SIG(1 ee02020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} Fi}
+
+
+ee02020 ::~ee02020(){ note_dtor("ee02020", this);} // tgen
+ee02020 ::ee02020(){ note_ctor("ee02020", this);} // tgen
+
+static void Test_ee02020()
+{
+  extern Class_Descriptor cd_ee02020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee02020, buf);
+    ee02020 *dp, &lv = *(dp=new (buf) ee02020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee02020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee02020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd2020*), ABISELECT(8,4), "ee02020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd2020*), 0, "ee02020");
+    check_base_class_offset(lv, (cc020*)(dd2020*), 0, "ee02020");
+    check_base_class_offset(lv, (dd2020*), 0, "ee02020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee02020.e");
+    test_class_info(&lv, &cd_ee02020);
+    dp->~ee02020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee02020(Test_ee02020, "ee02020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee02020C1Ev();
+extern void _ZN7ee02020D1Ev();
+Name_Map name_map_ee02020[] = {
+  NSPAIR(_ZN7ee02020C1Ev),
+  NSPAIR(_ZN7ee02020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd2020;
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern  VTBL_ENTRY _ZTV6dd2020[];
+static Base_Class bases_ee02020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2020,    0, //bcp->offset
+    0, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee02020[];
+extern void _ZN6dd20203fooEv();
+static  VTBL_ENTRY vtc_ee02020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee02020[0]),
+  (VTBL_ENTRY)&_ZN6dd20203fooEv,
+};
+extern VTBL_ENTRY _ZTI7ee02020[];
+extern  VTBL_ENTRY _ZTV7ee02020[];
+Class_Descriptor cd_ee02020 = {  "ee02020", // class name
+  bases_ee02020, 4,
+  &(vtc_ee02020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee02020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee02020),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee12020  : virtual dd2020 {
+  int e;
+  ~ee12020(); // tgen
+  ee12020(); // tgen
+};
+//SIG(1 ee12020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} Fi}
+
+
+ee12020 ::~ee12020(){ note_dtor("ee12020", this);} // tgen
+ee12020 ::ee12020(){ note_ctor("ee12020", this);} // tgen
+
+static void Test_ee12020()
+{
+  extern Class_Descriptor cd_ee12020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee12020, buf);
+    ee12020 *dp, &lv = *(dp=new (buf) ee12020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee12020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee12020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd2020*), ABISELECT(24,12), "ee12020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd2020*), ABISELECT(16,8), "ee12020");
+    check_base_class_offset(lv, (cc020*)(dd2020*), ABISELECT(16,8), "ee12020");
+    check_base_class_offset(lv, (dd2020*), ABISELECT(16,8), "ee12020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee12020.e");
+    test_class_info(&lv, &cd_ee12020);
+    dp->~ee12020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee12020(Test_ee12020, "ee12020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee12020C1Ev();
+extern void _ZN7ee12020D1Ev();
+Name_Map name_map_ee12020[] = {
+  NSPAIR(_ZN7ee12020C1Ev),
+  NSPAIR(_ZN7ee12020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd2020;
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern  VTBL_ENTRY _ZTV6dd2020[];
+static Base_Class bases_ee12020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2020,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee12020[];
+extern void _ZN6dd20203fooEv();
+static  VTBL_ENTRY vtc_ee12020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee12020[0]),
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee12020[0]),
+  (VTBL_ENTRY)&_ZN6dd20203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee12020[];
+static  VTT_ENTRY vtt_ee12020[] = {
+  {&(_ZTV7ee12020[3]),  3,7},
+  {&(_ZTV7ee12020[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI7ee12020[];
+extern  VTBL_ENTRY _ZTV7ee12020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee12020[];
+Class_Descriptor cd_ee12020 = {  "ee12020", // class name
+  bases_ee12020, 4,
+  &(vtc_ee12020[0]), // expected_vtbl_contents
+  &(vtt_ee12020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee12020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee12020),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee12020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee22020  : dd2020 {
+  int e;
+  virtual void  foo(); // _ZN7ee220203fooEv
+  ~ee22020(); // tgen
+  ee22020(); // tgen
+};
+//SIG(1 ee22020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee22020 ::foo(){vfunc_called(this, "_ZN7ee220203fooEv");}
+ee22020 ::~ee22020(){ note_dtor("ee22020", this);} // tgen
+ee22020 ::ee22020(){ note_ctor("ee22020", this);} // tgen
+
+static void Test_ee22020()
+{
+  extern Class_Descriptor cd_ee22020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee22020, buf);
+    ee22020 *dp, &lv = *(dp=new (buf) ee22020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee22020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee22020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd2020*), ABISELECT(8,4), "ee22020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd2020*), 0, "ee22020");
+    check_base_class_offset(lv, (cc020*)(dd2020*), 0, "ee22020");
+    check_base_class_offset(lv, (dd2020*), 0, "ee22020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee22020.e");
+    test_class_info(&lv, &cd_ee22020);
+    dp->~ee22020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee22020(Test_ee22020, "ee22020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee22020C1Ev();
+extern void _ZN7ee22020D1Ev();
+Name_Map name_map_ee22020[] = {
+  NSPAIR(_ZN7ee22020C1Ev),
+  NSPAIR(_ZN7ee22020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd2020;
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern  VTBL_ENTRY _ZTV6dd2020[];
+static Base_Class bases_ee22020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee22020[];
+extern void _ZN7ee220203fooEv();
+static  VTBL_ENTRY vtc_ee22020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee22020[0]),
+  (VTBL_ENTRY)&_ZN7ee220203fooEv,
+};
+extern VTBL_ENTRY _ZTI7ee22020[];
+extern  VTBL_ENTRY _ZTV7ee22020[];
+Class_Descriptor cd_ee22020 = {  "ee22020", // class name
+  bases_ee22020, 4,
+  &(vtc_ee22020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee22020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee22020),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee32020  : virtual dd2020 {
+  int e;
+  virtual void  foo(); // _ZN7ee320203fooEv
+  ~ee32020(); // tgen
+  ee32020(); // tgen
+};
+//SIG(1 ee32020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee32020 ::foo(){vfunc_called(this, "_ZN7ee320203fooEv");}
+ee32020 ::~ee32020(){ note_dtor("ee32020", this);} // tgen
+ee32020 ::ee32020(){ note_ctor("ee32020", this);} // tgen
+
+static void Test_ee32020()
+{
+  extern Class_Descriptor cd_ee32020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee32020, buf);
+    ee32020 *dp, &lv = *(dp=new (buf) ee32020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee32020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee32020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd2020*), ABISELECT(24,12), "ee32020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd2020*), ABISELECT(16,8), "ee32020");
+    check_base_class_offset(lv, (cc020*)(dd2020*), ABISELECT(16,8), "ee32020");
+    check_base_class_offset(lv, (dd2020*), ABISELECT(16,8), "ee32020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee32020.e");
+    test_class_info(&lv, &cd_ee32020);
+    dp->~ee32020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee32020(Test_ee32020, "ee32020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee32020C1Ev();
+extern void _ZN7ee32020D1Ev();
+Name_Map name_map_ee32020[] = {
+  NSPAIR(_ZN7ee32020C1Ev),
+  NSPAIR(_ZN7ee32020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd2020;
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern  VTBL_ENTRY _ZTV6dd2020[];
+static Base_Class bases_ee32020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee32020[];
+extern void _ZN7ee320203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee320203fooEv,_ZTv0_n12_N7ee320203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee320203fooEv,_ZThn8_N7ee320203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee32020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee32020[0]),
+  (VTBL_ENTRY)&_ZN7ee320203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee32020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee320203fooEv,_ZTv0_n12_N7ee320203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee32020[];
+static  VTT_ENTRY vtt_ee32020[] = {
+  {&(_ZTV7ee32020[3]),  3,8},
+  {&(_ZTV7ee32020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee32020[];
+extern  VTBL_ENTRY _ZTV7ee32020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee32020[];
+static VTBL_ENTRY alt_thunk_names7[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee320203fooEv,_ZTv0_n12_N7ee320203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee320203fooEv,_ZThn8_N7ee320203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee32020 = {  "ee32020", // class name
+  bases_ee32020, 4,
+  &(vtc_ee32020[0]), // expected_vtbl_contents
+  &(vtt_ee32020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee32020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee32020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee32020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names7,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee42020  : dd2020 {
+  int e;
+  virtual void  bar(); // _ZN7ee420203barEv
+  ~ee42020(); // tgen
+  ee42020(); // tgen
+};
+//SIG(1 ee42020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee42020 ::bar(){vfunc_called(this, "_ZN7ee420203barEv");}
+ee42020 ::~ee42020(){ note_dtor("ee42020", this);} // tgen
+ee42020 ::ee42020(){ note_ctor("ee42020", this);} // tgen
+
+static void Test_ee42020()
+{
+  extern Class_Descriptor cd_ee42020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee42020, buf);
+    ee42020 *dp, &lv = *(dp=new (buf) ee42020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee42020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee42020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd2020*), ABISELECT(8,4), "ee42020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd2020*), 0, "ee42020");
+    check_base_class_offset(lv, (cc020*)(dd2020*), 0, "ee42020");
+    check_base_class_offset(lv, (dd2020*), 0, "ee42020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee42020.e");
+    test_class_info(&lv, &cd_ee42020);
+    dp->~ee42020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee42020(Test_ee42020, "ee42020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee42020C1Ev();
+extern void _ZN7ee42020D1Ev();
+Name_Map name_map_ee42020[] = {
+  NSPAIR(_ZN7ee42020C1Ev),
+  NSPAIR(_ZN7ee42020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd2020;
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern  VTBL_ENTRY _ZTV6dd2020[];
+static Base_Class bases_ee42020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee42020[];
+extern void _ZN6dd20203fooEv();
+extern void _ZN7ee420203barEv();
+static  VTBL_ENTRY vtc_ee42020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee42020[0]),
+  (VTBL_ENTRY)&_ZN6dd20203fooEv,
+  (VTBL_ENTRY)&_ZN7ee420203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee42020[];
+extern  VTBL_ENTRY _ZTV7ee42020[];
+Class_Descriptor cd_ee42020 = {  "ee42020", // class name
+  bases_ee42020, 4,
+  &(vtc_ee42020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee42020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee42020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee52020  : virtual dd2020 {
+  int e;
+  virtual void  bar(); // _ZN7ee520203barEv
+  ~ee52020(); // tgen
+  ee52020(); // tgen
+};
+//SIG(1 ee52020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee52020 ::bar(){vfunc_called(this, "_ZN7ee520203barEv");}
+ee52020 ::~ee52020(){ note_dtor("ee52020", this);} // tgen
+ee52020 ::ee52020(){ note_ctor("ee52020", this);} // tgen
+
+static void Test_ee52020()
+{
+  extern Class_Descriptor cd_ee52020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee52020, buf);
+    ee52020 *dp, &lv = *(dp=new (buf) ee52020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee52020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee52020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd2020*), ABISELECT(24,12), "ee52020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd2020*), ABISELECT(16,8), "ee52020");
+    check_base_class_offset(lv, (cc020*)(dd2020*), ABISELECT(16,8), "ee52020");
+    check_base_class_offset(lv, (dd2020*), ABISELECT(16,8), "ee52020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee52020.e");
+    test_class_info(&lv, &cd_ee52020);
+    dp->~ee52020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee52020(Test_ee52020, "ee52020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee52020C1Ev();
+extern void _ZN7ee52020D1Ev();
+Name_Map name_map_ee52020[] = {
+  NSPAIR(_ZN7ee52020C1Ev),
+  NSPAIR(_ZN7ee52020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd2020;
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern  VTBL_ENTRY _ZTV6dd2020[];
+static Base_Class bases_ee52020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee52020[];
+extern void _ZN7ee520203barEv();
+extern void _ZN6dd20203fooEv();
+static  VTBL_ENTRY vtc_ee52020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee52020[0]),
+  (VTBL_ENTRY)&_ZN7ee520203barEv,
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee52020[0]),
+  (VTBL_ENTRY)&_ZN6dd20203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee52020[];
+static  VTT_ENTRY vtt_ee52020[] = {
+  {&(_ZTV7ee52020[3]),  3,8},
+  {&(_ZTV7ee52020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee52020[];
+extern  VTBL_ENTRY _ZTV7ee52020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee52020[];
+Class_Descriptor cd_ee52020 = {  "ee52020", // class name
+  bases_ee52020, 4,
+  &(vtc_ee52020[0]), // expected_vtbl_contents
+  &(vtt_ee52020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee52020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee52020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee52020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee62020  : dd2020 {
+  int e;
+  virtual void  foo(); // _ZN7ee620203fooEv
+  virtual void  bar(); // _ZN7ee620203barEv
+  ~ee62020(); // tgen
+  ee62020(); // tgen
+};
+//SIG(1 ee62020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee62020 ::foo(){vfunc_called(this, "_ZN7ee620203fooEv");}
+void  ee62020 ::bar(){vfunc_called(this, "_ZN7ee620203barEv");}
+ee62020 ::~ee62020(){ note_dtor("ee62020", this);} // tgen
+ee62020 ::ee62020(){ note_ctor("ee62020", this);} // tgen
+
+static void Test_ee62020()
+{
+  extern Class_Descriptor cd_ee62020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee62020, buf);
+    ee62020 *dp, &lv = *(dp=new (buf) ee62020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee62020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee62020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd2020*), ABISELECT(8,4), "ee62020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd2020*), 0, "ee62020");
+    check_base_class_offset(lv, (cc020*)(dd2020*), 0, "ee62020");
+    check_base_class_offset(lv, (dd2020*), 0, "ee62020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee62020.e");
+    test_class_info(&lv, &cd_ee62020);
+    dp->~ee62020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee62020(Test_ee62020, "ee62020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee62020C1Ev();
+extern void _ZN7ee62020D1Ev();
+Name_Map name_map_ee62020[] = {
+  NSPAIR(_ZN7ee62020C1Ev),
+  NSPAIR(_ZN7ee62020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd2020;
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern  VTBL_ENTRY _ZTV6dd2020[];
+static Base_Class bases_ee62020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee62020[];
+extern void _ZN7ee620203fooEv();
+extern void _ZN7ee620203barEv();
+static  VTBL_ENTRY vtc_ee62020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee62020[0]),
+  (VTBL_ENTRY)&_ZN7ee620203fooEv,
+  (VTBL_ENTRY)&_ZN7ee620203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee62020[];
+extern  VTBL_ENTRY _ZTV7ee62020[];
+Class_Descriptor cd_ee62020 = {  "ee62020", // class name
+  bases_ee62020, 4,
+  &(vtc_ee62020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee62020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee62020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee72020  : virtual dd2020 {
+  int e;
+  virtual void  foo(); // _ZN7ee720203fooEv
+  virtual void  bar(); // _ZN7ee720203barEv
+  ~ee72020(); // tgen
+  ee72020(); // tgen
+};
+//SIG(1 ee72020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee72020 ::foo(){vfunc_called(this, "_ZN7ee720203fooEv");}
+void  ee72020 ::bar(){vfunc_called(this, "_ZN7ee720203barEv");}
+ee72020 ::~ee72020(){ note_dtor("ee72020", this);} // tgen
+ee72020 ::ee72020(){ note_ctor("ee72020", this);} // tgen
+
+static void Test_ee72020()
+{
+  extern Class_Descriptor cd_ee72020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee72020, buf);
+    ee72020 *dp, &lv = *(dp=new (buf) ee72020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee72020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee72020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd2020*), ABISELECT(24,12), "ee72020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd2020*), ABISELECT(16,8), "ee72020");
+    check_base_class_offset(lv, (cc020*)(dd2020*), ABISELECT(16,8), "ee72020");
+    check_base_class_offset(lv, (dd2020*), ABISELECT(16,8), "ee72020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee72020.e");
+    test_class_info(&lv, &cd_ee72020);
+    dp->~ee72020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee72020(Test_ee72020, "ee72020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee72020C1Ev();
+extern void _ZN7ee72020D1Ev();
+Name_Map name_map_ee72020[] = {
+  NSPAIR(_ZN7ee72020C1Ev),
+  NSPAIR(_ZN7ee72020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd2020;
+extern VTBL_ENTRY _ZTI6dd2020[];
+extern  VTBL_ENTRY _ZTV6dd2020[];
+static Base_Class bases_ee72020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee72020[];
+extern void _ZN7ee720203fooEv();
+extern void _ZN7ee720203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee720203fooEv,_ZTv0_n12_N7ee720203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee720203fooEv,_ZThn8_N7ee720203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee72020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee72020[0]),
+  (VTBL_ENTRY)&_ZN7ee720203fooEv,
+  (VTBL_ENTRY)&_ZN7ee720203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee72020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee720203fooEv,_ZTv0_n12_N7ee720203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee72020[];
+static  VTT_ENTRY vtt_ee72020[] = {
+  {&(_ZTV7ee72020[3]),  3,9},
+  {&(_ZTV7ee72020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee72020[];
+extern  VTBL_ENTRY _ZTV7ee72020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee72020[];
+static VTBL_ENTRY alt_thunk_names8[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee720203fooEv,_ZTv0_n12_N7ee720203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee720203fooEv,_ZThn8_N7ee720203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee72020 = {  "ee72020", // class name
+  bases_ee72020, 4,
+  &(vtc_ee72020[0]), // expected_vtbl_contents
+  &(vtt_ee72020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee72020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee72020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee72020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names8,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd3020  : virtual cc020 {
+  int d;
+  virtual void  foo(); // _ZN6dd30203fooEv
+  ~dd3020(); // tgen
+  dd3020(); // tgen
+};
+//SIG(-1 dd3020) C1{ VBC2{ BC3{ BC4{ Fi} v1 Fi} Fi} v1 Fi}
+
+
+void  dd3020 ::foo(){vfunc_called(this, "_ZN6dd30203fooEv");}
+dd3020 ::~dd3020(){ note_dtor("dd3020", this);} // tgen
+dd3020 ::dd3020(){ note_ctor("dd3020", this);} // tgen
+
+static void Test_dd3020()
+{
+  extern Class_Descriptor cd_dd3020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,7)];
+    init_test(&cd_dd3020, buf);
+    dd3020 *dp, &lv = *(dp=new (buf) dd3020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,24), "sizeof(dd3020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd3020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,12), "dd3020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,8), "dd3020");
+    check_base_class_offset(lv, (cc020*), ABISELECT(16,8), "dd3020");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd3020.d");
+    test_class_info(&lv, &cd_dd3020);
+    dp->~dd3020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd3020(Test_dd3020, "dd3020", ABISELECT(40,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd3020C1Ev();
+extern void _ZN6dd3020D1Ev();
+Name_Map name_map_dd3020[] = {
+  NSPAIR(_ZN6dd3020C1Ev),
+  NSPAIR(_ZN6dd3020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+static Base_Class bases_dd3020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern void _ZN6dd30203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_dd3020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+extern VTBL_ENTRY _ZTV6dd3020[];
+static  VTT_ENTRY vtt_dd3020[] = {
+  {&(_ZTV6dd3020[3]),  3,8},
+  {&(_ZTV6dd3020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern  VTBL_ENTRY _ZTV6dd3020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3020[];
+static VTBL_ENTRY alt_thunk_names9[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_dd3020 = {  "dd3020", // class name
+  bases_dd3020, 3,
+  &(vtc_dd3020[0]), // expected_vtbl_contents
+  &(vtt_dd3020[0]), // expected_vtt_contents
+  ABISELECT(40,24), // object size
+  NSPAIRA(_ZTI6dd3020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd3020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd3020),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names9,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee03020  : dd3020 {
+  int e;
+  ~ee03020(); // tgen
+  ee03020(); // tgen
+};
+//SIG(1 ee03020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} Fi}
+
+
+ee03020 ::~ee03020(){ note_dtor("ee03020", this);} // tgen
+ee03020 ::ee03020(){ note_ctor("ee03020", this);} // tgen
+
+static void Test_ee03020()
+{
+  extern Class_Descriptor cd_ee03020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee03020, buf);
+    ee03020 *dp, &lv = *(dp=new (buf) ee03020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee03020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee03020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee03020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee03020");
+    check_base_class_offset(lv, (cc020*)(dd3020*), ABISELECT(16,12), "ee03020");
+    check_base_class_offset(lv, (dd3020*), 0, "ee03020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee03020.e");
+    test_class_info(&lv, &cd_ee03020);
+    dp->~ee03020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee03020(Test_ee03020, "ee03020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee03020C1Ev();
+extern void _ZN7ee03020D1Ev();
+Name_Map name_map_ee03020[] = {
+  NSPAIR(_ZN7ee03020C1Ev),
+  NSPAIR(_ZN7ee03020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd3020;
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern  VTBL_ENTRY _ZTV6dd3020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3020[];
+static Base_Class bases_ee03020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee03020[];
+extern void _ZN6dd30203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee03020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee03020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee03020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee03020[];
+extern void _ZN6dd30203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3020__7ee03020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd3020__7ee03020[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+static  VTT_ENTRY vtt_ee03020[] = {
+  {&(_ZTV7ee03020[3]),  3,8},
+  {&(_tg__ZTV6dd3020__7ee03020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd3020__7ee03020[3]),  3,4},
+  {&(_ZTV7ee03020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee03020[];
+extern  VTBL_ENTRY _ZTV7ee03020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee03020[];
+static VTBL_ENTRY alt_thunk_names10[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee03020 = {  "ee03020", // class name
+  bases_ee03020, 4,
+  &(vtc_ee03020[0]), // expected_vtbl_contents
+  &(vtt_ee03020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee03020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee03020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee03020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names10,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee13020  : virtual dd3020 {
+  int e;
+  ~ee13020(); // tgen
+  ee13020(); // tgen
+};
+//SIG(1 ee13020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} Fi}
+
+
+ee13020 ::~ee13020(){ note_dtor("ee13020", this);} // tgen
+ee13020 ::ee13020(){ note_ctor("ee13020", this);} // tgen
+
+static void Test_ee13020()
+{
+  extern Class_Descriptor cd_ee13020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee13020, buf);
+    ee13020 *dp, &lv = *(dp=new (buf) ee13020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee13020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee13020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee13020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee13020");
+    check_base_class_offset(lv, (cc020*)(dd3020*), ABISELECT(32,16), "ee13020");
+    check_base_class_offset(lv, (dd3020*), ABISELECT(16,8), "ee13020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee13020.e");
+    test_class_info(&lv, &cd_ee13020);
+    dp->~ee13020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee13020(Test_ee13020, "ee13020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee13020C1Ev();
+extern void _ZN7ee13020D1Ev();
+Name_Map name_map_ee13020[] = {
+  NSPAIR(_ZN7ee13020C1Ev),
+  NSPAIR(_ZN7ee13020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd3020;
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern  VTBL_ENTRY _ZTV6dd3020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3020[];
+static Base_Class bases_ee13020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee13020[];
+extern void _ZN6dd30203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee13020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee13020[0]),
+  0,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee13020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee13020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee13020[];
+extern void _ZN6dd30203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3020__7ee13020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd3020__7ee13020[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+static  VTT_ENTRY vtt_ee13020[] = {
+  {&(_ZTV7ee13020[4]),  4,13},
+  {&(_ZTV7ee13020[8]),  8,13},
+  {&(_ZTV7ee13020[12]),  12,13},
+  {&(_tg__ZTV6dd3020__7ee13020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd3020__7ee13020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee13020[];
+extern  VTBL_ENTRY _ZTV7ee13020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee13020[];
+static VTBL_ENTRY alt_thunk_names11[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee13020 = {  "ee13020", // class name
+  bases_ee13020, 4,
+  &(vtc_ee13020[0]), // expected_vtbl_contents
+  &(vtt_ee13020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee13020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee13020),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee13020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names11,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee23020  : dd3020 {
+  int e;
+  virtual void  foo(); // _ZN7ee230203fooEv
+  ~ee23020(); // tgen
+  ee23020(); // tgen
+};
+//SIG(1 ee23020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee23020 ::foo(){vfunc_called(this, "_ZN7ee230203fooEv");}
+ee23020 ::~ee23020(){ note_dtor("ee23020", this);} // tgen
+ee23020 ::ee23020(){ note_ctor("ee23020", this);} // tgen
+
+static void Test_ee23020()
+{
+  extern Class_Descriptor cd_ee23020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee23020, buf);
+    ee23020 *dp, &lv = *(dp=new (buf) ee23020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee23020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee23020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee23020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee23020");
+    check_base_class_offset(lv, (cc020*)(dd3020*), ABISELECT(16,12), "ee23020");
+    check_base_class_offset(lv, (dd3020*), 0, "ee23020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee23020.e");
+    test_class_info(&lv, &cd_ee23020);
+    dp->~ee23020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee23020(Test_ee23020, "ee23020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee23020C1Ev();
+extern void _ZN7ee23020D1Ev();
+Name_Map name_map_ee23020[] = {
+  NSPAIR(_ZN7ee23020C1Ev),
+  NSPAIR(_ZN7ee23020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd3020;
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern  VTBL_ENTRY _ZTV6dd3020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3020[];
+static Base_Class bases_ee23020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee23020[];
+extern void _ZN7ee230203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee230203fooEv,_ZTv0_n12_N7ee230203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee230203fooEv,_ZThn12_N7ee230203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee23020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee23020[0]),
+  (VTBL_ENTRY)&_ZN7ee230203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee23020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee230203fooEv,_ZTv0_n12_N7ee230203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee23020[];
+extern void _ZN6dd30203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3020__7ee23020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd3020__7ee23020[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+static  VTT_ENTRY vtt_ee23020[] = {
+  {&(_ZTV7ee23020[3]),  3,8},
+  {&(_tg__ZTV6dd3020__7ee23020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd3020__7ee23020[3]),  3,4},
+  {&(_ZTV7ee23020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee23020[];
+extern  VTBL_ENTRY _ZTV7ee23020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee23020[];
+static VTBL_ENTRY alt_thunk_names12[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee230203fooEv,_ZTv0_n12_N7ee230203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee230203fooEv,_ZThn12_N7ee230203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee23020 = {  "ee23020", // class name
+  bases_ee23020, 4,
+  &(vtc_ee23020[0]), // expected_vtbl_contents
+  &(vtt_ee23020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee23020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee23020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee23020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names12,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee33020  : virtual dd3020 {
+  int e;
+  virtual void  foo(); // _ZN7ee330203fooEv
+  ~ee33020(); // tgen
+  ee33020(); // tgen
+};
+//SIG(1 ee33020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee33020 ::foo(){vfunc_called(this, "_ZN7ee330203fooEv");}
+ee33020 ::~ee33020(){ note_dtor("ee33020", this);} // tgen
+ee33020 ::ee33020(){ note_ctor("ee33020", this);} // tgen
+
+static void Test_ee33020()
+{
+  extern Class_Descriptor cd_ee33020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee33020, buf);
+    ee33020 *dp, &lv = *(dp=new (buf) ee33020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee33020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee33020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee33020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee33020");
+    check_base_class_offset(lv, (cc020*)(dd3020*), ABISELECT(32,16), "ee33020");
+    check_base_class_offset(lv, (dd3020*), ABISELECT(16,8), "ee33020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee33020.e");
+    test_class_info(&lv, &cd_ee33020);
+    dp->~ee33020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee33020(Test_ee33020, "ee33020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee33020C1Ev();
+extern void _ZN7ee33020D1Ev();
+Name_Map name_map_ee33020[] = {
+  NSPAIR(_ZN7ee33020C1Ev),
+  NSPAIR(_ZN7ee33020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd3020;
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern  VTBL_ENTRY _ZTV6dd3020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3020[];
+static Base_Class bases_ee33020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee33020[];
+extern void _ZN7ee330203fooEv();
+extern void ABISELECT(_ZTv0_n32_N7ee330203fooEv,_ZTv0_n16_N7ee330203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee330203fooEv,_ZThn8_N7ee330203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee330203fooEv,_ZTv0_n12_N7ee330203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee330203fooEv,_ZThn16_N7ee330203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee33020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee33020[0]),
+  (VTBL_ENTRY)&_ZN7ee330203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee33020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee330203fooEv,_ZTv0_n16_N7ee330203fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee33020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee330203fooEv,_ZTv0_n12_N7ee330203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee33020[];
+extern void _ZN6dd30203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3020__7ee33020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd3020__7ee33020[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+static  VTT_ENTRY vtt_ee33020[] = {
+  {&(_ZTV7ee33020[4]),  4,14},
+  {&(_ZTV7ee33020[9]),  9,14},
+  {&(_ZTV7ee33020[13]),  13,14},
+  {&(_tg__ZTV6dd3020__7ee33020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd3020__7ee33020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee33020[];
+extern  VTBL_ENTRY _ZTV7ee33020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee33020[];
+static VTBL_ENTRY alt_thunk_names13[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee330203fooEv,_ZTv0_n12_N7ee330203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee330203fooEv,_ZThn16_N7ee330203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee330203fooEv,_ZTv0_n16_N7ee330203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee330203fooEv,_ZThn8_N7ee330203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee33020 = {  "ee33020", // class name
+  bases_ee33020, 4,
+  &(vtc_ee33020[0]), // expected_vtbl_contents
+  &(vtt_ee33020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee33020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee33020),14, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee33020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names13,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee43020  : dd3020 {
+  int e;
+  virtual void  bar(); // _ZN7ee430203barEv
+  ~ee43020(); // tgen
+  ee43020(); // tgen
+};
+//SIG(1 ee43020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee43020 ::bar(){vfunc_called(this, "_ZN7ee430203barEv");}
+ee43020 ::~ee43020(){ note_dtor("ee43020", this);} // tgen
+ee43020 ::ee43020(){ note_ctor("ee43020", this);} // tgen
+
+static void Test_ee43020()
+{
+  extern Class_Descriptor cd_ee43020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee43020, buf);
+    ee43020 *dp, &lv = *(dp=new (buf) ee43020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee43020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee43020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee43020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee43020");
+    check_base_class_offset(lv, (cc020*)(dd3020*), ABISELECT(16,12), "ee43020");
+    check_base_class_offset(lv, (dd3020*), 0, "ee43020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee43020.e");
+    test_class_info(&lv, &cd_ee43020);
+    dp->~ee43020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee43020(Test_ee43020, "ee43020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee43020C1Ev();
+extern void _ZN7ee43020D1Ev();
+Name_Map name_map_ee43020[] = {
+  NSPAIR(_ZN7ee43020C1Ev),
+  NSPAIR(_ZN7ee43020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd3020;
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern  VTBL_ENTRY _ZTV6dd3020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3020[];
+static Base_Class bases_ee43020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee43020[];
+extern void _ZN6dd30203fooEv();
+extern void _ZN7ee430203barEv();
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee43020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee43020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+  (VTBL_ENTRY)&_ZN7ee430203barEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee43020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee43020[];
+extern void _ZN6dd30203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3020__7ee43020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd3020__7ee43020[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+static  VTT_ENTRY vtt_ee43020[] = {
+  {&(_ZTV7ee43020[3]),  3,9},
+  {&(_tg__ZTV6dd3020__7ee43020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd3020__7ee43020[3]),  3,4},
+  {&(_ZTV7ee43020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee43020[];
+extern  VTBL_ENTRY _ZTV7ee43020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee43020[];
+static VTBL_ENTRY alt_thunk_names14[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee43020 = {  "ee43020", // class name
+  bases_ee43020, 4,
+  &(vtc_ee43020[0]), // expected_vtbl_contents
+  &(vtt_ee43020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee43020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee43020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee43020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names14,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee53020  : virtual dd3020 {
+  int e;
+  virtual void  bar(); // _ZN7ee530203barEv
+  ~ee53020(); // tgen
+  ee53020(); // tgen
+};
+//SIG(1 ee53020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee53020 ::bar(){vfunc_called(this, "_ZN7ee530203barEv");}
+ee53020 ::~ee53020(){ note_dtor("ee53020", this);} // tgen
+ee53020 ::ee53020(){ note_ctor("ee53020", this);} // tgen
+
+static void Test_ee53020()
+{
+  extern Class_Descriptor cd_ee53020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee53020, buf);
+    ee53020 *dp, &lv = *(dp=new (buf) ee53020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee53020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee53020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee53020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee53020");
+    check_base_class_offset(lv, (cc020*)(dd3020*), ABISELECT(32,16), "ee53020");
+    check_base_class_offset(lv, (dd3020*), ABISELECT(16,8), "ee53020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee53020.e");
+    test_class_info(&lv, &cd_ee53020);
+    dp->~ee53020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee53020(Test_ee53020, "ee53020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee53020C1Ev();
+extern void _ZN7ee53020D1Ev();
+Name_Map name_map_ee53020[] = {
+  NSPAIR(_ZN7ee53020C1Ev),
+  NSPAIR(_ZN7ee53020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd3020;
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern  VTBL_ENTRY _ZTV6dd3020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3020[];
+static Base_Class bases_ee53020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee53020[];
+extern void _ZN7ee530203barEv();
+extern void _ZN6dd30203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee53020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee53020[0]),
+  (VTBL_ENTRY)&_ZN7ee530203barEv,
+  0,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee53020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee53020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee53020[];
+extern void _ZN6dd30203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3020__7ee53020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd3020__7ee53020[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+static  VTT_ENTRY vtt_ee53020[] = {
+  {&(_ZTV7ee53020[4]),  4,14},
+  {&(_ZTV7ee53020[9]),  9,14},
+  {&(_ZTV7ee53020[13]),  13,14},
+  {&(_tg__ZTV6dd3020__7ee53020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd3020__7ee53020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee53020[];
+extern  VTBL_ENTRY _ZTV7ee53020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee53020[];
+static VTBL_ENTRY alt_thunk_names15[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee53020 = {  "ee53020", // class name
+  bases_ee53020, 4,
+  &(vtc_ee53020[0]), // expected_vtbl_contents
+  &(vtt_ee53020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee53020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee53020),14, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee53020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names15,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee63020  : dd3020 {
+  int e;
+  virtual void  foo(); // _ZN7ee630203fooEv
+  virtual void  bar(); // _ZN7ee630203barEv
+  ~ee63020(); // tgen
+  ee63020(); // tgen
+};
+//SIG(1 ee63020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee63020 ::foo(){vfunc_called(this, "_ZN7ee630203fooEv");}
+void  ee63020 ::bar(){vfunc_called(this, "_ZN7ee630203barEv");}
+ee63020 ::~ee63020(){ note_dtor("ee63020", this);} // tgen
+ee63020 ::ee63020(){ note_ctor("ee63020", this);} // tgen
+
+static void Test_ee63020()
+{
+  extern Class_Descriptor cd_ee63020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee63020, buf);
+    ee63020 *dp, &lv = *(dp=new (buf) ee63020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee63020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee63020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee63020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee63020");
+    check_base_class_offset(lv, (cc020*)(dd3020*), ABISELECT(16,12), "ee63020");
+    check_base_class_offset(lv, (dd3020*), 0, "ee63020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee63020.e");
+    test_class_info(&lv, &cd_ee63020);
+    dp->~ee63020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee63020(Test_ee63020, "ee63020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee63020C1Ev();
+extern void _ZN7ee63020D1Ev();
+Name_Map name_map_ee63020[] = {
+  NSPAIR(_ZN7ee63020C1Ev),
+  NSPAIR(_ZN7ee63020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd3020;
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern  VTBL_ENTRY _ZTV6dd3020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3020[];
+static Base_Class bases_ee63020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee63020[];
+extern void _ZN7ee630203fooEv();
+extern void _ZN7ee630203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee630203fooEv,_ZTv0_n12_N7ee630203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee630203fooEv,_ZThn12_N7ee630203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee63020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee63020[0]),
+  (VTBL_ENTRY)&_ZN7ee630203fooEv,
+  (VTBL_ENTRY)&_ZN7ee630203barEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee63020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee630203fooEv,_ZTv0_n12_N7ee630203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee63020[];
+extern void _ZN6dd30203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3020__7ee63020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd3020__7ee63020[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+static  VTT_ENTRY vtt_ee63020[] = {
+  {&(_ZTV7ee63020[3]),  3,9},
+  {&(_tg__ZTV6dd3020__7ee63020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd3020__7ee63020[3]),  3,4},
+  {&(_ZTV7ee63020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee63020[];
+extern  VTBL_ENTRY _ZTV7ee63020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee63020[];
+static VTBL_ENTRY alt_thunk_names16[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn12_N6dd30203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee630203fooEv,_ZTv0_n12_N7ee630203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee630203fooEv,_ZThn12_N7ee630203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee63020 = {  "ee63020", // class name
+  bases_ee63020, 4,
+  &(vtc_ee63020[0]), // expected_vtbl_contents
+  &(vtt_ee63020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee63020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee63020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee63020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names16,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee73020  : virtual dd3020 {
+  int e;
+  virtual void  foo(); // _ZN7ee730203fooEv
+  virtual void  bar(); // _ZN7ee730203barEv
+  ~ee73020(); // tgen
+  ee73020(); // tgen
+};
+//SIG(1 ee73020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee73020 ::foo(){vfunc_called(this, "_ZN7ee730203fooEv");}
+void  ee73020 ::bar(){vfunc_called(this, "_ZN7ee730203barEv");}
+ee73020 ::~ee73020(){ note_dtor("ee73020", this);} // tgen
+ee73020 ::ee73020(){ note_ctor("ee73020", this);} // tgen
+
+static void Test_ee73020()
+{
+  extern Class_Descriptor cd_ee73020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee73020, buf);
+    ee73020 *dp, &lv = *(dp=new (buf) ee73020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee73020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee73020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee73020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee73020");
+    check_base_class_offset(lv, (cc020*)(dd3020*), ABISELECT(32,16), "ee73020");
+    check_base_class_offset(lv, (dd3020*), ABISELECT(16,8), "ee73020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee73020.e");
+    test_class_info(&lv, &cd_ee73020);
+    dp->~ee73020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee73020(Test_ee73020, "ee73020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee73020C1Ev();
+extern void _ZN7ee73020D1Ev();
+Name_Map name_map_ee73020[] = {
+  NSPAIR(_ZN7ee73020C1Ev),
+  NSPAIR(_ZN7ee73020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd3020;
+extern VTBL_ENTRY _ZTI6dd3020[];
+extern  VTBL_ENTRY _ZTV6dd3020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3020[];
+static Base_Class bases_ee73020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3020,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee73020[];
+extern void _ZN7ee730203fooEv();
+extern void _ZN7ee730203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee730203fooEv,_ZTv0_n16_N7ee730203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee730203fooEv,_ZThn8_N7ee730203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee730203fooEv,_ZTv0_n12_N7ee730203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee730203fooEv,_ZThn16_N7ee730203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee73020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee73020[0]),
+  (VTBL_ENTRY)&_ZN7ee730203fooEv,
+  (VTBL_ENTRY)&_ZN7ee730203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee73020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee730203fooEv,_ZTv0_n16_N7ee730203fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee73020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee730203fooEv,_ZTv0_n12_N7ee730203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee73020[];
+extern void _ZN6dd30203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3020__7ee73020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&_ZN6dd30203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd3020__7ee73020[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv),
+};
+static  VTT_ENTRY vtt_ee73020[] = {
+  {&(_ZTV7ee73020[4]),  4,15},
+  {&(_ZTV7ee73020[10]),  10,15},
+  {&(_ZTV7ee73020[14]),  14,15},
+  {&(_tg__ZTV6dd3020__7ee73020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd3020__7ee73020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee73020[];
+extern  VTBL_ENTRY _ZTV7ee73020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee73020[];
+static VTBL_ENTRY alt_thunk_names17[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd30203fooEv,_ZTv0_n12_N6dd30203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd30203fooEv,_ZThn8_N6dd30203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee730203fooEv,_ZTv0_n12_N7ee730203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee730203fooEv,_ZThn16_N7ee730203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee730203fooEv,_ZTv0_n16_N7ee730203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee730203fooEv,_ZThn8_N7ee730203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee73020 = {  "ee73020", // class name
+  bases_ee73020, 4,
+  &(vtc_ee73020[0]), // expected_vtbl_contents
+  &(vtt_ee73020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee73020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee73020),15, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee73020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names17,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd4020  : cc020 {
+  int d;
+  virtual void  bar(); // _ZN6dd40203barEv
+  ~dd4020(); // tgen
+  dd4020(); // tgen
+};
+//SIG(-1 dd4020) C1{ BC2{ BC3{ BC4{ Fi} v2 Fi} Fi} v1 Fi}
+
+
+void  dd4020 ::bar(){vfunc_called(this, "_ZN6dd40203barEv");}
+dd4020 ::~dd4020(){ note_dtor("dd4020", this);} // tgen
+dd4020 ::dd4020(){ note_ctor("dd4020", this);} // tgen
+
+static void Test_dd4020()
+{
+  extern Class_Descriptor cd_dd4020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(4,6)];
+    init_test(&cd_dd4020, buf);
+    dd4020 *dp, &lv = *(dp=new (buf) dd4020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,20), "sizeof(dd4020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd4020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(8,4), "dd4020");
+    check_base_class_offset(lv, (bb20*)(cc020*), 0, "dd4020");
+    check_base_class_offset(lv, (cc020*), 0, "dd4020");
+    check_field_offset(lv, d, ABISELECT(20,16), "dd4020.d");
+    test_class_info(&lv, &cd_dd4020);
+    dp->~dd4020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd4020(Test_dd4020, "dd4020", ABISELECT(24,20));
+
+#else // __cplusplus
+
+extern void _ZN6dd4020C1Ev();
+extern void _ZN6dd4020D1Ev();
+Name_Map name_map_dd4020[] = {
+  NSPAIR(_ZN6dd4020C1Ev),
+  NSPAIR(_ZN6dd4020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+static Base_Class bases_dd4020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern void _ZN4bb203fooEv();
+extern void _ZN6dd40203barEv();
+static  VTBL_ENTRY vtc_dd4020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+  (VTBL_ENTRY)&_ZN6dd40203barEv,
+};
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern  VTBL_ENTRY _ZTV6dd4020[];
+Class_Descriptor cd_dd4020 = {  "dd4020", // class name
+  bases_dd4020, 3,
+  &(vtc_dd4020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(24,20), // object size
+  NSPAIRA(_ZTI6dd4020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd4020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  2, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee04020  : dd4020 {
+  int e;
+  ~ee04020(); // tgen
+  ee04020(); // tgen
+};
+//SIG(1 ee04020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} Fi}
+
+
+ee04020 ::~ee04020(){ note_dtor("ee04020", this);} // tgen
+ee04020 ::ee04020(){ note_ctor("ee04020", this);} // tgen
+
+static void Test_ee04020()
+{
+  extern Class_Descriptor cd_ee04020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee04020, buf);
+    ee04020 *dp, &lv = *(dp=new (buf) ee04020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee04020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee04020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd4020*), ABISELECT(8,4), "ee04020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd4020*), 0, "ee04020");
+    check_base_class_offset(lv, (cc020*)(dd4020*), 0, "ee04020");
+    check_base_class_offset(lv, (dd4020*), 0, "ee04020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee04020.e");
+    test_class_info(&lv, &cd_ee04020);
+    dp->~ee04020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee04020(Test_ee04020, "ee04020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee04020C1Ev();
+extern void _ZN7ee04020D1Ev();
+Name_Map name_map_ee04020[] = {
+  NSPAIR(_ZN7ee04020C1Ev),
+  NSPAIR(_ZN7ee04020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd4020;
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern  VTBL_ENTRY _ZTV6dd4020[];
+static Base_Class bases_ee04020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4020,    0, //bcp->offset
+    0, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee04020[];
+extern void _ZN4bb203fooEv();
+extern void _ZN6dd40203barEv();
+static  VTBL_ENTRY vtc_ee04020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee04020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+  (VTBL_ENTRY)&_ZN6dd40203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee04020[];
+extern  VTBL_ENTRY _ZTV7ee04020[];
+Class_Descriptor cd_ee04020 = {  "ee04020", // class name
+  bases_ee04020, 4,
+  &(vtc_ee04020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee04020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee04020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee14020  : virtual dd4020 {
+  int e;
+  ~ee14020(); // tgen
+  ee14020(); // tgen
+};
+//SIG(1 ee14020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} Fi}
+
+
+ee14020 ::~ee14020(){ note_dtor("ee14020", this);} // tgen
+ee14020 ::ee14020(){ note_ctor("ee14020", this);} // tgen
+
+static void Test_ee14020()
+{
+  extern Class_Descriptor cd_ee14020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee14020, buf);
+    ee14020 *dp, &lv = *(dp=new (buf) ee14020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee14020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee14020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd4020*), ABISELECT(24,12), "ee14020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd4020*), ABISELECT(16,8), "ee14020");
+    check_base_class_offset(lv, (cc020*)(dd4020*), ABISELECT(16,8), "ee14020");
+    check_base_class_offset(lv, (dd4020*), ABISELECT(16,8), "ee14020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee14020.e");
+    test_class_info(&lv, &cd_ee14020);
+    dp->~ee14020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee14020(Test_ee14020, "ee14020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee14020C1Ev();
+extern void _ZN7ee14020D1Ev();
+Name_Map name_map_ee14020[] = {
+  NSPAIR(_ZN7ee14020C1Ev),
+  NSPAIR(_ZN7ee14020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd4020;
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern  VTBL_ENTRY _ZTV6dd4020[];
+static Base_Class bases_ee14020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4020,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee14020[];
+extern void _ZN4bb203fooEv();
+extern void _ZN6dd40203barEv();
+static  VTBL_ENTRY vtc_ee14020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee14020[0]),
+  0,
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee14020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+  (VTBL_ENTRY)&_ZN6dd40203barEv,
+};
+extern VTBL_ENTRY _ZTV7ee14020[];
+static  VTT_ENTRY vtt_ee14020[] = {
+  {&(_ZTV7ee14020[3]),  3,9},
+  {&(_ZTV7ee14020[7]),  7,9},
+};
+extern VTBL_ENTRY _ZTI7ee14020[];
+extern  VTBL_ENTRY _ZTV7ee14020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee14020[];
+Class_Descriptor cd_ee14020 = {  "ee14020", // class name
+  bases_ee14020, 4,
+  &(vtc_ee14020[0]), // expected_vtbl_contents
+  &(vtt_ee14020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee14020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee14020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee14020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee24020  : dd4020 {
+  int e;
+  virtual void  foo(); // _ZN7ee240203fooEv
+  ~ee24020(); // tgen
+  ee24020(); // tgen
+};
+//SIG(1 ee24020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee24020 ::foo(){vfunc_called(this, "_ZN7ee240203fooEv");}
+ee24020 ::~ee24020(){ note_dtor("ee24020", this);} // tgen
+ee24020 ::ee24020(){ note_ctor("ee24020", this);} // tgen
+
+static void Test_ee24020()
+{
+  extern Class_Descriptor cd_ee24020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee24020, buf);
+    ee24020 *dp, &lv = *(dp=new (buf) ee24020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee24020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee24020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd4020*), ABISELECT(8,4), "ee24020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd4020*), 0, "ee24020");
+    check_base_class_offset(lv, (cc020*)(dd4020*), 0, "ee24020");
+    check_base_class_offset(lv, (dd4020*), 0, "ee24020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee24020.e");
+    test_class_info(&lv, &cd_ee24020);
+    dp->~ee24020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee24020(Test_ee24020, "ee24020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee24020C1Ev();
+extern void _ZN7ee24020D1Ev();
+Name_Map name_map_ee24020[] = {
+  NSPAIR(_ZN7ee24020C1Ev),
+  NSPAIR(_ZN7ee24020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd4020;
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern  VTBL_ENTRY _ZTV6dd4020[];
+static Base_Class bases_ee24020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee24020[];
+extern void _ZN7ee240203fooEv();
+extern void _ZN6dd40203barEv();
+static  VTBL_ENTRY vtc_ee24020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee24020[0]),
+  (VTBL_ENTRY)&_ZN7ee240203fooEv,
+  (VTBL_ENTRY)&_ZN6dd40203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee24020[];
+extern  VTBL_ENTRY _ZTV7ee24020[];
+Class_Descriptor cd_ee24020 = {  "ee24020", // class name
+  bases_ee24020, 4,
+  &(vtc_ee24020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee24020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee24020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee34020  : virtual dd4020 {
+  int e;
+  virtual void  foo(); // _ZN7ee340203fooEv
+  ~ee34020(); // tgen
+  ee34020(); // tgen
+};
+//SIG(1 ee34020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee34020 ::foo(){vfunc_called(this, "_ZN7ee340203fooEv");}
+ee34020 ::~ee34020(){ note_dtor("ee34020", this);} // tgen
+ee34020 ::ee34020(){ note_ctor("ee34020", this);} // tgen
+
+static void Test_ee34020()
+{
+  extern Class_Descriptor cd_ee34020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee34020, buf);
+    ee34020 *dp, &lv = *(dp=new (buf) ee34020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee34020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee34020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd4020*), ABISELECT(24,12), "ee34020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd4020*), ABISELECT(16,8), "ee34020");
+    check_base_class_offset(lv, (cc020*)(dd4020*), ABISELECT(16,8), "ee34020");
+    check_base_class_offset(lv, (dd4020*), ABISELECT(16,8), "ee34020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee34020.e");
+    test_class_info(&lv, &cd_ee34020);
+    dp->~ee34020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee34020(Test_ee34020, "ee34020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee34020C1Ev();
+extern void _ZN7ee34020D1Ev();
+Name_Map name_map_ee34020[] = {
+  NSPAIR(_ZN7ee34020C1Ev),
+  NSPAIR(_ZN7ee34020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd4020;
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern  VTBL_ENTRY _ZTV6dd4020[];
+static Base_Class bases_ee34020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee34020[];
+extern void _ZN7ee340203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee340203fooEv,_ZTv0_n12_N7ee340203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee340203fooEv,_ZThn8_N7ee340203fooEv)() __attribute__((weak));
+extern void _ZN6dd40203barEv();
+static  VTBL_ENTRY vtc_ee34020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee34020[0]),
+  (VTBL_ENTRY)&_ZN7ee340203fooEv,
+  0,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee34020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee340203fooEv,_ZTv0_n12_N7ee340203fooEv),
+  (VTBL_ENTRY)&_ZN6dd40203barEv,
+};
+extern VTBL_ENTRY _ZTV7ee34020[];
+static  VTT_ENTRY vtt_ee34020[] = {
+  {&(_ZTV7ee34020[3]),  3,10},
+  {&(_ZTV7ee34020[8]),  8,10},
+};
+extern VTBL_ENTRY _ZTI7ee34020[];
+extern  VTBL_ENTRY _ZTV7ee34020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee34020[];
+static VTBL_ENTRY alt_thunk_names18[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee340203fooEv,_ZTv0_n12_N7ee340203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee340203fooEv,_ZThn8_N7ee340203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee34020 = {  "ee34020", // class name
+  bases_ee34020, 4,
+  &(vtc_ee34020[0]), // expected_vtbl_contents
+  &(vtt_ee34020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee34020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee34020),10, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee34020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names18,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee44020  : dd4020 {
+  int e;
+  virtual void  bar(); // _ZN7ee440203barEv
+  ~ee44020(); // tgen
+  ee44020(); // tgen
+};
+//SIG(1 ee44020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee44020 ::bar(){vfunc_called(this, "_ZN7ee440203barEv");}
+ee44020 ::~ee44020(){ note_dtor("ee44020", this);} // tgen
+ee44020 ::ee44020(){ note_ctor("ee44020", this);} // tgen
+
+static void Test_ee44020()
+{
+  extern Class_Descriptor cd_ee44020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee44020, buf);
+    ee44020 *dp, &lv = *(dp=new (buf) ee44020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee44020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee44020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd4020*), ABISELECT(8,4), "ee44020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd4020*), 0, "ee44020");
+    check_base_class_offset(lv, (cc020*)(dd4020*), 0, "ee44020");
+    check_base_class_offset(lv, (dd4020*), 0, "ee44020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee44020.e");
+    test_class_info(&lv, &cd_ee44020);
+    dp->~ee44020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee44020(Test_ee44020, "ee44020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee44020C1Ev();
+extern void _ZN7ee44020D1Ev();
+Name_Map name_map_ee44020[] = {
+  NSPAIR(_ZN7ee44020C1Ev),
+  NSPAIR(_ZN7ee44020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd4020;
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern  VTBL_ENTRY _ZTV6dd4020[];
+static Base_Class bases_ee44020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee44020[];
+extern void _ZN4bb203fooEv();
+extern void _ZN7ee440203barEv();
+static  VTBL_ENTRY vtc_ee44020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee44020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+  (VTBL_ENTRY)&_ZN7ee440203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee44020[];
+extern  VTBL_ENTRY _ZTV7ee44020[];
+Class_Descriptor cd_ee44020 = {  "ee44020", // class name
+  bases_ee44020, 4,
+  &(vtc_ee44020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee44020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee44020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee54020  : virtual dd4020 {
+  int e;
+  virtual void  bar(); // _ZN7ee540203barEv
+  ~ee54020(); // tgen
+  ee54020(); // tgen
+};
+//SIG(1 ee54020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee54020 ::bar(){vfunc_called(this, "_ZN7ee540203barEv");}
+ee54020 ::~ee54020(){ note_dtor("ee54020", this);} // tgen
+ee54020 ::ee54020(){ note_ctor("ee54020", this);} // tgen
+
+static void Test_ee54020()
+{
+  extern Class_Descriptor cd_ee54020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee54020, buf);
+    ee54020 *dp, &lv = *(dp=new (buf) ee54020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee54020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee54020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd4020*), ABISELECT(24,12), "ee54020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd4020*), ABISELECT(16,8), "ee54020");
+    check_base_class_offset(lv, (cc020*)(dd4020*), ABISELECT(16,8), "ee54020");
+    check_base_class_offset(lv, (dd4020*), ABISELECT(16,8), "ee54020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee54020.e");
+    test_class_info(&lv, &cd_ee54020);
+    dp->~ee54020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee54020(Test_ee54020, "ee54020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee54020C1Ev();
+extern void _ZN7ee54020D1Ev();
+Name_Map name_map_ee54020[] = {
+  NSPAIR(_ZN7ee54020C1Ev),
+  NSPAIR(_ZN7ee54020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd4020;
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern  VTBL_ENTRY _ZTV6dd4020[];
+static Base_Class bases_ee54020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee54020[];
+extern void _ZN7ee540203barEv();
+extern void _ZN4bb203fooEv();
+extern void ABISELECT(_ZTv0_n32_N7ee540203barEv,_ZTv0_n16_N7ee540203barEv)();
+extern void ABISELECT(_ZThn16_N7ee540203barEv,_ZThn8_N7ee540203barEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee54020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee54020[0]),
+  (VTBL_ENTRY)&_ZN7ee540203barEv,
+  ABISELECT(-16,-8),
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee54020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee540203barEv,_ZTv0_n16_N7ee540203barEv),
+};
+extern VTBL_ENTRY _ZTV7ee54020[];
+static  VTT_ENTRY vtt_ee54020[] = {
+  {&(_ZTV7ee54020[3]),  3,10},
+  {&(_ZTV7ee54020[8]),  8,10},
+};
+extern VTBL_ENTRY _ZTI7ee54020[];
+extern  VTBL_ENTRY _ZTV7ee54020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee54020[];
+static VTBL_ENTRY alt_thunk_names19[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee540203barEv,_ZTv0_n16_N7ee540203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee540203barEv,_ZThn8_N7ee540203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee54020 = {  "ee54020", // class name
+  bases_ee54020, 4,
+  &(vtc_ee54020[0]), // expected_vtbl_contents
+  &(vtt_ee54020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee54020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee54020),10, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee54020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names19,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee64020  : dd4020 {
+  int e;
+  virtual void  foo(); // _ZN7ee640203fooEv
+  virtual void  bar(); // _ZN7ee640203barEv
+  ~ee64020(); // tgen
+  ee64020(); // tgen
+};
+//SIG(1 ee64020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 v2 Fi}
+
+
+void  ee64020 ::foo(){vfunc_called(this, "_ZN7ee640203fooEv");}
+void  ee64020 ::bar(){vfunc_called(this, "_ZN7ee640203barEv");}
+ee64020 ::~ee64020(){ note_dtor("ee64020", this);} // tgen
+ee64020 ::ee64020(){ note_ctor("ee64020", this);} // tgen
+
+static void Test_ee64020()
+{
+  extern Class_Descriptor cd_ee64020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee64020, buf);
+    ee64020 *dp, &lv = *(dp=new (buf) ee64020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee64020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee64020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd4020*), ABISELECT(8,4), "ee64020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd4020*), 0, "ee64020");
+    check_base_class_offset(lv, (cc020*)(dd4020*), 0, "ee64020");
+    check_base_class_offset(lv, (dd4020*), 0, "ee64020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee64020.e");
+    test_class_info(&lv, &cd_ee64020);
+    dp->~ee64020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee64020(Test_ee64020, "ee64020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee64020C1Ev();
+extern void _ZN7ee64020D1Ev();
+Name_Map name_map_ee64020[] = {
+  NSPAIR(_ZN7ee64020C1Ev),
+  NSPAIR(_ZN7ee64020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd4020;
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern  VTBL_ENTRY _ZTV6dd4020[];
+static Base_Class bases_ee64020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee64020[];
+extern void _ZN7ee640203fooEv();
+extern void _ZN7ee640203barEv();
+static  VTBL_ENTRY vtc_ee64020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee64020[0]),
+  (VTBL_ENTRY)&_ZN7ee640203fooEv,
+  (VTBL_ENTRY)&_ZN7ee640203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee64020[];
+extern  VTBL_ENTRY _ZTV7ee64020[];
+Class_Descriptor cd_ee64020 = {  "ee64020", // class name
+  bases_ee64020, 4,
+  &(vtc_ee64020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee64020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee64020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee74020  : virtual dd4020 {
+  int e;
+  virtual void  foo(); // _ZN7ee740203fooEv
+  virtual void  bar(); // _ZN7ee740203barEv
+  ~ee74020(); // tgen
+  ee74020(); // tgen
+};
+//SIG(1 ee74020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 v2 Fi}
+
+
+void  ee74020 ::foo(){vfunc_called(this, "_ZN7ee740203fooEv");}
+void  ee74020 ::bar(){vfunc_called(this, "_ZN7ee740203barEv");}
+ee74020 ::~ee74020(){ note_dtor("ee74020", this);} // tgen
+ee74020 ::ee74020(){ note_ctor("ee74020", this);} // tgen
+
+static void Test_ee74020()
+{
+  extern Class_Descriptor cd_ee74020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee74020, buf);
+    ee74020 *dp, &lv = *(dp=new (buf) ee74020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee74020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee74020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd4020*), ABISELECT(24,12), "ee74020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd4020*), ABISELECT(16,8), "ee74020");
+    check_base_class_offset(lv, (cc020*)(dd4020*), ABISELECT(16,8), "ee74020");
+    check_base_class_offset(lv, (dd4020*), ABISELECT(16,8), "ee74020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee74020.e");
+    test_class_info(&lv, &cd_ee74020);
+    dp->~ee74020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee74020(Test_ee74020, "ee74020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee74020C1Ev();
+extern void _ZN7ee74020D1Ev();
+Name_Map name_map_ee74020[] = {
+  NSPAIR(_ZN7ee74020C1Ev),
+  NSPAIR(_ZN7ee74020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd4020;
+extern VTBL_ENTRY _ZTI6dd4020[];
+extern  VTBL_ENTRY _ZTV6dd4020[];
+static Base_Class bases_ee74020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee74020[];
+extern void _ZN7ee740203fooEv();
+extern void _ZN7ee740203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee740203fooEv,_ZTv0_n12_N7ee740203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee740203fooEv,_ZThn8_N7ee740203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n32_N7ee740203barEv,_ZTv0_n16_N7ee740203barEv)();
+extern void ABISELECT(_ZThn16_N7ee740203barEv,_ZThn8_N7ee740203barEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee74020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee74020[0]),
+  (VTBL_ENTRY)&_ZN7ee740203fooEv,
+  (VTBL_ENTRY)&_ZN7ee740203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee74020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee740203fooEv,_ZTv0_n12_N7ee740203fooEv),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee740203barEv,_ZTv0_n16_N7ee740203barEv),
+};
+extern VTBL_ENTRY _ZTV7ee74020[];
+static  VTT_ENTRY vtt_ee74020[] = {
+  {&(_ZTV7ee74020[3]),  3,11},
+  {&(_ZTV7ee74020[9]),  9,11},
+};
+extern VTBL_ENTRY _ZTI7ee74020[];
+extern  VTBL_ENTRY _ZTV7ee74020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee74020[];
+static VTBL_ENTRY alt_thunk_names20[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee740203barEv,_ZTv0_n16_N7ee740203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee740203barEv,_ZThn8_N7ee740203barEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee740203fooEv,_ZTv0_n12_N7ee740203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee740203fooEv,_ZThn8_N7ee740203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee74020 = {  "ee74020", // class name
+  bases_ee74020, 4,
+  &(vtc_ee74020[0]), // expected_vtbl_contents
+  &(vtt_ee74020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee74020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee74020),11, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee74020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names20,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd5020  : virtual cc020 {
+  int d;
+  virtual void  bar(); // _ZN6dd50203barEv
+  ~dd5020(); // tgen
+  dd5020(); // tgen
+};
+//SIG(-1 dd5020) C1{ VBC2{ BC3{ BC4{ Fi} v2 Fi} Fi} v1 Fi}
+
+
+void  dd5020 ::bar(){vfunc_called(this, "_ZN6dd50203barEv");}
+dd5020 ::~dd5020(){ note_dtor("dd5020", this);} // tgen
+dd5020 ::dd5020(){ note_ctor("dd5020", this);} // tgen
+
+static void Test_dd5020()
+{
+  extern Class_Descriptor cd_dd5020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,7)];
+    init_test(&cd_dd5020, buf);
+    dd5020 *dp, &lv = *(dp=new (buf) dd5020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,24), "sizeof(dd5020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd5020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,12), "dd5020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,8), "dd5020");
+    check_base_class_offset(lv, (cc020*), ABISELECT(16,8), "dd5020");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd5020.d");
+    test_class_info(&lv, &cd_dd5020);
+    dp->~dd5020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd5020(Test_dd5020, "dd5020", ABISELECT(40,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd5020C1Ev();
+extern void _ZN6dd5020D1Ev();
+Name_Map name_map_dd5020[] = {
+  NSPAIR(_ZN6dd5020C1Ev),
+  NSPAIR(_ZN6dd5020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+static Base_Class bases_dd5020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern void _ZN6dd50203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_dd5020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV6dd5020[];
+static  VTT_ENTRY vtt_dd5020[] = {
+  {&(_ZTV6dd5020[3]),  3,8},
+  {&(_ZTV6dd5020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern  VTBL_ENTRY _ZTV6dd5020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5020[];
+Class_Descriptor cd_dd5020 = {  "dd5020", // class name
+  bases_dd5020, 3,
+  &(vtc_dd5020[0]), // expected_vtbl_contents
+  &(vtt_dd5020[0]), // expected_vtt_contents
+  ABISELECT(40,24), // object size
+  NSPAIRA(_ZTI6dd5020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd5020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd5020),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee05020  : dd5020 {
+  int e;
+  ~ee05020(); // tgen
+  ee05020(); // tgen
+};
+//SIG(1 ee05020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} Fi}
+
+
+ee05020 ::~ee05020(){ note_dtor("ee05020", this);} // tgen
+ee05020 ::ee05020(){ note_ctor("ee05020", this);} // tgen
+
+static void Test_ee05020()
+{
+  extern Class_Descriptor cd_ee05020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee05020, buf);
+    ee05020 *dp, &lv = *(dp=new (buf) ee05020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee05020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee05020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee05020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee05020");
+    check_base_class_offset(lv, (cc020*)(dd5020*), ABISELECT(16,12), "ee05020");
+    check_base_class_offset(lv, (dd5020*), 0, "ee05020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee05020.e");
+    test_class_info(&lv, &cd_ee05020);
+    dp->~ee05020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee05020(Test_ee05020, "ee05020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee05020C1Ev();
+extern void _ZN7ee05020D1Ev();
+Name_Map name_map_ee05020[] = {
+  NSPAIR(_ZN7ee05020C1Ev),
+  NSPAIR(_ZN7ee05020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd5020;
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern  VTBL_ENTRY _ZTV6dd5020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5020[];
+static Base_Class bases_ee05020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee05020[];
+extern void _ZN6dd50203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee05020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee05020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee05020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee05020[];
+extern void _ZN6dd50203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5020__7ee05020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd5020__7ee05020[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee05020[] = {
+  {&(_ZTV7ee05020[3]),  3,8},
+  {&(_tg__ZTV6dd5020__7ee05020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd5020__7ee05020[3]),  3,4},
+  {&(_ZTV7ee05020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee05020[];
+extern  VTBL_ENTRY _ZTV7ee05020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee05020[];
+Class_Descriptor cd_ee05020 = {  "ee05020", // class name
+  bases_ee05020, 4,
+  &(vtc_ee05020[0]), // expected_vtbl_contents
+  &(vtt_ee05020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee05020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee05020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee05020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee15020  : virtual dd5020 {
+  int e;
+  ~ee15020(); // tgen
+  ee15020(); // tgen
+};
+//SIG(1 ee15020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} Fi}
+
+
+ee15020 ::~ee15020(){ note_dtor("ee15020", this);} // tgen
+ee15020 ::ee15020(){ note_ctor("ee15020", this);} // tgen
+
+static void Test_ee15020()
+{
+  extern Class_Descriptor cd_ee15020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee15020, buf);
+    ee15020 *dp, &lv = *(dp=new (buf) ee15020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee15020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee15020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee15020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee15020");
+    check_base_class_offset(lv, (cc020*)(dd5020*), ABISELECT(32,16), "ee15020");
+    check_base_class_offset(lv, (dd5020*), ABISELECT(16,8), "ee15020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee15020.e");
+    test_class_info(&lv, &cd_ee15020);
+    dp->~ee15020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee15020(Test_ee15020, "ee15020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee15020C1Ev();
+extern void _ZN7ee15020D1Ev();
+Name_Map name_map_ee15020[] = {
+  NSPAIR(_ZN7ee15020C1Ev),
+  NSPAIR(_ZN7ee15020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd5020;
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern  VTBL_ENTRY _ZTV6dd5020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5020[];
+static Base_Class bases_ee15020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee15020[];
+extern void _ZN6dd50203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee15020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee15020[0]),
+  0,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee15020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee15020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee15020[];
+extern void _ZN6dd50203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5020__7ee15020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd5020__7ee15020[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee15020[] = {
+  {&(_ZTV7ee15020[4]),  4,13},
+  {&(_ZTV7ee15020[8]),  8,13},
+  {&(_ZTV7ee15020[12]),  12,13},
+  {&(_tg__ZTV6dd5020__7ee15020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd5020__7ee15020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee15020[];
+extern  VTBL_ENTRY _ZTV7ee15020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee15020[];
+Class_Descriptor cd_ee15020 = {  "ee15020", // class name
+  bases_ee15020, 4,
+  &(vtc_ee15020[0]), // expected_vtbl_contents
+  &(vtt_ee15020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee15020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee15020),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee15020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee25020  : dd5020 {
+  int e;
+  virtual void  foo(); // _ZN7ee250203fooEv
+  ~ee25020(); // tgen
+  ee25020(); // tgen
+};
+//SIG(1 ee25020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee25020 ::foo(){vfunc_called(this, "_ZN7ee250203fooEv");}
+ee25020 ::~ee25020(){ note_dtor("ee25020", this);} // tgen
+ee25020 ::ee25020(){ note_ctor("ee25020", this);} // tgen
+
+static void Test_ee25020()
+{
+  extern Class_Descriptor cd_ee25020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee25020, buf);
+    ee25020 *dp, &lv = *(dp=new (buf) ee25020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee25020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee25020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee25020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee25020");
+    check_base_class_offset(lv, (cc020*)(dd5020*), ABISELECT(16,12), "ee25020");
+    check_base_class_offset(lv, (dd5020*), 0, "ee25020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee25020.e");
+    test_class_info(&lv, &cd_ee25020);
+    dp->~ee25020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee25020(Test_ee25020, "ee25020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee25020C1Ev();
+extern void _ZN7ee25020D1Ev();
+Name_Map name_map_ee25020[] = {
+  NSPAIR(_ZN7ee25020C1Ev),
+  NSPAIR(_ZN7ee25020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd5020;
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern  VTBL_ENTRY _ZTV6dd5020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5020[];
+static Base_Class bases_ee25020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee25020[];
+extern void _ZN6dd50203barEv();
+extern void _ZN7ee250203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee250203fooEv,_ZTv0_n12_N7ee250203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee250203fooEv,_ZThn12_N7ee250203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee25020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee25020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+  (VTBL_ENTRY)&_ZN7ee250203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee25020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee250203fooEv,_ZTv0_n12_N7ee250203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee25020[];
+extern void _ZN6dd50203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5020__7ee25020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd5020__7ee25020[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee25020[] = {
+  {&(_ZTV7ee25020[3]),  3,9},
+  {&(_tg__ZTV6dd5020__7ee25020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd5020__7ee25020[3]),  3,4},
+  {&(_ZTV7ee25020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee25020[];
+extern  VTBL_ENTRY _ZTV7ee25020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee25020[];
+static VTBL_ENTRY alt_thunk_names21[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee250203fooEv,_ZTv0_n12_N7ee250203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee250203fooEv,_ZThn12_N7ee250203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee25020 = {  "ee25020", // class name
+  bases_ee25020, 4,
+  &(vtc_ee25020[0]), // expected_vtbl_contents
+  &(vtt_ee25020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee25020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee25020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee25020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names21,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee35020  : virtual dd5020 {
+  int e;
+  virtual void  foo(); // _ZN7ee350203fooEv
+  ~ee35020(); // tgen
+  ee35020(); // tgen
+};
+//SIG(1 ee35020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee35020 ::foo(){vfunc_called(this, "_ZN7ee350203fooEv");}
+ee35020 ::~ee35020(){ note_dtor("ee35020", this);} // tgen
+ee35020 ::ee35020(){ note_ctor("ee35020", this);} // tgen
+
+static void Test_ee35020()
+{
+  extern Class_Descriptor cd_ee35020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee35020, buf);
+    ee35020 *dp, &lv = *(dp=new (buf) ee35020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee35020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee35020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee35020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee35020");
+    check_base_class_offset(lv, (cc020*)(dd5020*), ABISELECT(32,16), "ee35020");
+    check_base_class_offset(lv, (dd5020*), ABISELECT(16,8), "ee35020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee35020.e");
+    test_class_info(&lv, &cd_ee35020);
+    dp->~ee35020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee35020(Test_ee35020, "ee35020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee35020C1Ev();
+extern void _ZN7ee35020D1Ev();
+Name_Map name_map_ee35020[] = {
+  NSPAIR(_ZN7ee35020C1Ev),
+  NSPAIR(_ZN7ee35020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd5020;
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern  VTBL_ENTRY _ZTV6dd5020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5020[];
+static Base_Class bases_ee35020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee35020[];
+extern void _ZN7ee350203fooEv();
+extern void _ZN6dd50203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee350203fooEv,_ZTv0_n12_N7ee350203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee350203fooEv,_ZThn16_N7ee350203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee35020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee35020[0]),
+  (VTBL_ENTRY)&_ZN7ee350203fooEv,
+  0,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee35020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee35020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee350203fooEv,_ZTv0_n12_N7ee350203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee35020[];
+extern void _ZN6dd50203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5020__7ee35020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd5020__7ee35020[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee35020[] = {
+  {&(_ZTV7ee35020[4]),  4,14},
+  {&(_ZTV7ee35020[9]),  9,14},
+  {&(_ZTV7ee35020[13]),  13,14},
+  {&(_tg__ZTV6dd5020__7ee35020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd5020__7ee35020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee35020[];
+extern  VTBL_ENTRY _ZTV7ee35020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee35020[];
+static VTBL_ENTRY alt_thunk_names22[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee350203fooEv,_ZTv0_n12_N7ee350203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee350203fooEv,_ZThn16_N7ee350203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee35020 = {  "ee35020", // class name
+  bases_ee35020, 4,
+  &(vtc_ee35020[0]), // expected_vtbl_contents
+  &(vtt_ee35020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee35020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee35020),14, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee35020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names22,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee45020  : dd5020 {
+  int e;
+  virtual void  bar(); // _ZN7ee450203barEv
+  ~ee45020(); // tgen
+  ee45020(); // tgen
+};
+//SIG(1 ee45020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee45020 ::bar(){vfunc_called(this, "_ZN7ee450203barEv");}
+ee45020 ::~ee45020(){ note_dtor("ee45020", this);} // tgen
+ee45020 ::ee45020(){ note_ctor("ee45020", this);} // tgen
+
+static void Test_ee45020()
+{
+  extern Class_Descriptor cd_ee45020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee45020, buf);
+    ee45020 *dp, &lv = *(dp=new (buf) ee45020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee45020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee45020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee45020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee45020");
+    check_base_class_offset(lv, (cc020*)(dd5020*), ABISELECT(16,12), "ee45020");
+    check_base_class_offset(lv, (dd5020*), 0, "ee45020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee45020.e");
+    test_class_info(&lv, &cd_ee45020);
+    dp->~ee45020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee45020(Test_ee45020, "ee45020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee45020C1Ev();
+extern void _ZN7ee45020D1Ev();
+Name_Map name_map_ee45020[] = {
+  NSPAIR(_ZN7ee45020C1Ev),
+  NSPAIR(_ZN7ee45020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd5020;
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern  VTBL_ENTRY _ZTV6dd5020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5020[];
+static Base_Class bases_ee45020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee45020[];
+extern void _ZN7ee450203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee45020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee45020[0]),
+  (VTBL_ENTRY)&_ZN7ee450203barEv,
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee45020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee45020[];
+extern void _ZN6dd50203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5020__7ee45020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd5020__7ee45020[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee45020[] = {
+  {&(_ZTV7ee45020[3]),  3,8},
+  {&(_tg__ZTV6dd5020__7ee45020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd5020__7ee45020[3]),  3,4},
+  {&(_ZTV7ee45020[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee45020[];
+extern  VTBL_ENTRY _ZTV7ee45020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee45020[];
+Class_Descriptor cd_ee45020 = {  "ee45020", // class name
+  bases_ee45020, 4,
+  &(vtc_ee45020[0]), // expected_vtbl_contents
+  &(vtt_ee45020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee45020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee45020),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee45020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee55020  : virtual dd5020 {
+  int e;
+  virtual void  bar(); // _ZN7ee550203barEv
+  ~ee55020(); // tgen
+  ee55020(); // tgen
+};
+//SIG(1 ee55020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee55020 ::bar(){vfunc_called(this, "_ZN7ee550203barEv");}
+ee55020 ::~ee55020(){ note_dtor("ee55020", this);} // tgen
+ee55020 ::ee55020(){ note_ctor("ee55020", this);} // tgen
+
+static void Test_ee55020()
+{
+  extern Class_Descriptor cd_ee55020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee55020, buf);
+    ee55020 *dp, &lv = *(dp=new (buf) ee55020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee55020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee55020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee55020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee55020");
+    check_base_class_offset(lv, (cc020*)(dd5020*), ABISELECT(32,16), "ee55020");
+    check_base_class_offset(lv, (dd5020*), ABISELECT(16,8), "ee55020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee55020.e");
+    test_class_info(&lv, &cd_ee55020);
+    dp->~ee55020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee55020(Test_ee55020, "ee55020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee55020C1Ev();
+extern void _ZN7ee55020D1Ev();
+Name_Map name_map_ee55020[] = {
+  NSPAIR(_ZN7ee55020C1Ev),
+  NSPAIR(_ZN7ee55020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd5020;
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern  VTBL_ENTRY _ZTV6dd5020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5020[];
+static Base_Class bases_ee55020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee55020[];
+extern void _ZN7ee550203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee550203barEv,_ZTv0_n16_N7ee550203barEv)();
+extern void ABISELECT(_ZThn16_N7ee550203barEv,_ZThn8_N7ee550203barEv)() __attribute__((weak));
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee55020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee55020[0]),
+  (VTBL_ENTRY)&_ZN7ee550203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee55020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee550203barEv,_ZTv0_n16_N7ee550203barEv),
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee55020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee55020[];
+extern void _ZN6dd50203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5020__7ee55020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd5020__7ee55020[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee55020[] = {
+  {&(_ZTV7ee55020[4]),  4,14},
+  {&(_ZTV7ee55020[9]),  9,14},
+  {&(_ZTV7ee55020[13]),  13,14},
+  {&(_tg__ZTV6dd5020__7ee55020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd5020__7ee55020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee55020[];
+extern  VTBL_ENTRY _ZTV7ee55020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee55020[];
+static VTBL_ENTRY alt_thunk_names23[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee550203barEv,_ZTv0_n16_N7ee550203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee550203barEv,_ZThn8_N7ee550203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee55020 = {  "ee55020", // class name
+  bases_ee55020, 4,
+  &(vtc_ee55020[0]), // expected_vtbl_contents
+  &(vtt_ee55020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee55020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee55020),14, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee55020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names23,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee65020  : dd5020 {
+  int e;
+  virtual void  foo(); // _ZN7ee650203fooEv
+  virtual void  bar(); // _ZN7ee650203barEv
+  ~ee65020(); // tgen
+  ee65020(); // tgen
+};
+//SIG(1 ee65020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 v2 Fi}
+
+
+void  ee65020 ::foo(){vfunc_called(this, "_ZN7ee650203fooEv");}
+void  ee65020 ::bar(){vfunc_called(this, "_ZN7ee650203barEv");}
+ee65020 ::~ee65020(){ note_dtor("ee65020", this);} // tgen
+ee65020 ::ee65020(){ note_ctor("ee65020", this);} // tgen
+
+static void Test_ee65020()
+{
+  extern Class_Descriptor cd_ee65020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee65020, buf);
+    ee65020 *dp, &lv = *(dp=new (buf) ee65020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee65020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee65020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee65020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee65020");
+    check_base_class_offset(lv, (cc020*)(dd5020*), ABISELECT(16,12), "ee65020");
+    check_base_class_offset(lv, (dd5020*), 0, "ee65020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee65020.e");
+    test_class_info(&lv, &cd_ee65020);
+    dp->~ee65020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee65020(Test_ee65020, "ee65020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee65020C1Ev();
+extern void _ZN7ee65020D1Ev();
+Name_Map name_map_ee65020[] = {
+  NSPAIR(_ZN7ee65020C1Ev),
+  NSPAIR(_ZN7ee65020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd5020;
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern  VTBL_ENTRY _ZTV6dd5020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5020[];
+static Base_Class bases_ee65020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee65020[];
+extern void _ZN7ee650203barEv();
+extern void _ZN7ee650203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee650203fooEv,_ZTv0_n12_N7ee650203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee650203fooEv,_ZThn12_N7ee650203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee65020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee65020[0]),
+  (VTBL_ENTRY)&_ZN7ee650203barEv,
+  (VTBL_ENTRY)&_ZN7ee650203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee65020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee650203fooEv,_ZTv0_n12_N7ee650203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee65020[];
+extern void _ZN6dd50203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5020__7ee65020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd5020__7ee65020[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee65020[] = {
+  {&(_ZTV7ee65020[3]),  3,9},
+  {&(_tg__ZTV6dd5020__7ee65020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd5020__7ee65020[3]),  3,4},
+  {&(_ZTV7ee65020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee65020[];
+extern  VTBL_ENTRY _ZTV7ee65020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee65020[];
+static VTBL_ENTRY alt_thunk_names24[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee650203fooEv,_ZTv0_n12_N7ee650203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee650203fooEv,_ZThn12_N7ee650203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee65020 = {  "ee65020", // class name
+  bases_ee65020, 4,
+  &(vtc_ee65020[0]), // expected_vtbl_contents
+  &(vtt_ee65020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee65020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee65020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee65020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names24,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee75020  : virtual dd5020 {
+  int e;
+  virtual void  foo(); // _ZN7ee750203fooEv
+  virtual void  bar(); // _ZN7ee750203barEv
+  ~ee75020(); // tgen
+  ee75020(); // tgen
+};
+//SIG(1 ee75020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 v2 Fi}
+
+
+void  ee75020 ::foo(){vfunc_called(this, "_ZN7ee750203fooEv");}
+void  ee75020 ::bar(){vfunc_called(this, "_ZN7ee750203barEv");}
+ee75020 ::~ee75020(){ note_dtor("ee75020", this);} // tgen
+ee75020 ::ee75020(){ note_ctor("ee75020", this);} // tgen
+
+static void Test_ee75020()
+{
+  extern Class_Descriptor cd_ee75020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee75020, buf);
+    ee75020 *dp, &lv = *(dp=new (buf) ee75020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee75020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee75020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee75020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee75020");
+    check_base_class_offset(lv, (cc020*)(dd5020*), ABISELECT(32,16), "ee75020");
+    check_base_class_offset(lv, (dd5020*), ABISELECT(16,8), "ee75020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee75020.e");
+    test_class_info(&lv, &cd_ee75020);
+    dp->~ee75020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee75020(Test_ee75020, "ee75020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee75020C1Ev();
+extern void _ZN7ee75020D1Ev();
+Name_Map name_map_ee75020[] = {
+  NSPAIR(_ZN7ee75020C1Ev),
+  NSPAIR(_ZN7ee75020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd5020;
+extern VTBL_ENTRY _ZTI6dd5020[];
+extern  VTBL_ENTRY _ZTV6dd5020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5020[];
+static Base_Class bases_ee75020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5020,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee75020[];
+extern void _ZN7ee750203fooEv();
+extern void _ZN7ee750203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee750203barEv,_ZTv0_n16_N7ee750203barEv)();
+extern void ABISELECT(_ZThn16_N7ee750203barEv,_ZThn8_N7ee750203barEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee750203fooEv,_ZTv0_n12_N7ee750203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee750203fooEv,_ZThn16_N7ee750203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee75020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee75020[0]),
+  (VTBL_ENTRY)&_ZN7ee750203fooEv,
+  (VTBL_ENTRY)&_ZN7ee750203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee75020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee750203barEv,_ZTv0_n16_N7ee750203barEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee75020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee750203fooEv,_ZTv0_n12_N7ee750203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee75020[];
+extern void _ZN6dd50203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5020__7ee75020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN6dd50203barEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd5020__7ee75020[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5020[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee75020[] = {
+  {&(_ZTV7ee75020[4]),  4,15},
+  {&(_ZTV7ee75020[10]),  10,15},
+  {&(_ZTV7ee75020[14]),  14,15},
+  {&(_tg__ZTV6dd5020__7ee75020[3]),  3,4},
+  {&(_tg__ZTV4bb205cc020__6dd5020__7ee75020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee75020[];
+extern  VTBL_ENTRY _ZTV7ee75020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee75020[];
+static VTBL_ENTRY alt_thunk_names25[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee750203fooEv,_ZTv0_n12_N7ee750203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee750203fooEv,_ZThn16_N7ee750203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee750203barEv,_ZTv0_n16_N7ee750203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee750203barEv,_ZThn8_N7ee750203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee75020 = {  "ee75020", // class name
+  bases_ee75020, 4,
+  &(vtc_ee75020[0]), // expected_vtbl_contents
+  &(vtt_ee75020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee75020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee75020),15, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee75020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names25,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd6020  : cc020 {
+  int d;
+  virtual void  bar(); // _ZN6dd60203barEv
+  virtual void  foo(); // _ZN6dd60203fooEv
+  ~dd6020(); // tgen
+  dd6020(); // tgen
+};
+//SIG(-1 dd6020) C1{ BC2{ BC3{ BC4{ Fi} v2 Fi} Fi} v1 v2 Fi}
+
+
+void  dd6020 ::bar(){vfunc_called(this, "_ZN6dd60203barEv");}
+void  dd6020 ::foo(){vfunc_called(this, "_ZN6dd60203fooEv");}
+dd6020 ::~dd6020(){ note_dtor("dd6020", this);} // tgen
+dd6020 ::dd6020(){ note_ctor("dd6020", this);} // tgen
+
+static void Test_dd6020()
+{
+  extern Class_Descriptor cd_dd6020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(4,6)];
+    init_test(&cd_dd6020, buf);
+    dd6020 *dp, &lv = *(dp=new (buf) dd6020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,20), "sizeof(dd6020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd6020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(8,4), "dd6020");
+    check_base_class_offset(lv, (bb20*)(cc020*), 0, "dd6020");
+    check_base_class_offset(lv, (cc020*), 0, "dd6020");
+    check_field_offset(lv, d, ABISELECT(20,16), "dd6020.d");
+    test_class_info(&lv, &cd_dd6020);
+    dp->~dd6020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd6020(Test_dd6020, "dd6020", ABISELECT(24,20));
+
+#else // __cplusplus
+
+extern void _ZN6dd6020C1Ev();
+extern void _ZN6dd6020D1Ev();
+Name_Map name_map_dd6020[] = {
+  NSPAIR(_ZN6dd6020C1Ev),
+  NSPAIR(_ZN6dd6020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+static Base_Class bases_dd6020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern void _ZN6dd60203fooEv();
+extern void _ZN6dd60203barEv();
+static  VTBL_ENTRY vtc_dd6020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6020[0]),
+  (VTBL_ENTRY)&_ZN6dd60203fooEv,
+  (VTBL_ENTRY)&_ZN6dd60203barEv,
+};
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern  VTBL_ENTRY _ZTV6dd6020[];
+Class_Descriptor cd_dd6020 = {  "dd6020", // class name
+  bases_dd6020, 3,
+  &(vtc_dd6020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(24,20), // object size
+  NSPAIRA(_ZTI6dd6020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd6020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  2, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee06020  : dd6020 {
+  int e;
+  ~ee06020(); // tgen
+  ee06020(); // tgen
+};
+//SIG(1 ee06020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} Fi}
+
+
+ee06020 ::~ee06020(){ note_dtor("ee06020", this);} // tgen
+ee06020 ::ee06020(){ note_ctor("ee06020", this);} // tgen
+
+static void Test_ee06020()
+{
+  extern Class_Descriptor cd_ee06020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee06020, buf);
+    ee06020 *dp, &lv = *(dp=new (buf) ee06020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee06020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee06020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd6020*), ABISELECT(8,4), "ee06020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd6020*), 0, "ee06020");
+    check_base_class_offset(lv, (cc020*)(dd6020*), 0, "ee06020");
+    check_base_class_offset(lv, (dd6020*), 0, "ee06020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee06020.e");
+    test_class_info(&lv, &cd_ee06020);
+    dp->~ee06020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee06020(Test_ee06020, "ee06020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee06020C1Ev();
+extern void _ZN7ee06020D1Ev();
+Name_Map name_map_ee06020[] = {
+  NSPAIR(_ZN7ee06020C1Ev),
+  NSPAIR(_ZN7ee06020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd6020;
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern  VTBL_ENTRY _ZTV6dd6020[];
+static Base_Class bases_ee06020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6020,    0, //bcp->offset
+    0, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee06020[];
+extern void _ZN6dd60203fooEv();
+extern void _ZN6dd60203barEv();
+static  VTBL_ENTRY vtc_ee06020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee06020[0]),
+  (VTBL_ENTRY)&_ZN6dd60203fooEv,
+  (VTBL_ENTRY)&_ZN6dd60203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee06020[];
+extern  VTBL_ENTRY _ZTV7ee06020[];
+Class_Descriptor cd_ee06020 = {  "ee06020", // class name
+  bases_ee06020, 4,
+  &(vtc_ee06020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee06020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee06020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee16020  : virtual dd6020 {
+  int e;
+  ~ee16020(); // tgen
+  ee16020(); // tgen
+};
+//SIG(1 ee16020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} Fi}
+
+
+ee16020 ::~ee16020(){ note_dtor("ee16020", this);} // tgen
+ee16020 ::ee16020(){ note_ctor("ee16020", this);} // tgen
+
+static void Test_ee16020()
+{
+  extern Class_Descriptor cd_ee16020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee16020, buf);
+    ee16020 *dp, &lv = *(dp=new (buf) ee16020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee16020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee16020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd6020*), ABISELECT(24,12), "ee16020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd6020*), ABISELECT(16,8), "ee16020");
+    check_base_class_offset(lv, (cc020*)(dd6020*), ABISELECT(16,8), "ee16020");
+    check_base_class_offset(lv, (dd6020*), ABISELECT(16,8), "ee16020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee16020.e");
+    test_class_info(&lv, &cd_ee16020);
+    dp->~ee16020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee16020(Test_ee16020, "ee16020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee16020C1Ev();
+extern void _ZN7ee16020D1Ev();
+Name_Map name_map_ee16020[] = {
+  NSPAIR(_ZN7ee16020C1Ev),
+  NSPAIR(_ZN7ee16020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd6020;
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern  VTBL_ENTRY _ZTV6dd6020[];
+static Base_Class bases_ee16020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6020,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee16020[];
+extern void _ZN6dd60203fooEv();
+extern void _ZN6dd60203barEv();
+static  VTBL_ENTRY vtc_ee16020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee16020[0]),
+  0,
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee16020[0]),
+  (VTBL_ENTRY)&_ZN6dd60203fooEv,
+  (VTBL_ENTRY)&_ZN6dd60203barEv,
+};
+extern VTBL_ENTRY _ZTV7ee16020[];
+static  VTT_ENTRY vtt_ee16020[] = {
+  {&(_ZTV7ee16020[3]),  3,9},
+  {&(_ZTV7ee16020[7]),  7,9},
+};
+extern VTBL_ENTRY _ZTI7ee16020[];
+extern  VTBL_ENTRY _ZTV7ee16020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee16020[];
+Class_Descriptor cd_ee16020 = {  "ee16020", // class name
+  bases_ee16020, 4,
+  &(vtc_ee16020[0]), // expected_vtbl_contents
+  &(vtt_ee16020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee16020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee16020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee16020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee26020  : dd6020 {
+  int e;
+  virtual void  foo(); // _ZN7ee260203fooEv
+  ~ee26020(); // tgen
+  ee26020(); // tgen
+};
+//SIG(1 ee26020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 Fi}
+
+
+void  ee26020 ::foo(){vfunc_called(this, "_ZN7ee260203fooEv");}
+ee26020 ::~ee26020(){ note_dtor("ee26020", this);} // tgen
+ee26020 ::ee26020(){ note_ctor("ee26020", this);} // tgen
+
+static void Test_ee26020()
+{
+  extern Class_Descriptor cd_ee26020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee26020, buf);
+    ee26020 *dp, &lv = *(dp=new (buf) ee26020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee26020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee26020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd6020*), ABISELECT(8,4), "ee26020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd6020*), 0, "ee26020");
+    check_base_class_offset(lv, (cc020*)(dd6020*), 0, "ee26020");
+    check_base_class_offset(lv, (dd6020*), 0, "ee26020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee26020.e");
+    test_class_info(&lv, &cd_ee26020);
+    dp->~ee26020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee26020(Test_ee26020, "ee26020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee26020C1Ev();
+extern void _ZN7ee26020D1Ev();
+Name_Map name_map_ee26020[] = {
+  NSPAIR(_ZN7ee26020C1Ev),
+  NSPAIR(_ZN7ee26020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd6020;
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern  VTBL_ENTRY _ZTV6dd6020[];
+static Base_Class bases_ee26020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee26020[];
+extern void _ZN7ee260203fooEv();
+extern void _ZN6dd60203barEv();
+static  VTBL_ENTRY vtc_ee26020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee26020[0]),
+  (VTBL_ENTRY)&_ZN7ee260203fooEv,
+  (VTBL_ENTRY)&_ZN6dd60203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee26020[];
+extern  VTBL_ENTRY _ZTV7ee26020[];
+Class_Descriptor cd_ee26020 = {  "ee26020", // class name
+  bases_ee26020, 4,
+  &(vtc_ee26020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee26020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee26020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee36020  : virtual dd6020 {
+  int e;
+  virtual void  foo(); // _ZN7ee360203fooEv
+  ~ee36020(); // tgen
+  ee36020(); // tgen
+};
+//SIG(1 ee36020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 Fi}
+
+
+void  ee36020 ::foo(){vfunc_called(this, "_ZN7ee360203fooEv");}
+ee36020 ::~ee36020(){ note_dtor("ee36020", this);} // tgen
+ee36020 ::ee36020(){ note_ctor("ee36020", this);} // tgen
+
+static void Test_ee36020()
+{
+  extern Class_Descriptor cd_ee36020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee36020, buf);
+    ee36020 *dp, &lv = *(dp=new (buf) ee36020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee36020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee36020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd6020*), ABISELECT(24,12), "ee36020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd6020*), ABISELECT(16,8), "ee36020");
+    check_base_class_offset(lv, (cc020*)(dd6020*), ABISELECT(16,8), "ee36020");
+    check_base_class_offset(lv, (dd6020*), ABISELECT(16,8), "ee36020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee36020.e");
+    test_class_info(&lv, &cd_ee36020);
+    dp->~ee36020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee36020(Test_ee36020, "ee36020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee36020C1Ev();
+extern void _ZN7ee36020D1Ev();
+Name_Map name_map_ee36020[] = {
+  NSPAIR(_ZN7ee36020C1Ev),
+  NSPAIR(_ZN7ee36020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd6020;
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern  VTBL_ENTRY _ZTV6dd6020[];
+static Base_Class bases_ee36020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee36020[];
+extern void _ZN7ee360203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee360203fooEv,_ZTv0_n12_N7ee360203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee360203fooEv,_ZThn8_N7ee360203fooEv)() __attribute__((weak));
+extern void _ZN6dd60203barEv();
+static  VTBL_ENTRY vtc_ee36020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee36020[0]),
+  (VTBL_ENTRY)&_ZN7ee360203fooEv,
+  0,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee36020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee360203fooEv,_ZTv0_n12_N7ee360203fooEv),
+  (VTBL_ENTRY)&_ZN6dd60203barEv,
+};
+extern VTBL_ENTRY _ZTV7ee36020[];
+static  VTT_ENTRY vtt_ee36020[] = {
+  {&(_ZTV7ee36020[3]),  3,10},
+  {&(_ZTV7ee36020[8]),  8,10},
+};
+extern VTBL_ENTRY _ZTI7ee36020[];
+extern  VTBL_ENTRY _ZTV7ee36020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee36020[];
+static VTBL_ENTRY alt_thunk_names26[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee360203fooEv,_ZTv0_n12_N7ee360203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee360203fooEv,_ZThn8_N7ee360203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee36020 = {  "ee36020", // class name
+  bases_ee36020, 4,
+  &(vtc_ee36020[0]), // expected_vtbl_contents
+  &(vtt_ee36020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee36020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee36020),10, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee36020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names26,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee46020  : dd6020 {
+  int e;
+  virtual void  bar(); // _ZN7ee460203barEv
+  ~ee46020(); // tgen
+  ee46020(); // tgen
+};
+//SIG(1 ee46020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} v1 Fi}
+
+
+void  ee46020 ::bar(){vfunc_called(this, "_ZN7ee460203barEv");}
+ee46020 ::~ee46020(){ note_dtor("ee46020", this);} // tgen
+ee46020 ::ee46020(){ note_ctor("ee46020", this);} // tgen
+
+static void Test_ee46020()
+{
+  extern Class_Descriptor cd_ee46020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee46020, buf);
+    ee46020 *dp, &lv = *(dp=new (buf) ee46020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee46020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee46020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd6020*), ABISELECT(8,4), "ee46020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd6020*), 0, "ee46020");
+    check_base_class_offset(lv, (cc020*)(dd6020*), 0, "ee46020");
+    check_base_class_offset(lv, (dd6020*), 0, "ee46020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee46020.e");
+    test_class_info(&lv, &cd_ee46020);
+    dp->~ee46020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee46020(Test_ee46020, "ee46020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee46020C1Ev();
+extern void _ZN7ee46020D1Ev();
+Name_Map name_map_ee46020[] = {
+  NSPAIR(_ZN7ee46020C1Ev),
+  NSPAIR(_ZN7ee46020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd6020;
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern  VTBL_ENTRY _ZTV6dd6020[];
+static Base_Class bases_ee46020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee46020[];
+extern void _ZN6dd60203fooEv();
+extern void _ZN7ee460203barEv();
+static  VTBL_ENTRY vtc_ee46020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee46020[0]),
+  (VTBL_ENTRY)&_ZN6dd60203fooEv,
+  (VTBL_ENTRY)&_ZN7ee460203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee46020[];
+extern  VTBL_ENTRY _ZTV7ee46020[];
+Class_Descriptor cd_ee46020 = {  "ee46020", // class name
+  bases_ee46020, 4,
+  &(vtc_ee46020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee46020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee46020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee56020  : virtual dd6020 {
+  int e;
+  virtual void  bar(); // _ZN7ee560203barEv
+  ~ee56020(); // tgen
+  ee56020(); // tgen
+};
+//SIG(1 ee56020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} v1 Fi}
+
+
+void  ee56020 ::bar(){vfunc_called(this, "_ZN7ee560203barEv");}
+ee56020 ::~ee56020(){ note_dtor("ee56020", this);} // tgen
+ee56020 ::ee56020(){ note_ctor("ee56020", this);} // tgen
+
+static void Test_ee56020()
+{
+  extern Class_Descriptor cd_ee56020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee56020, buf);
+    ee56020 *dp, &lv = *(dp=new (buf) ee56020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee56020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee56020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd6020*), ABISELECT(24,12), "ee56020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd6020*), ABISELECT(16,8), "ee56020");
+    check_base_class_offset(lv, (cc020*)(dd6020*), ABISELECT(16,8), "ee56020");
+    check_base_class_offset(lv, (dd6020*), ABISELECT(16,8), "ee56020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee56020.e");
+    test_class_info(&lv, &cd_ee56020);
+    dp->~ee56020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee56020(Test_ee56020, "ee56020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee56020C1Ev();
+extern void _ZN7ee56020D1Ev();
+Name_Map name_map_ee56020[] = {
+  NSPAIR(_ZN7ee56020C1Ev),
+  NSPAIR(_ZN7ee56020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd6020;
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern  VTBL_ENTRY _ZTV6dd6020[];
+static Base_Class bases_ee56020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee56020[];
+extern void _ZN7ee560203barEv();
+extern void _ZN6dd60203fooEv();
+extern void ABISELECT(_ZTv0_n32_N7ee560203barEv,_ZTv0_n16_N7ee560203barEv)();
+extern void ABISELECT(_ZThn16_N7ee560203barEv,_ZThn8_N7ee560203barEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee56020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee56020[0]),
+  (VTBL_ENTRY)&_ZN7ee560203barEv,
+  ABISELECT(-16,-8),
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee56020[0]),
+  (VTBL_ENTRY)&_ZN6dd60203fooEv,
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee560203barEv,_ZTv0_n16_N7ee560203barEv),
+};
+extern VTBL_ENTRY _ZTV7ee56020[];
+static  VTT_ENTRY vtt_ee56020[] = {
+  {&(_ZTV7ee56020[3]),  3,10},
+  {&(_ZTV7ee56020[8]),  8,10},
+};
+extern VTBL_ENTRY _ZTI7ee56020[];
+extern  VTBL_ENTRY _ZTV7ee56020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee56020[];
+static VTBL_ENTRY alt_thunk_names27[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee560203barEv,_ZTv0_n16_N7ee560203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee560203barEv,_ZThn8_N7ee560203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee56020 = {  "ee56020", // class name
+  bases_ee56020, 4,
+  &(vtc_ee56020[0]), // expected_vtbl_contents
+  &(vtt_ee56020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee56020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee56020),10, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee56020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names27,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee66020  : dd6020 {
+  int e;
+  virtual void  foo(); // _ZN7ee660203fooEv
+  virtual void  bar(); // _ZN7ee660203barEv
+  ~ee66020(); // tgen
+  ee66020(); // tgen
+};
+//SIG(1 ee66020) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 v2 Fi}
+
+
+void  ee66020 ::foo(){vfunc_called(this, "_ZN7ee660203fooEv");}
+void  ee66020 ::bar(){vfunc_called(this, "_ZN7ee660203barEv");}
+ee66020 ::~ee66020(){ note_dtor("ee66020", this);} // tgen
+ee66020 ::ee66020(){ note_ctor("ee66020", this);} // tgen
+
+static void Test_ee66020()
+{
+  extern Class_Descriptor cd_ee66020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee66020, buf);
+    ee66020 *dp, &lv = *(dp=new (buf) ee66020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee66020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee66020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd6020*), ABISELECT(8,4), "ee66020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd6020*), 0, "ee66020");
+    check_base_class_offset(lv, (cc020*)(dd6020*), 0, "ee66020");
+    check_base_class_offset(lv, (dd6020*), 0, "ee66020");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee66020.e");
+    test_class_info(&lv, &cd_ee66020);
+    dp->~ee66020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee66020(Test_ee66020, "ee66020", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee66020C1Ev();
+extern void _ZN7ee66020D1Ev();
+Name_Map name_map_ee66020[] = {
+  NSPAIR(_ZN7ee66020C1Ev),
+  NSPAIR(_ZN7ee66020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd6020;
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern  VTBL_ENTRY _ZTV6dd6020[];
+static Base_Class bases_ee66020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee66020[];
+extern void _ZN7ee660203fooEv();
+extern void _ZN7ee660203barEv();
+static  VTBL_ENTRY vtc_ee66020[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee66020[0]),
+  (VTBL_ENTRY)&_ZN7ee660203fooEv,
+  (VTBL_ENTRY)&_ZN7ee660203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee66020[];
+extern  VTBL_ENTRY _ZTV7ee66020[];
+Class_Descriptor cd_ee66020 = {  "ee66020", // class name
+  bases_ee66020, 4,
+  &(vtc_ee66020[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee66020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee66020),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee76020  : virtual dd6020 {
+  int e;
+  virtual void  foo(); // _ZN7ee760203fooEv
+  virtual void  bar(); // _ZN7ee760203barEv
+  ~ee76020(); // tgen
+  ee76020(); // tgen
+};
+//SIG(1 ee76020) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 v2 Fi}
+
+
+void  ee76020 ::foo(){vfunc_called(this, "_ZN7ee760203fooEv");}
+void  ee76020 ::bar(){vfunc_called(this, "_ZN7ee760203barEv");}
+ee76020 ::~ee76020(){ note_dtor("ee76020", this);} // tgen
+ee76020 ::ee76020(){ note_ctor("ee76020", this);} // tgen
+
+static void Test_ee76020()
+{
+  extern Class_Descriptor cd_ee76020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee76020, buf);
+    ee76020 *dp, &lv = *(dp=new (buf) ee76020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee76020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee76020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*)(dd6020*), ABISELECT(24,12), "ee76020");
+    check_base_class_offset(lv, (bb20*)(cc020*)(dd6020*), ABISELECT(16,8), "ee76020");
+    check_base_class_offset(lv, (cc020*)(dd6020*), ABISELECT(16,8), "ee76020");
+    check_base_class_offset(lv, (dd6020*), ABISELECT(16,8), "ee76020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee76020.e");
+    test_class_info(&lv, &cd_ee76020);
+    dp->~ee76020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee76020(Test_ee76020, "ee76020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee76020C1Ev();
+extern void _ZN7ee76020D1Ev();
+Name_Map name_map_ee76020[] = {
+  NSPAIR(_ZN7ee76020C1Ev),
+  NSPAIR(_ZN7ee76020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd6020;
+extern VTBL_ENTRY _ZTI6dd6020[];
+extern  VTBL_ENTRY _ZTV6dd6020[];
+static Base_Class bases_ee76020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee76020[];
+extern void _ZN7ee760203fooEv();
+extern void _ZN7ee760203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee760203fooEv,_ZTv0_n12_N7ee760203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee760203fooEv,_ZThn8_N7ee760203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n32_N7ee760203barEv,_ZTv0_n16_N7ee760203barEv)();
+extern void ABISELECT(_ZThn16_N7ee760203barEv,_ZThn8_N7ee760203barEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee76020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee76020[0]),
+  (VTBL_ENTRY)&_ZN7ee760203fooEv,
+  (VTBL_ENTRY)&_ZN7ee760203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee76020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee760203fooEv,_ZTv0_n12_N7ee760203fooEv),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee760203barEv,_ZTv0_n16_N7ee760203barEv),
+};
+extern VTBL_ENTRY _ZTV7ee76020[];
+static  VTT_ENTRY vtt_ee76020[] = {
+  {&(_ZTV7ee76020[3]),  3,11},
+  {&(_ZTV7ee76020[9]),  9,11},
+};
+extern VTBL_ENTRY _ZTI7ee76020[];
+extern  VTBL_ENTRY _ZTV7ee76020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee76020[];
+static VTBL_ENTRY alt_thunk_names28[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee760203barEv,_ZTv0_n16_N7ee760203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee760203barEv,_ZThn8_N7ee760203barEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee760203fooEv,_ZTv0_n12_N7ee760203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee760203fooEv,_ZThn8_N7ee760203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee76020 = {  "ee76020", // class name
+  bases_ee76020, 4,
+  &(vtc_ee76020[0]), // expected_vtbl_contents
+  &(vtt_ee76020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee76020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee76020),11, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee76020),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names28,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd7020  : virtual cc020 {
+  int d;
+  virtual void  bar(); // _ZN6dd70203barEv
+  virtual void  foo(); // _ZN6dd70203fooEv
+  ~dd7020(); // tgen
+  dd7020(); // tgen
+};
+//SIG(-1 dd7020) C1{ VBC2{ BC3{ BC4{ Fi} v2 Fi} Fi} v1 v2 Fi}
+
+
+void  dd7020 ::bar(){vfunc_called(this, "_ZN6dd70203barEv");}
+void  dd7020 ::foo(){vfunc_called(this, "_ZN6dd70203fooEv");}
+dd7020 ::~dd7020(){ note_dtor("dd7020", this);} // tgen
+dd7020 ::dd7020(){ note_ctor("dd7020", this);} // tgen
+
+static void Test_dd7020()
+{
+  extern Class_Descriptor cd_dd7020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,7)];
+    init_test(&cd_dd7020, buf);
+    dd7020 *dp, &lv = *(dp=new (buf) dd7020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,24), "sizeof(dd7020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd7020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,12), "dd7020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,8), "dd7020");
+    check_base_class_offset(lv, (cc020*), ABISELECT(16,8), "dd7020");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd7020.d");
+    test_class_info(&lv, &cd_dd7020);
+    dp->~dd7020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd7020(Test_dd7020, "dd7020", ABISELECT(40,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd7020C1Ev();
+extern void _ZN6dd7020D1Ev();
+Name_Map name_map_dd7020[] = {
+  NSPAIR(_ZN6dd7020C1Ev),
+  NSPAIR(_ZN6dd7020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+static Base_Class bases_dd7020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_dd7020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+extern VTBL_ENTRY _ZTV6dd7020[];
+static  VTT_ENTRY vtt_dd7020[] = {
+  {&(_ZTV6dd7020[3]),  3,9},
+  {&(_ZTV6dd7020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern  VTBL_ENTRY _ZTV6dd7020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7020[];
+static VTBL_ENTRY alt_thunk_names29[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_dd7020 = {  "dd7020", // class name
+  bases_dd7020, 3,
+  &(vtc_dd7020[0]), // expected_vtbl_contents
+  &(vtt_dd7020[0]), // expected_vtt_contents
+  ABISELECT(40,24), // object size
+  NSPAIRA(_ZTI6dd7020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd7020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd7020),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names29,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee07020  : dd7020 {
+  int e;
+  ~ee07020(); // tgen
+  ee07020(); // tgen
+};
+//SIG(1 ee07020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} Fi}
+
+
+ee07020 ::~ee07020(){ note_dtor("ee07020", this);} // tgen
+ee07020 ::ee07020(){ note_ctor("ee07020", this);} // tgen
+
+static void Test_ee07020()
+{
+  extern Class_Descriptor cd_ee07020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee07020, buf);
+    ee07020 *dp, &lv = *(dp=new (buf) ee07020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee07020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee07020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee07020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee07020");
+    check_base_class_offset(lv, (cc020*)(dd7020*), ABISELECT(16,12), "ee07020");
+    check_base_class_offset(lv, (dd7020*), 0, "ee07020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee07020.e");
+    test_class_info(&lv, &cd_ee07020);
+    dp->~ee07020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee07020(Test_ee07020, "ee07020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee07020C1Ev();
+extern void _ZN7ee07020D1Ev();
+Name_Map name_map_ee07020[] = {
+  NSPAIR(_ZN7ee07020C1Ev),
+  NSPAIR(_ZN7ee07020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd7020;
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern  VTBL_ENTRY _ZTV6dd7020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7020[];
+static Base_Class bases_ee07020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee07020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee07020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee07020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee07020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee07020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7020__7ee07020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd7020__7ee07020[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+static  VTT_ENTRY vtt_ee07020[] = {
+  {&(_ZTV7ee07020[3]),  3,9},
+  {&(_tg__ZTV6dd7020__7ee07020[3]),  3,5},
+  {&(_tg__ZTV4bb205cc020__6dd7020__7ee07020[3]),  3,4},
+  {&(_ZTV7ee07020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee07020[];
+extern  VTBL_ENTRY _ZTV7ee07020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee07020[];
+static VTBL_ENTRY alt_thunk_names30[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee07020 = {  "ee07020", // class name
+  bases_ee07020, 4,
+  &(vtc_ee07020[0]), // expected_vtbl_contents
+  &(vtt_ee07020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee07020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee07020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee07020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names30,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee17020  : virtual dd7020 {
+  int e;
+  ~ee17020(); // tgen
+  ee17020(); // tgen
+};
+//SIG(1 ee17020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} Fi}
+
+
+ee17020 ::~ee17020(){ note_dtor("ee17020", this);} // tgen
+ee17020 ::ee17020(){ note_ctor("ee17020", this);} // tgen
+
+static void Test_ee17020()
+{
+  extern Class_Descriptor cd_ee17020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee17020, buf);
+    ee17020 *dp, &lv = *(dp=new (buf) ee17020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee17020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee17020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee17020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee17020");
+    check_base_class_offset(lv, (cc020*)(dd7020*), ABISELECT(32,16), "ee17020");
+    check_base_class_offset(lv, (dd7020*), ABISELECT(16,8), "ee17020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee17020.e");
+    test_class_info(&lv, &cd_ee17020);
+    dp->~ee17020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee17020(Test_ee17020, "ee17020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee17020C1Ev();
+extern void _ZN7ee17020D1Ev();
+Name_Map name_map_ee17020[] = {
+  NSPAIR(_ZN7ee17020C1Ev),
+  NSPAIR(_ZN7ee17020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd7020;
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern  VTBL_ENTRY _ZTV6dd7020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7020[];
+static Base_Class bases_ee17020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7020,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee17020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee17020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee17020[0]),
+  0,
+  0,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee17020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee17020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee17020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7020__7ee17020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd7020__7ee17020[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+static  VTT_ENTRY vtt_ee17020[] = {
+  {&(_ZTV7ee17020[4]),  4,15},
+  {&(_ZTV7ee17020[9]),  9,15},
+  {&(_ZTV7ee17020[14]),  14,15},
+  {&(_tg__ZTV6dd7020__7ee17020[3]),  3,5},
+  {&(_tg__ZTV4bb205cc020__6dd7020__7ee17020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee17020[];
+extern  VTBL_ENTRY _ZTV7ee17020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee17020[];
+static VTBL_ENTRY alt_thunk_names31[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee17020 = {  "ee17020", // class name
+  bases_ee17020, 4,
+  &(vtc_ee17020[0]), // expected_vtbl_contents
+  &(vtt_ee17020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee17020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee17020),15, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee17020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names31,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee27020  : dd7020 {
+  int e;
+  virtual void  foo(); // _ZN7ee270203fooEv
+  ~ee27020(); // tgen
+  ee27020(); // tgen
+};
+//SIG(1 ee27020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 Fi}
+
+
+void  ee27020 ::foo(){vfunc_called(this, "_ZN7ee270203fooEv");}
+ee27020 ::~ee27020(){ note_dtor("ee27020", this);} // tgen
+ee27020 ::ee27020(){ note_ctor("ee27020", this);} // tgen
+
+static void Test_ee27020()
+{
+  extern Class_Descriptor cd_ee27020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee27020, buf);
+    ee27020 *dp, &lv = *(dp=new (buf) ee27020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee27020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee27020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee27020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee27020");
+    check_base_class_offset(lv, (cc020*)(dd7020*), ABISELECT(16,12), "ee27020");
+    check_base_class_offset(lv, (dd7020*), 0, "ee27020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee27020.e");
+    test_class_info(&lv, &cd_ee27020);
+    dp->~ee27020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee27020(Test_ee27020, "ee27020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee27020C1Ev();
+extern void _ZN7ee27020D1Ev();
+Name_Map name_map_ee27020[] = {
+  NSPAIR(_ZN7ee27020C1Ev),
+  NSPAIR(_ZN7ee27020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd7020;
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern  VTBL_ENTRY _ZTV6dd7020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7020[];
+static Base_Class bases_ee27020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee27020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN7ee270203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee270203fooEv,_ZTv0_n12_N7ee270203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee270203fooEv,_ZThn12_N7ee270203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee27020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee27020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN7ee270203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee27020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee270203fooEv,_ZTv0_n12_N7ee270203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee27020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7020__7ee27020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd7020__7ee27020[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+static  VTT_ENTRY vtt_ee27020[] = {
+  {&(_ZTV7ee27020[3]),  3,9},
+  {&(_tg__ZTV6dd7020__7ee27020[3]),  3,5},
+  {&(_tg__ZTV4bb205cc020__6dd7020__7ee27020[3]),  3,4},
+  {&(_ZTV7ee27020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee27020[];
+extern  VTBL_ENTRY _ZTV7ee27020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee27020[];
+static VTBL_ENTRY alt_thunk_names32[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee270203fooEv,_ZTv0_n12_N7ee270203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee270203fooEv,_ZThn12_N7ee270203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee27020 = {  "ee27020", // class name
+  bases_ee27020, 4,
+  &(vtc_ee27020[0]), // expected_vtbl_contents
+  &(vtt_ee27020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee27020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee27020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee27020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names32,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee37020  : virtual dd7020 {
+  int e;
+  virtual void  foo(); // _ZN7ee370203fooEv
+  ~ee37020(); // tgen
+  ee37020(); // tgen
+};
+//SIG(1 ee37020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 Fi}
+
+
+void  ee37020 ::foo(){vfunc_called(this, "_ZN7ee370203fooEv");}
+ee37020 ::~ee37020(){ note_dtor("ee37020", this);} // tgen
+ee37020 ::ee37020(){ note_ctor("ee37020", this);} // tgen
+
+static void Test_ee37020()
+{
+  extern Class_Descriptor cd_ee37020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee37020, buf);
+    ee37020 *dp, &lv = *(dp=new (buf) ee37020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee37020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee37020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee37020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee37020");
+    check_base_class_offset(lv, (cc020*)(dd7020*), ABISELECT(32,16), "ee37020");
+    check_base_class_offset(lv, (dd7020*), ABISELECT(16,8), "ee37020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee37020.e");
+    test_class_info(&lv, &cd_ee37020);
+    dp->~ee37020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee37020(Test_ee37020, "ee37020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee37020C1Ev();
+extern void _ZN7ee37020D1Ev();
+Name_Map name_map_ee37020[] = {
+  NSPAIR(_ZN7ee37020C1Ev),
+  NSPAIR(_ZN7ee37020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd7020;
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern  VTBL_ENTRY _ZTV6dd7020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7020[];
+static Base_Class bases_ee37020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee37020[];
+extern void _ZN7ee370203fooEv();
+extern void _ZN6dd70203barEv();
+extern void ABISELECT(_ZTv0_n40_N7ee370203fooEv,_ZTv0_n20_N7ee370203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee370203fooEv,_ZThn8_N7ee370203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee370203fooEv,_ZTv0_n12_N7ee370203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee370203fooEv,_ZThn16_N7ee370203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee37020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee37020[0]),
+  (VTBL_ENTRY)&_ZN7ee370203fooEv,
+  ABISELECT(-16,-8),
+  0,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee37020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee370203fooEv,_ZTv0_n20_N7ee370203fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee37020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee370203fooEv,_ZTv0_n12_N7ee370203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee37020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7020__7ee37020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd7020__7ee37020[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+static  VTT_ENTRY vtt_ee37020[] = {
+  {&(_ZTV7ee37020[4]),  4,16},
+  {&(_ZTV7ee37020[10]),  10,16},
+  {&(_ZTV7ee37020[15]),  15,16},
+  {&(_tg__ZTV6dd7020__7ee37020[3]),  3,5},
+  {&(_tg__ZTV4bb205cc020__6dd7020__7ee37020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee37020[];
+extern  VTBL_ENTRY _ZTV7ee37020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee37020[];
+static VTBL_ENTRY alt_thunk_names33[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee370203fooEv,_ZTv0_n12_N7ee370203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee370203fooEv,_ZThn16_N7ee370203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee370203fooEv,_ZTv0_n20_N7ee370203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee370203fooEv,_ZThn8_N7ee370203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee37020 = {  "ee37020", // class name
+  bases_ee37020, 4,
+  &(vtc_ee37020[0]), // expected_vtbl_contents
+  &(vtt_ee37020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee37020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee37020),16, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee37020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names33,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee47020  : dd7020 {
+  int e;
+  virtual void  bar(); // _ZN7ee470203barEv
+  ~ee47020(); // tgen
+  ee47020(); // tgen
+};
+//SIG(1 ee47020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} v1 Fi}
+
+
+void  ee47020 ::bar(){vfunc_called(this, "_ZN7ee470203barEv");}
+ee47020 ::~ee47020(){ note_dtor("ee47020", this);} // tgen
+ee47020 ::ee47020(){ note_ctor("ee47020", this);} // tgen
+
+static void Test_ee47020()
+{
+  extern Class_Descriptor cd_ee47020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee47020, buf);
+    ee47020 *dp, &lv = *(dp=new (buf) ee47020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee47020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee47020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee47020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee47020");
+    check_base_class_offset(lv, (cc020*)(dd7020*), ABISELECT(16,12), "ee47020");
+    check_base_class_offset(lv, (dd7020*), 0, "ee47020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee47020.e");
+    test_class_info(&lv, &cd_ee47020);
+    dp->~ee47020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee47020(Test_ee47020, "ee47020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee47020C1Ev();
+extern void _ZN7ee47020D1Ev();
+Name_Map name_map_ee47020[] = {
+  NSPAIR(_ZN7ee47020C1Ev),
+  NSPAIR(_ZN7ee47020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd7020;
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern  VTBL_ENTRY _ZTV6dd7020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7020[];
+static Base_Class bases_ee47020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee47020[];
+extern void _ZN7ee470203barEv();
+extern void _ZN6dd70203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee47020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee47020[0]),
+  (VTBL_ENTRY)&_ZN7ee470203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee47020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee47020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7020__7ee47020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd7020__7ee47020[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+static  VTT_ENTRY vtt_ee47020[] = {
+  {&(_ZTV7ee47020[3]),  3,9},
+  {&(_tg__ZTV6dd7020__7ee47020[3]),  3,5},
+  {&(_tg__ZTV4bb205cc020__6dd7020__7ee47020[3]),  3,4},
+  {&(_ZTV7ee47020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee47020[];
+extern  VTBL_ENTRY _ZTV7ee47020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee47020[];
+static VTBL_ENTRY alt_thunk_names34[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee47020 = {  "ee47020", // class name
+  bases_ee47020, 4,
+  &(vtc_ee47020[0]), // expected_vtbl_contents
+  &(vtt_ee47020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee47020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee47020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee47020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names34,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee57020  : virtual dd7020 {
+  int e;
+  virtual void  bar(); // _ZN7ee570203barEv
+  ~ee57020(); // tgen
+  ee57020(); // tgen
+};
+//SIG(1 ee57020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} v1 Fi}
+
+
+void  ee57020 ::bar(){vfunc_called(this, "_ZN7ee570203barEv");}
+ee57020 ::~ee57020(){ note_dtor("ee57020", this);} // tgen
+ee57020 ::ee57020(){ note_ctor("ee57020", this);} // tgen
+
+static void Test_ee57020()
+{
+  extern Class_Descriptor cd_ee57020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee57020, buf);
+    ee57020 *dp, &lv = *(dp=new (buf) ee57020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee57020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee57020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee57020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee57020");
+    check_base_class_offset(lv, (cc020*)(dd7020*), ABISELECT(32,16), "ee57020");
+    check_base_class_offset(lv, (dd7020*), ABISELECT(16,8), "ee57020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee57020.e");
+    test_class_info(&lv, &cd_ee57020);
+    dp->~ee57020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee57020(Test_ee57020, "ee57020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee57020C1Ev();
+extern void _ZN7ee57020D1Ev();
+Name_Map name_map_ee57020[] = {
+  NSPAIR(_ZN7ee57020C1Ev),
+  NSPAIR(_ZN7ee57020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd7020;
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern  VTBL_ENTRY _ZTV6dd7020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7020[];
+static Base_Class bases_ee57020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7020,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee57020[];
+extern void _ZN7ee570203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee570203barEv,_ZTv0_n16_N7ee570203barEv)();
+extern void ABISELECT(_ZThn16_N7ee570203barEv,_ZThn8_N7ee570203barEv)() __attribute__((weak));
+extern void _ZN6dd70203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee57020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee57020[0]),
+  (VTBL_ENTRY)&_ZN7ee570203barEv,
+  0,
+  ABISELECT(-16,-8),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee57020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee570203barEv,_ZTv0_n16_N7ee570203barEv),
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee57020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee57020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7020__7ee57020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd7020__7ee57020[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+static  VTT_ENTRY vtt_ee57020[] = {
+  {&(_ZTV7ee57020[4]),  4,16},
+  {&(_ZTV7ee57020[10]),  10,16},
+  {&(_ZTV7ee57020[15]),  15,16},
+  {&(_tg__ZTV6dd7020__7ee57020[3]),  3,5},
+  {&(_tg__ZTV4bb205cc020__6dd7020__7ee57020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee57020[];
+extern  VTBL_ENTRY _ZTV7ee57020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee57020[];
+static VTBL_ENTRY alt_thunk_names35[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee570203barEv,_ZTv0_n16_N7ee570203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee570203barEv,_ZThn8_N7ee570203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee57020 = {  "ee57020", // class name
+  bases_ee57020, 4,
+  &(vtc_ee57020[0]), // expected_vtbl_contents
+  &(vtt_ee57020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee57020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee57020),16, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee57020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names35,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee67020  : dd7020 {
+  int e;
+  virtual void  foo(); // _ZN7ee670203fooEv
+  virtual void  bar(); // _ZN7ee670203barEv
+  ~ee67020(); // tgen
+  ee67020(); // tgen
+};
+//SIG(1 ee67020) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 v2 Fi}
+
+
+void  ee67020 ::foo(){vfunc_called(this, "_ZN7ee670203fooEv");}
+void  ee67020 ::bar(){vfunc_called(this, "_ZN7ee670203barEv");}
+ee67020 ::~ee67020(){ note_dtor("ee67020", this);} // tgen
+ee67020 ::ee67020(){ note_ctor("ee67020", this);} // tgen
+
+static void Test_ee67020()
+{
+  extern Class_Descriptor cd_ee67020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee67020, buf);
+    ee67020 *dp, &lv = *(dp=new (buf) ee67020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee67020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee67020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(24,16), "ee67020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(16,12), "ee67020");
+    check_base_class_offset(lv, (cc020*)(dd7020*), ABISELECT(16,12), "ee67020");
+    check_base_class_offset(lv, (dd7020*), 0, "ee67020");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee67020.e");
+    test_class_info(&lv, &cd_ee67020);
+    dp->~ee67020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee67020(Test_ee67020, "ee67020", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee67020C1Ev();
+extern void _ZN7ee67020D1Ev();
+Name_Map name_map_ee67020[] = {
+  NSPAIR(_ZN7ee67020C1Ev),
+  NSPAIR(_ZN7ee67020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd7020;
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern  VTBL_ENTRY _ZTV6dd7020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7020[];
+static Base_Class bases_ee67020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7020,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee67020[];
+extern void _ZN7ee670203barEv();
+extern void _ZN7ee670203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee670203fooEv,_ZTv0_n12_N7ee670203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee670203fooEv,_ZThn12_N7ee670203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee67020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee67020[0]),
+  (VTBL_ENTRY)&_ZN7ee670203barEv,
+  (VTBL_ENTRY)&_ZN7ee670203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee67020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee670203fooEv,_ZTv0_n12_N7ee670203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee67020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7020__7ee67020[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd7020__7ee67020[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+static  VTT_ENTRY vtt_ee67020[] = {
+  {&(_ZTV7ee67020[3]),  3,9},
+  {&(_tg__ZTV6dd7020__7ee67020[3]),  3,5},
+  {&(_tg__ZTV4bb205cc020__6dd7020__7ee67020[3]),  3,4},
+  {&(_ZTV7ee67020[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee67020[];
+extern  VTBL_ENTRY _ZTV7ee67020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee67020[];
+static VTBL_ENTRY alt_thunk_names36[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn12_N6dd70203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee670203fooEv,_ZTv0_n12_N7ee670203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee670203fooEv,_ZThn12_N7ee670203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee67020 = {  "ee67020", // class name
+  bases_ee67020, 4,
+  &(vtc_ee67020[0]), // expected_vtbl_contents
+  &(vtt_ee67020[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee67020),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee67020),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee67020),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names36,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee77020  : virtual dd7020 {
+  int e;
+  virtual void  foo(); // _ZN7ee770203fooEv
+  virtual void  bar(); // _ZN7ee770203barEv
+  ~ee77020(); // tgen
+  ee77020(); // tgen
+};
+//SIG(1 ee77020) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 v2 Fi}
+
+
+void  ee77020 ::foo(){vfunc_called(this, "_ZN7ee770203fooEv");}
+void  ee77020 ::bar(){vfunc_called(this, "_ZN7ee770203barEv");}
+ee77020 ::~ee77020(){ note_dtor("ee77020", this);} // tgen
+ee77020 ::ee77020(){ note_ctor("ee77020", this);} // tgen
+
+static void Test_ee77020()
+{
+  extern Class_Descriptor cd_ee77020;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee77020, buf);
+    ee77020 *dp, &lv = *(dp=new (buf) ee77020());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee77020)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee77020)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc020*), ABISELECT(40,20), "ee77020");
+    check_base_class_offset(lv, (bb20*)(cc020*), ABISELECT(32,16), "ee77020");
+    check_base_class_offset(lv, (cc020*)(dd7020*), ABISELECT(32,16), "ee77020");
+    check_base_class_offset(lv, (dd7020*), ABISELECT(16,8), "ee77020");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee77020.e");
+    test_class_info(&lv, &cd_ee77020);
+    dp->~ee77020();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee77020(Test_ee77020, "ee77020", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee77020C1Ev();
+extern void _ZN7ee77020D1Ev();
+Name_Map name_map_ee77020[] = {
+  NSPAIR(_ZN7ee77020C1Ev),
+  NSPAIR(_ZN7ee77020D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc020;
+extern VTBL_ENTRY _ZTI5cc020[];
+extern  VTBL_ENTRY _ZTV5cc020[];
+extern Class_Descriptor cd_dd7020;
+extern VTBL_ENTRY _ZTI6dd7020[];
+extern  VTBL_ENTRY _ZTV6dd7020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7020[];
+static Base_Class bases_ee77020[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc020,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7020,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee77020[];
+extern void _ZN7ee770203fooEv();
+extern void _ZN7ee770203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee770203barEv,_ZTv0_n16_N7ee770203barEv)();
+extern void ABISELECT(_ZThn16_N7ee770203barEv,_ZThn8_N7ee770203barEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n40_N7ee770203fooEv,_ZTv0_n20_N7ee770203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee770203fooEv,_ZThn8_N7ee770203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee770203fooEv,_ZTv0_n12_N7ee770203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee770203fooEv,_ZThn16_N7ee770203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee77020[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee77020[0]),
+  (VTBL_ENTRY)&_ZN7ee770203fooEv,
+  (VTBL_ENTRY)&_ZN7ee770203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee77020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee770203barEv,_ZTv0_n16_N7ee770203barEv),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee770203fooEv,_ZTv0_n20_N7ee770203fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee77020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee770203fooEv,_ZTv0_n12_N7ee770203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee77020[];
+extern void _ZN6dd70203barEv();
+extern void _ZN6dd70203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7020__7ee77020[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&_ZN6dd70203barEv,
+  (VTBL_ENTRY)&_ZN6dd70203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb205cc020__6dd7020__7ee77020[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7020[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv),
+};
+static  VTT_ENTRY vtt_ee77020[] = {
+  {&(_ZTV7ee77020[4]),  4,17},
+  {&(_ZTV7ee77020[11]),  11,17},
+  {&(_ZTV7ee77020[16]),  16,17},
+  {&(_tg__ZTV6dd7020__7ee77020[3]),  3,5},
+  {&(_tg__ZTV4bb205cc020__6dd7020__7ee77020[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee77020[];
+extern  VTBL_ENTRY _ZTV7ee77020[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee77020[];
+static VTBL_ENTRY alt_thunk_names37[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd70203fooEv,_ZTv0_n12_N6dd70203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd70203fooEv,_ZThn8_N6dd70203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee770203fooEv,_ZTv0_n12_N7ee770203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee770203fooEv,_ZThn16_N7ee770203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee770203fooEv,_ZTv0_n20_N7ee770203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee770203fooEv,_ZThn8_N7ee770203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee770203barEv,_ZTv0_n16_N7ee770203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee770203barEv,_ZThn8_N7ee770203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee77020 = {  "ee77020", // class name
+  bases_ee77020, 4,
+  &(vtc_ee77020[0]), // expected_vtbl_contents
+  &(vtt_ee77020[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee77020),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee77020),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee77020),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names37,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  cc120  : virtual bb20 {
+  int c;
+  ~cc120(); // tgen
+  cc120(); // tgen
+};
+//SIG(-1 cc120) C1{ VBC2{ BC3{ Fi} v1 Fi} Fi}
+
+
+cc120 ::~cc120(){ note_dtor("cc120", this);} // tgen
+cc120 ::cc120(){ note_ctor("cc120", this);} // tgen
+
+static void Test_cc120()
+{
+  extern Class_Descriptor cd_cc120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_cc120, buf);
+    cc120 *dp, &lv = *(dp=new (buf) cc120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(cc120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(24,12), "cc120");
+    check_base_class_offset(lv, (bb20*), ABISELECT(16,8), "cc120");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc120.c");
+    test_class_info(&lv, &cd_cc120);
+    dp->~cc120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc120(Test_cc120, "cc120", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN5cc120C1Ev();
+extern void _ZN5cc120D1Ev();
+Name_Map name_map_cc120[] = {
+  NSPAIR(_ZN5cc120C1Ev),
+  NSPAIR(_ZN5cc120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+static Base_Class bases_cc120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI5cc120[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_cc120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV5cc120[];
+static  VTT_ENTRY vtt_cc120[] = {
+  {&(_ZTV5cc120[3]),  3,7},
+  {&(_ZTV5cc120[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+Class_Descriptor cd_cc120 = {  "cc120", // class name
+  bases_cc120, 2,
+  &(vtc_cc120[0]), // expected_vtbl_contents
+  &(vtt_cc120[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI5cc120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV5cc120),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT5cc120),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd0120  : cc120 {
+  int d;
+  ~dd0120(); // tgen
+  dd0120(); // tgen
+};
+//SIG(-1 dd0120) C1{ BC2{ VBC3{ BC4{ Fi} v1 Fi} Fi} Fi}
+
+
+dd0120 ::~dd0120(){ note_dtor("dd0120", this);} // tgen
+dd0120 ::dd0120(){ note_ctor("dd0120", this);} // tgen
+
+static void Test_dd0120()
+{
+  extern Class_Descriptor cd_dd0120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_dd0120, buf);
+    dd0120 *dp, &lv = *(dp=new (buf) dd0120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(dd0120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd0120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(24,16), "dd0120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(16,12), "dd0120");
+    check_base_class_offset(lv, (cc120*), 0, "dd0120");
+    check_field_offset(lv, d, ABISELECT(12,8), "dd0120.d");
+    test_class_info(&lv, &cd_dd0120);
+    dp->~dd0120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd0120(Test_dd0120, "dd0120", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd0120C1Ev();
+extern void _ZN6dd0120D1Ev();
+Name_Map name_map_dd0120[] = {
+  NSPAIR(_ZN6dd0120C1Ev),
+  NSPAIR(_ZN6dd0120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+static Base_Class bases_dd0120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_dd0120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV6dd0120[];
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd0120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__6dd0120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_dd0120[] = {
+  {&(_ZTV6dd0120[3]),  3,7},
+  {&(_tg__ZTV5cc120__6dd0120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__6dd0120[3]),  3,4},
+  {&(_ZTV6dd0120[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern  VTBL_ENTRY _ZTV6dd0120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd0120[];
+Class_Descriptor cd_dd0120 = {  "dd0120", // class name
+  bases_dd0120, 3,
+  &(vtc_dd0120[0]), // expected_vtbl_contents
+  &(vtt_dd0120[0]), // expected_vtt_contents
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI6dd0120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd0120),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd0120),4, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee00120  : dd0120 {
+  int e;
+  ~ee00120(); // tgen
+  ee00120(); // tgen
+};
+//SIG(1 ee00120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} Fi}
+
+
+ee00120 ::~ee00120(){ note_dtor("ee00120", this);} // tgen
+ee00120 ::ee00120(){ note_ctor("ee00120", this);} // tgen
+
+static void Test_ee00120()
+{
+  extern Class_Descriptor cd_ee00120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee00120, buf);
+    ee00120 *dp, &lv = *(dp=new (buf) ee00120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee00120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee00120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee00120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd0120*), ABISELECT(24,16), "ee00120");
+    check_base_class_offset(lv, (cc120*)(dd0120*), 0, "ee00120");
+    check_base_class_offset(lv, (dd0120*), 0, "ee00120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee00120.e");
+    test_class_info(&lv, &cd_ee00120);
+    dp->~ee00120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee00120(Test_ee00120, "ee00120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee00120C1Ev();
+extern void _ZN7ee00120D1Ev();
+Name_Map name_map_ee00120[] = {
+  NSPAIR(_ZN7ee00120C1Ev),
+  NSPAIR(_ZN7ee00120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd0120;
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern  VTBL_ENTRY _ZTV6dd0120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd0120[];
+static Base_Class bases_ee00120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee00120[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee00120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee00120[0]),
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee00120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee00120[];
+static  VTBL_ENTRY _tg__ZTV6dd0120__7ee00120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd0120__7ee00120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd0120__7ee00120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd0120__7ee00120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee00120[] = {
+  {&(_ZTV7ee00120[3]),  3,7},
+  {&(_tg__ZTV6dd0120__7ee00120[3]),  3,3},
+  {&(_tg__ZTV5cc1206dd0120__7ee00120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd0120__7ee00120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd0120__7ee00120[3]),  3,4},
+  {&(_ZTV7ee00120[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI7ee00120[];
+extern  VTBL_ENTRY _ZTV7ee00120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee00120[];
+Class_Descriptor cd_ee00120 = {  "ee00120", // class name
+  bases_ee00120, 4,
+  &(vtc_ee00120[0]), // expected_vtbl_contents
+  &(vtt_ee00120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee00120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee00120),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee00120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee10120  : virtual dd0120 {
+  int e;
+  ~ee10120(); // tgen
+  ee10120(); // tgen
+};
+//SIG(1 ee10120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} Fi}
+
+
+ee10120 ::~ee10120(){ note_dtor("ee10120", this);} // tgen
+ee10120 ::ee10120(){ note_ctor("ee10120", this);} // tgen
+
+static void Test_ee10120()
+{
+  extern Class_Descriptor cd_ee10120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee10120, buf);
+    ee10120 *dp, &lv = *(dp=new (buf) ee10120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee10120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee10120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee10120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd0120*), ABISELECT(32,20), "ee10120");
+    check_base_class_offset(lv, (cc120*)(dd0120*), ABISELECT(16,8), "ee10120");
+    check_base_class_offset(lv, (dd0120*), ABISELECT(16,8), "ee10120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee10120.e");
+    test_class_info(&lv, &cd_ee10120);
+    dp->~ee10120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee10120(Test_ee10120, "ee10120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee10120C1Ev();
+extern void _ZN7ee10120D1Ev();
+Name_Map name_map_ee10120[] = {
+  NSPAIR(_ZN7ee10120C1Ev),
+  NSPAIR(_ZN7ee10120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd0120;
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern  VTBL_ENTRY _ZTV6dd0120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd0120[];
+static Base_Class bases_ee10120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0120,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee10120[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee10120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee10120[0]),
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee10120[0]),
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee10120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee10120[];
+static  VTBL_ENTRY _tg__ZTV6dd0120__7ee10120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd0120__7ee10120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd0120__7ee10120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd0120__7ee10120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee10120[] = {
+  {&(_ZTV7ee10120[4]),  4,11},
+  {&(_ZTV7ee10120[7]),  7,11},
+  {&(_ZTV7ee10120[10]),  10,11},
+  {&(_tg__ZTV6dd0120__7ee10120[3]),  3,3},
+  {&(_tg__ZTV5cc1206dd0120__7ee10120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd0120__7ee10120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd0120__7ee10120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee10120[];
+extern  VTBL_ENTRY _ZTV7ee10120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee10120[];
+Class_Descriptor cd_ee10120 = {  "ee10120", // class name
+  bases_ee10120, 4,
+  &(vtc_ee10120[0]), // expected_vtbl_contents
+  &(vtt_ee10120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee10120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee10120),11, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee10120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee20120  : dd0120 {
+  int e;
+  virtual void  foo(); // _ZN7ee201203fooEv
+  ~ee20120(); // tgen
+  ee20120(); // tgen
+};
+//SIG(1 ee20120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee20120 ::foo(){vfunc_called(this, "_ZN7ee201203fooEv");}
+ee20120 ::~ee20120(){ note_dtor("ee20120", this);} // tgen
+ee20120 ::ee20120(){ note_ctor("ee20120", this);} // tgen
+
+static void Test_ee20120()
+{
+  extern Class_Descriptor cd_ee20120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee20120, buf);
+    ee20120 *dp, &lv = *(dp=new (buf) ee20120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee20120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee20120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee20120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd0120*), ABISELECT(24,16), "ee20120");
+    check_base_class_offset(lv, (cc120*)(dd0120*), 0, "ee20120");
+    check_base_class_offset(lv, (dd0120*), 0, "ee20120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee20120.e");
+    test_class_info(&lv, &cd_ee20120);
+    dp->~ee20120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee20120(Test_ee20120, "ee20120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee20120C1Ev();
+extern void _ZN7ee20120D1Ev();
+Name_Map name_map_ee20120[] = {
+  NSPAIR(_ZN7ee20120C1Ev),
+  NSPAIR(_ZN7ee20120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd0120;
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern  VTBL_ENTRY _ZTV6dd0120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd0120[];
+static Base_Class bases_ee20120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee20120[];
+extern void _ZN7ee201203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee201203fooEv,_ZTv0_n12_N7ee201203fooEv)();
+extern void ABISELECT(_ZThn24_N7ee201203fooEv,_ZThn16_N7ee201203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee20120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee20120[0]),
+  (VTBL_ENTRY)&_ZN7ee201203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee20120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee201203fooEv,_ZTv0_n12_N7ee201203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee20120[];
+static  VTBL_ENTRY _tg__ZTV6dd0120__7ee20120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd0120__7ee20120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd0120__7ee20120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd0120__7ee20120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee20120[] = {
+  {&(_ZTV7ee20120[3]),  3,8},
+  {&(_tg__ZTV6dd0120__7ee20120[3]),  3,3},
+  {&(_tg__ZTV5cc1206dd0120__7ee20120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd0120__7ee20120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd0120__7ee20120[3]),  3,4},
+  {&(_ZTV7ee20120[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee20120[];
+extern  VTBL_ENTRY _ZTV7ee20120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee20120[];
+static VTBL_ENTRY alt_thunk_names38[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee201203fooEv,_ZTv0_n12_N7ee201203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N7ee201203fooEv,_ZThn16_N7ee201203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee20120 = {  "ee20120", // class name
+  bases_ee20120, 4,
+  &(vtc_ee20120[0]), // expected_vtbl_contents
+  &(vtt_ee20120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee20120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee20120),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee20120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names38,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee30120  : virtual dd0120 {
+  int e;
+  virtual void  foo(); // _ZN7ee301203fooEv
+  ~ee30120(); // tgen
+  ee30120(); // tgen
+};
+//SIG(1 ee30120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee30120 ::foo(){vfunc_called(this, "_ZN7ee301203fooEv");}
+ee30120 ::~ee30120(){ note_dtor("ee30120", this);} // tgen
+ee30120 ::ee30120(){ note_ctor("ee30120", this);} // tgen
+
+static void Test_ee30120()
+{
+  extern Class_Descriptor cd_ee30120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee30120, buf);
+    ee30120 *dp, &lv = *(dp=new (buf) ee30120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee30120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee30120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee30120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd0120*), ABISELECT(32,20), "ee30120");
+    check_base_class_offset(lv, (cc120*)(dd0120*), ABISELECT(16,8), "ee30120");
+    check_base_class_offset(lv, (dd0120*), ABISELECT(16,8), "ee30120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee30120.e");
+    test_class_info(&lv, &cd_ee30120);
+    dp->~ee30120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee30120(Test_ee30120, "ee30120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee30120C1Ev();
+extern void _ZN7ee30120D1Ev();
+Name_Map name_map_ee30120[] = {
+  NSPAIR(_ZN7ee30120C1Ev),
+  NSPAIR(_ZN7ee30120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd0120;
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern  VTBL_ENTRY _ZTV6dd0120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd0120[];
+static Base_Class bases_ee30120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee30120[];
+extern void _ZN7ee301203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee301203fooEv,_ZTv0_n12_N7ee301203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee301203fooEv,_ZThn20_N7ee301203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee30120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee30120[0]),
+  (VTBL_ENTRY)&_ZN7ee301203fooEv,
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee30120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee30120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee301203fooEv,_ZTv0_n12_N7ee301203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee30120[];
+static  VTBL_ENTRY _tg__ZTV6dd0120__7ee30120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd0120__7ee30120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd0120__7ee30120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd0120__7ee30120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee30120[] = {
+  {&(_ZTV7ee30120[4]),  4,12},
+  {&(_ZTV7ee30120[8]),  8,12},
+  {&(_ZTV7ee30120[11]),  11,12},
+  {&(_tg__ZTV6dd0120__7ee30120[3]),  3,3},
+  {&(_tg__ZTV5cc1206dd0120__7ee30120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd0120__7ee30120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd0120__7ee30120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee30120[];
+extern  VTBL_ENTRY _ZTV7ee30120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee30120[];
+static VTBL_ENTRY alt_thunk_names39[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee301203fooEv,_ZTv0_n12_N7ee301203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee301203fooEv,_ZThn20_N7ee301203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee30120 = {  "ee30120", // class name
+  bases_ee30120, 4,
+  &(vtc_ee30120[0]), // expected_vtbl_contents
+  &(vtt_ee30120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee30120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee30120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee30120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names39,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee40120  : dd0120 {
+  int e;
+  virtual void  bar(); // _ZN7ee401203barEv
+  ~ee40120(); // tgen
+  ee40120(); // tgen
+};
+//SIG(1 ee40120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee40120 ::bar(){vfunc_called(this, "_ZN7ee401203barEv");}
+ee40120 ::~ee40120(){ note_dtor("ee40120", this);} // tgen
+ee40120 ::ee40120(){ note_ctor("ee40120", this);} // tgen
+
+static void Test_ee40120()
+{
+  extern Class_Descriptor cd_ee40120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee40120, buf);
+    ee40120 *dp, &lv = *(dp=new (buf) ee40120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee40120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee40120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee40120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd0120*), ABISELECT(24,16), "ee40120");
+    check_base_class_offset(lv, (cc120*)(dd0120*), 0, "ee40120");
+    check_base_class_offset(lv, (dd0120*), 0, "ee40120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee40120.e");
+    test_class_info(&lv, &cd_ee40120);
+    dp->~ee40120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee40120(Test_ee40120, "ee40120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee40120C1Ev();
+extern void _ZN7ee40120D1Ev();
+Name_Map name_map_ee40120[] = {
+  NSPAIR(_ZN7ee40120C1Ev),
+  NSPAIR(_ZN7ee40120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd0120;
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern  VTBL_ENTRY _ZTV6dd0120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd0120[];
+static Base_Class bases_ee40120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee40120[];
+extern void _ZN7ee401203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee40120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee40120[0]),
+  (VTBL_ENTRY)&_ZN7ee401203barEv,
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee40120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee40120[];
+static  VTBL_ENTRY _tg__ZTV6dd0120__7ee40120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd0120__7ee40120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd0120__7ee40120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd0120__7ee40120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee40120[] = {
+  {&(_ZTV7ee40120[3]),  3,8},
+  {&(_tg__ZTV6dd0120__7ee40120[3]),  3,3},
+  {&(_tg__ZTV5cc1206dd0120__7ee40120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd0120__7ee40120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd0120__7ee40120[3]),  3,4},
+  {&(_ZTV7ee40120[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee40120[];
+extern  VTBL_ENTRY _ZTV7ee40120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee40120[];
+Class_Descriptor cd_ee40120 = {  "ee40120", // class name
+  bases_ee40120, 4,
+  &(vtc_ee40120[0]), // expected_vtbl_contents
+  &(vtt_ee40120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee40120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee40120),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee40120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee50120  : virtual dd0120 {
+  int e;
+  virtual void  bar(); // _ZN7ee501203barEv
+  ~ee50120(); // tgen
+  ee50120(); // tgen
+};
+//SIG(1 ee50120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee50120 ::bar(){vfunc_called(this, "_ZN7ee501203barEv");}
+ee50120 ::~ee50120(){ note_dtor("ee50120", this);} // tgen
+ee50120 ::ee50120(){ note_ctor("ee50120", this);} // tgen
+
+static void Test_ee50120()
+{
+  extern Class_Descriptor cd_ee50120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee50120, buf);
+    ee50120 *dp, &lv = *(dp=new (buf) ee50120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee50120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee50120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee50120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd0120*), ABISELECT(32,20), "ee50120");
+    check_base_class_offset(lv, (cc120*)(dd0120*), ABISELECT(16,8), "ee50120");
+    check_base_class_offset(lv, (dd0120*), ABISELECT(16,8), "ee50120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee50120.e");
+    test_class_info(&lv, &cd_ee50120);
+    dp->~ee50120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee50120(Test_ee50120, "ee50120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee50120C1Ev();
+extern void _ZN7ee50120D1Ev();
+Name_Map name_map_ee50120[] = {
+  NSPAIR(_ZN7ee50120C1Ev),
+  NSPAIR(_ZN7ee50120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd0120;
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern  VTBL_ENTRY _ZTV6dd0120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd0120[];
+static Base_Class bases_ee50120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee50120[];
+extern void _ZN7ee501203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee50120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee50120[0]),
+  (VTBL_ENTRY)&_ZN7ee501203barEv,
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee50120[0]),
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee50120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee50120[];
+static  VTBL_ENTRY _tg__ZTV6dd0120__7ee50120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd0120__7ee50120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd0120__7ee50120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd0120__7ee50120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee50120[] = {
+  {&(_ZTV7ee50120[4]),  4,12},
+  {&(_ZTV7ee50120[8]),  8,12},
+  {&(_ZTV7ee50120[11]),  11,12},
+  {&(_tg__ZTV6dd0120__7ee50120[3]),  3,3},
+  {&(_tg__ZTV5cc1206dd0120__7ee50120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd0120__7ee50120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd0120__7ee50120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee50120[];
+extern  VTBL_ENTRY _ZTV7ee50120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee50120[];
+Class_Descriptor cd_ee50120 = {  "ee50120", // class name
+  bases_ee50120, 4,
+  &(vtc_ee50120[0]), // expected_vtbl_contents
+  &(vtt_ee50120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee50120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee50120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee50120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee60120  : dd0120 {
+  int e;
+  virtual void  foo(); // _ZN7ee601203fooEv
+  virtual void  bar(); // _ZN7ee601203barEv
+  ~ee60120(); // tgen
+  ee60120(); // tgen
+};
+//SIG(1 ee60120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 v2 Fi}
+
+
+void  ee60120 ::foo(){vfunc_called(this, "_ZN7ee601203fooEv");}
+void  ee60120 ::bar(){vfunc_called(this, "_ZN7ee601203barEv");}
+ee60120 ::~ee60120(){ note_dtor("ee60120", this);} // tgen
+ee60120 ::ee60120(){ note_ctor("ee60120", this);} // tgen
+
+static void Test_ee60120()
+{
+  extern Class_Descriptor cd_ee60120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee60120, buf);
+    ee60120 *dp, &lv = *(dp=new (buf) ee60120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee60120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee60120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee60120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd0120*), ABISELECT(24,16), "ee60120");
+    check_base_class_offset(lv, (cc120*)(dd0120*), 0, "ee60120");
+    check_base_class_offset(lv, (dd0120*), 0, "ee60120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee60120.e");
+    test_class_info(&lv, &cd_ee60120);
+    dp->~ee60120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee60120(Test_ee60120, "ee60120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee60120C1Ev();
+extern void _ZN7ee60120D1Ev();
+Name_Map name_map_ee60120[] = {
+  NSPAIR(_ZN7ee60120C1Ev),
+  NSPAIR(_ZN7ee60120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd0120;
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern  VTBL_ENTRY _ZTV6dd0120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd0120[];
+static Base_Class bases_ee60120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee60120[];
+extern void _ZN7ee601203fooEv();
+extern void _ZN7ee601203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee601203fooEv,_ZTv0_n12_N7ee601203fooEv)();
+extern void ABISELECT(_ZThn24_N7ee601203fooEv,_ZThn16_N7ee601203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee60120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee60120[0]),
+  (VTBL_ENTRY)&_ZN7ee601203fooEv,
+  (VTBL_ENTRY)&_ZN7ee601203barEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee60120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee601203fooEv,_ZTv0_n12_N7ee601203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee60120[];
+static  VTBL_ENTRY _tg__ZTV6dd0120__7ee60120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd0120__7ee60120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd0120__7ee60120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd0120__7ee60120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee60120[] = {
+  {&(_ZTV7ee60120[3]),  3,9},
+  {&(_tg__ZTV6dd0120__7ee60120[3]),  3,3},
+  {&(_tg__ZTV5cc1206dd0120__7ee60120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd0120__7ee60120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd0120__7ee60120[3]),  3,4},
+  {&(_ZTV7ee60120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee60120[];
+extern  VTBL_ENTRY _ZTV7ee60120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee60120[];
+static VTBL_ENTRY alt_thunk_names40[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee601203fooEv,_ZTv0_n12_N7ee601203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N7ee601203fooEv,_ZThn16_N7ee601203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee60120 = {  "ee60120", // class name
+  bases_ee60120, 4,
+  &(vtc_ee60120[0]), // expected_vtbl_contents
+  &(vtt_ee60120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee60120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee60120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee60120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names40,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee70120  : virtual dd0120 {
+  int e;
+  virtual void  foo(); // _ZN7ee701203fooEv
+  virtual void  bar(); // _ZN7ee701203barEv
+  ~ee70120(); // tgen
+  ee70120(); // tgen
+};
+//SIG(1 ee70120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 v2 Fi}
+
+
+void  ee70120 ::foo(){vfunc_called(this, "_ZN7ee701203fooEv");}
+void  ee70120 ::bar(){vfunc_called(this, "_ZN7ee701203barEv");}
+ee70120 ::~ee70120(){ note_dtor("ee70120", this);} // tgen
+ee70120 ::ee70120(){ note_ctor("ee70120", this);} // tgen
+
+static void Test_ee70120()
+{
+  extern Class_Descriptor cd_ee70120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee70120, buf);
+    ee70120 *dp, &lv = *(dp=new (buf) ee70120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee70120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee70120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee70120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd0120*), ABISELECT(32,20), "ee70120");
+    check_base_class_offset(lv, (cc120*)(dd0120*), ABISELECT(16,8), "ee70120");
+    check_base_class_offset(lv, (dd0120*), ABISELECT(16,8), "ee70120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee70120.e");
+    test_class_info(&lv, &cd_ee70120);
+    dp->~ee70120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee70120(Test_ee70120, "ee70120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee70120C1Ev();
+extern void _ZN7ee70120D1Ev();
+Name_Map name_map_ee70120[] = {
+  NSPAIR(_ZN7ee70120C1Ev),
+  NSPAIR(_ZN7ee70120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd0120;
+extern VTBL_ENTRY _ZTI6dd0120[];
+extern  VTBL_ENTRY _ZTV6dd0120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd0120[];
+static Base_Class bases_ee70120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee70120[];
+extern void _ZN7ee701203fooEv();
+extern void _ZN7ee701203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee701203fooEv,_ZTv0_n12_N7ee701203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee701203fooEv,_ZThn20_N7ee701203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee70120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee70120[0]),
+  (VTBL_ENTRY)&_ZN7ee701203fooEv,
+  (VTBL_ENTRY)&_ZN7ee701203barEv,
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee70120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee70120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee701203fooEv,_ZTv0_n12_N7ee701203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee70120[];
+static  VTBL_ENTRY _tg__ZTV6dd0120__7ee70120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd0120__7ee70120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd0120__7ee70120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd0120__7ee70120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd0120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee70120[] = {
+  {&(_ZTV7ee70120[4]),  4,13},
+  {&(_ZTV7ee70120[9]),  9,13},
+  {&(_ZTV7ee70120[12]),  12,13},
+  {&(_tg__ZTV6dd0120__7ee70120[3]),  3,3},
+  {&(_tg__ZTV5cc1206dd0120__7ee70120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd0120__7ee70120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd0120__7ee70120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee70120[];
+extern  VTBL_ENTRY _ZTV7ee70120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee70120[];
+static VTBL_ENTRY alt_thunk_names41[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee701203fooEv,_ZTv0_n12_N7ee701203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee701203fooEv,_ZThn20_N7ee701203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee70120 = {  "ee70120", // class name
+  bases_ee70120, 4,
+  &(vtc_ee70120[0]), // expected_vtbl_contents
+  &(vtt_ee70120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee70120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee70120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee70120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names41,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd1120  : virtual cc120 {
+  int d;
+  ~dd1120(); // tgen
+  dd1120(); // tgen
+};
+//SIG(-1 dd1120) C1{ VBC2{ VBC3{ BC4{ Fi} v1 Fi} Fi} Fi}
+
+
+dd1120 ::~dd1120(){ note_dtor("dd1120", this);} // tgen
+dd1120 ::dd1120(){ note_ctor("dd1120", this);} // tgen
+
+static void Test_dd1120()
+{
+  extern Class_Descriptor cd_dd1120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,8)];
+    init_test(&cd_dd1120, buf);
+    dd1120 *dp, &lv = *(dp=new (buf) dd1120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,28), "sizeof(dd1120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd1120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,20), "dd1120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,16), "dd1120");
+    check_base_class_offset(lv, (cc120*), ABISELECT(16,8), "dd1120");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd1120.d");
+    test_class_info(&lv, &cd_dd1120);
+    dp->~dd1120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd1120(Test_dd1120, "dd1120", ABISELECT(48,28));
+
+#else // __cplusplus
+
+extern void _ZN6dd1120C1Ev();
+extern void _ZN6dd1120D1Ev();
+Name_Map name_map_dd1120[] = {
+  NSPAIR(_ZN6dd1120C1Ev),
+  NSPAIR(_ZN6dd1120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+static Base_Class bases_dd1120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_dd1120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV6dd1120[];
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd1120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__6dd1120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_dd1120[] = {
+  {&(_ZTV6dd1120[4]),  4,11},
+  {&(_ZTV6dd1120[7]),  7,11},
+  {&(_ZTV6dd1120[10]),  10,11},
+  {&(_tg__ZTV5cc120__6dd1120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__6dd1120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern  VTBL_ENTRY _ZTV6dd1120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1120[];
+Class_Descriptor cd_dd1120 = {  "dd1120", // class name
+  bases_dd1120, 3,
+  &(vtc_dd1120[0]), // expected_vtbl_contents
+  &(vtt_dd1120[0]), // expected_vtt_contents
+  ABISELECT(48,28), // object size
+  NSPAIRA(_ZTI6dd1120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd1120),11, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd1120),5, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee01120  : dd1120 {
+  int e;
+  ~ee01120(); // tgen
+  ee01120(); // tgen
+};
+//SIG(1 ee01120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} Fi}
+
+
+ee01120 ::~ee01120(){ note_dtor("ee01120", this);} // tgen
+ee01120 ::ee01120(){ note_ctor("ee01120", this);} // tgen
+
+static void Test_ee01120()
+{
+  extern Class_Descriptor cd_ee01120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee01120, buf);
+    ee01120 *dp, &lv = *(dp=new (buf) ee01120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee01120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee01120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee01120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee01120");
+    check_base_class_offset(lv, (cc120*)(dd1120*), ABISELECT(16,12), "ee01120");
+    check_base_class_offset(lv, (dd1120*), 0, "ee01120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee01120.e");
+    test_class_info(&lv, &cd_ee01120);
+    dp->~ee01120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee01120(Test_ee01120, "ee01120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee01120C1Ev();
+extern void _ZN7ee01120D1Ev();
+Name_Map name_map_ee01120[] = {
+  NSPAIR(_ZN7ee01120C1Ev),
+  NSPAIR(_ZN7ee01120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd1120;
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern  VTBL_ENTRY _ZTV6dd1120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1120[];
+static Base_Class bases_ee01120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee01120[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee01120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee01120[0]),
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee01120[0]),
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee01120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee01120[];
+static  VTBL_ENTRY _tg__ZTV6dd1120__7ee01120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd1120__7ee01120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd1120__7ee01120[] = {
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee01120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee01120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee01120[] = {
+  {&(_ZTV7ee01120[4]),  4,11},
+  {&(_tg__ZTV6dd1120__7ee01120[4]),  4,4},
+  {&(_tg__ZTV5cc120__6dd1120__7ee01120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd1120__7ee01120[3]),  3,4},
+  {&(_ZTV7ee01120[7]),  7,11},
+  {&(_ZTV7ee01120[10]),  10,11},
+  {&(_tg__ZTV5cc120__7ee01120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee01120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee01120[];
+extern  VTBL_ENTRY _ZTV7ee01120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee01120[];
+Class_Descriptor cd_ee01120 = {  "ee01120", // class name
+  bases_ee01120, 4,
+  &(vtc_ee01120[0]), // expected_vtbl_contents
+  &(vtt_ee01120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee01120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee01120),11, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee01120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee11120  : virtual dd1120 {
+  int e;
+  ~ee11120(); // tgen
+  ee11120(); // tgen
+};
+//SIG(1 ee11120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} Fi}
+
+
+ee11120 ::~ee11120(){ note_dtor("ee11120", this);} // tgen
+ee11120 ::ee11120(){ note_ctor("ee11120", this);} // tgen
+
+static void Test_ee11120()
+{
+  extern Class_Descriptor cd_ee11120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee11120, buf);
+    ee11120 *dp, &lv = *(dp=new (buf) ee11120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee11120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee11120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee11120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee11120");
+    check_base_class_offset(lv, (cc120*)(dd1120*), ABISELECT(32,16), "ee11120");
+    check_base_class_offset(lv, (dd1120*), ABISELECT(16,8), "ee11120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee11120.e");
+    test_class_info(&lv, &cd_ee11120);
+    dp->~ee11120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee11120(Test_ee11120, "ee11120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee11120C1Ev();
+extern void _ZN7ee11120D1Ev();
+Name_Map name_map_ee11120[] = {
+  NSPAIR(_ZN7ee11120C1Ev),
+  NSPAIR(_ZN7ee11120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd1120;
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern  VTBL_ENTRY _ZTV6dd1120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1120[];
+static Base_Class bases_ee11120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee11120[];
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee11120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee11120[0]),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee11120[0]),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee11120[0]),
+  0,
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee11120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee11120[];
+static  VTBL_ENTRY _tg__ZTV6dd1120__7ee11120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd1120__7ee11120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd1120__7ee11120[] = {
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee11120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee11120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee11120[] = {
+  {&(_ZTV7ee11120[5]),  5,16},
+  {&(_ZTV7ee11120[9]),  9,16},
+  {&(_ZTV7ee11120[12]),  12,16},
+  {&(_ZTV7ee11120[15]),  15,16},
+  {&(_tg__ZTV6dd1120__7ee11120[4]),  4,4},
+  {&(_tg__ZTV5cc120__6dd1120__7ee11120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd1120__7ee11120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee11120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee11120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee11120[];
+extern  VTBL_ENTRY _ZTV7ee11120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee11120[];
+Class_Descriptor cd_ee11120 = {  "ee11120", // class name
+  bases_ee11120, 4,
+  &(vtc_ee11120[0]), // expected_vtbl_contents
+  &(vtt_ee11120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee11120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee11120),16, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee11120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee21120  : dd1120 {
+  int e;
+  virtual void  foo(); // _ZN7ee211203fooEv
+  ~ee21120(); // tgen
+  ee21120(); // tgen
+};
+//SIG(1 ee21120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee21120 ::foo(){vfunc_called(this, "_ZN7ee211203fooEv");}
+ee21120 ::~ee21120(){ note_dtor("ee21120", this);} // tgen
+ee21120 ::ee21120(){ note_ctor("ee21120", this);} // tgen
+
+static void Test_ee21120()
+{
+  extern Class_Descriptor cd_ee21120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee21120, buf);
+    ee21120 *dp, &lv = *(dp=new (buf) ee21120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee21120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee21120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee21120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee21120");
+    check_base_class_offset(lv, (cc120*)(dd1120*), ABISELECT(16,12), "ee21120");
+    check_base_class_offset(lv, (dd1120*), 0, "ee21120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee21120.e");
+    test_class_info(&lv, &cd_ee21120);
+    dp->~ee21120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee21120(Test_ee21120, "ee21120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee21120C1Ev();
+extern void _ZN7ee21120D1Ev();
+Name_Map name_map_ee21120[] = {
+  NSPAIR(_ZN7ee21120C1Ev),
+  NSPAIR(_ZN7ee21120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd1120;
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern  VTBL_ENTRY _ZTV6dd1120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1120[];
+static Base_Class bases_ee21120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee21120[];
+extern void _ZN7ee211203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee211203fooEv,_ZTv0_n12_N7ee211203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee211203fooEv,_ZThn20_N7ee211203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee21120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee21120[0]),
+  (VTBL_ENTRY)&_ZN7ee211203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee21120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee21120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee211203fooEv,_ZTv0_n12_N7ee211203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee21120[];
+static  VTBL_ENTRY _tg__ZTV6dd1120__7ee21120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd1120__7ee21120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd1120__7ee21120[] = {
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee21120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee21120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee21120[] = {
+  {&(_ZTV7ee21120[4]),  4,12},
+  {&(_tg__ZTV6dd1120__7ee21120[4]),  4,4},
+  {&(_tg__ZTV5cc120__6dd1120__7ee21120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd1120__7ee21120[3]),  3,4},
+  {&(_ZTV7ee21120[8]),  8,12},
+  {&(_ZTV7ee21120[11]),  11,12},
+  {&(_tg__ZTV5cc120__7ee21120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee21120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee21120[];
+extern  VTBL_ENTRY _ZTV7ee21120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee21120[];
+static VTBL_ENTRY alt_thunk_names42[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee211203fooEv,_ZTv0_n12_N7ee211203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee211203fooEv,_ZThn20_N7ee211203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee21120 = {  "ee21120", // class name
+  bases_ee21120, 4,
+  &(vtc_ee21120[0]), // expected_vtbl_contents
+  &(vtt_ee21120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee21120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee21120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee21120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names42,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee31120  : virtual dd1120 {
+  int e;
+  virtual void  foo(); // _ZN7ee311203fooEv
+  ~ee31120(); // tgen
+  ee31120(); // tgen
+};
+//SIG(1 ee31120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee31120 ::foo(){vfunc_called(this, "_ZN7ee311203fooEv");}
+ee31120 ::~ee31120(){ note_dtor("ee31120", this);} // tgen
+ee31120 ::ee31120(){ note_ctor("ee31120", this);} // tgen
+
+static void Test_ee31120()
+{
+  extern Class_Descriptor cd_ee31120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee31120, buf);
+    ee31120 *dp, &lv = *(dp=new (buf) ee31120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee31120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee31120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee31120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee31120");
+    check_base_class_offset(lv, (cc120*)(dd1120*), ABISELECT(32,16), "ee31120");
+    check_base_class_offset(lv, (dd1120*), ABISELECT(16,8), "ee31120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee31120.e");
+    test_class_info(&lv, &cd_ee31120);
+    dp->~ee31120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee31120(Test_ee31120, "ee31120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee31120C1Ev();
+extern void _ZN7ee31120D1Ev();
+Name_Map name_map_ee31120[] = {
+  NSPAIR(_ZN7ee31120C1Ev),
+  NSPAIR(_ZN7ee31120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd1120;
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern  VTBL_ENTRY _ZTV6dd1120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1120[];
+static Base_Class bases_ee31120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee31120[];
+extern void _ZN7ee311203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee311203fooEv,_ZTv0_n12_N7ee311203fooEv)();
+extern void ABISELECT(_ZThn48_N7ee311203fooEv,_ZThn24_N7ee311203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee31120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee31120[0]),
+  (VTBL_ENTRY)&_ZN7ee311203fooEv,
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee31120[0]),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee31120[0]),
+  ABISELECT(-48,-24),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee31120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee311203fooEv,_ZTv0_n12_N7ee311203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee31120[];
+static  VTBL_ENTRY _tg__ZTV6dd1120__7ee31120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd1120__7ee31120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd1120__7ee31120[] = {
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee31120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee31120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee31120[] = {
+  {&(_ZTV7ee31120[5]),  5,17},
+  {&(_ZTV7ee31120[10]),  10,17},
+  {&(_ZTV7ee31120[13]),  13,17},
+  {&(_ZTV7ee31120[16]),  16,17},
+  {&(_tg__ZTV6dd1120__7ee31120[4]),  4,4},
+  {&(_tg__ZTV5cc120__6dd1120__7ee31120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd1120__7ee31120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee31120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee31120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee31120[];
+extern  VTBL_ENTRY _ZTV7ee31120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee31120[];
+static VTBL_ENTRY alt_thunk_names43[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee311203fooEv,_ZTv0_n12_N7ee311203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N7ee311203fooEv,_ZThn24_N7ee311203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee31120 = {  "ee31120", // class name
+  bases_ee31120, 4,
+  &(vtc_ee31120[0]), // expected_vtbl_contents
+  &(vtt_ee31120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee31120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee31120),17, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee31120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names43,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee41120  : dd1120 {
+  int e;
+  virtual void  bar(); // _ZN7ee411203barEv
+  ~ee41120(); // tgen
+  ee41120(); // tgen
+};
+//SIG(1 ee41120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee41120 ::bar(){vfunc_called(this, "_ZN7ee411203barEv");}
+ee41120 ::~ee41120(){ note_dtor("ee41120", this);} // tgen
+ee41120 ::ee41120(){ note_ctor("ee41120", this);} // tgen
+
+static void Test_ee41120()
+{
+  extern Class_Descriptor cd_ee41120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee41120, buf);
+    ee41120 *dp, &lv = *(dp=new (buf) ee41120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee41120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee41120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee41120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee41120");
+    check_base_class_offset(lv, (cc120*)(dd1120*), ABISELECT(16,12), "ee41120");
+    check_base_class_offset(lv, (dd1120*), 0, "ee41120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee41120.e");
+    test_class_info(&lv, &cd_ee41120);
+    dp->~ee41120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee41120(Test_ee41120, "ee41120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee41120C1Ev();
+extern void _ZN7ee41120D1Ev();
+Name_Map name_map_ee41120[] = {
+  NSPAIR(_ZN7ee41120C1Ev),
+  NSPAIR(_ZN7ee41120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd1120;
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern  VTBL_ENTRY _ZTV6dd1120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1120[];
+static Base_Class bases_ee41120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee41120[];
+extern void _ZN7ee411203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee41120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee41120[0]),
+  (VTBL_ENTRY)&_ZN7ee411203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee41120[0]),
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee41120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee41120[];
+static  VTBL_ENTRY _tg__ZTV6dd1120__7ee41120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd1120__7ee41120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd1120__7ee41120[] = {
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee41120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee41120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee41120[] = {
+  {&(_ZTV7ee41120[4]),  4,12},
+  {&(_tg__ZTV6dd1120__7ee41120[4]),  4,4},
+  {&(_tg__ZTV5cc120__6dd1120__7ee41120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd1120__7ee41120[3]),  3,4},
+  {&(_ZTV7ee41120[8]),  8,12},
+  {&(_ZTV7ee41120[11]),  11,12},
+  {&(_tg__ZTV5cc120__7ee41120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee41120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee41120[];
+extern  VTBL_ENTRY _ZTV7ee41120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee41120[];
+Class_Descriptor cd_ee41120 = {  "ee41120", // class name
+  bases_ee41120, 4,
+  &(vtc_ee41120[0]), // expected_vtbl_contents
+  &(vtt_ee41120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee41120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee41120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee41120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee51120  : virtual dd1120 {
+  int e;
+  virtual void  bar(); // _ZN7ee511203barEv
+  ~ee51120(); // tgen
+  ee51120(); // tgen
+};
+//SIG(1 ee51120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} Fi} v1 Fi}
+
+
+void  ee51120 ::bar(){vfunc_called(this, "_ZN7ee511203barEv");}
+ee51120 ::~ee51120(){ note_dtor("ee51120", this);} // tgen
+ee51120 ::ee51120(){ note_ctor("ee51120", this);} // tgen
+
+static void Test_ee51120()
+{
+  extern Class_Descriptor cd_ee51120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee51120, buf);
+    ee51120 *dp, &lv = *(dp=new (buf) ee51120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee51120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee51120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee51120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee51120");
+    check_base_class_offset(lv, (cc120*)(dd1120*), ABISELECT(32,16), "ee51120");
+    check_base_class_offset(lv, (dd1120*), ABISELECT(16,8), "ee51120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee51120.e");
+    test_class_info(&lv, &cd_ee51120);
+    dp->~ee51120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee51120(Test_ee51120, "ee51120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee51120C1Ev();
+extern void _ZN7ee51120D1Ev();
+Name_Map name_map_ee51120[] = {
+  NSPAIR(_ZN7ee51120C1Ev),
+  NSPAIR(_ZN7ee51120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd1120;
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern  VTBL_ENTRY _ZTV6dd1120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1120[];
+static Base_Class bases_ee51120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee51120[];
+extern void _ZN7ee511203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee51120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee51120[0]),
+  (VTBL_ENTRY)&_ZN7ee511203barEv,
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee51120[0]),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee51120[0]),
+  0,
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee51120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee51120[];
+static  VTBL_ENTRY _tg__ZTV6dd1120__7ee51120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd1120__7ee51120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd1120__7ee51120[] = {
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee51120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee51120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee51120[] = {
+  {&(_ZTV7ee51120[5]),  5,17},
+  {&(_ZTV7ee51120[10]),  10,17},
+  {&(_ZTV7ee51120[13]),  13,17},
+  {&(_ZTV7ee51120[16]),  16,17},
+  {&(_tg__ZTV6dd1120__7ee51120[4]),  4,4},
+  {&(_tg__ZTV5cc120__6dd1120__7ee51120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd1120__7ee51120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee51120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee51120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee51120[];
+extern  VTBL_ENTRY _ZTV7ee51120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee51120[];
+Class_Descriptor cd_ee51120 = {  "ee51120", // class name
+  bases_ee51120, 4,
+  &(vtc_ee51120[0]), // expected_vtbl_contents
+  &(vtt_ee51120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee51120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee51120),17, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee51120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee61120  : dd1120 {
+  int e;
+  virtual void  foo(); // _ZN7ee611203fooEv
+  virtual void  bar(); // _ZN7ee611203barEv
+  ~ee61120(); // tgen
+  ee61120(); // tgen
+};
+//SIG(1 ee61120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 v2 Fi}
+
+
+void  ee61120 ::foo(){vfunc_called(this, "_ZN7ee611203fooEv");}
+void  ee61120 ::bar(){vfunc_called(this, "_ZN7ee611203barEv");}
+ee61120 ::~ee61120(){ note_dtor("ee61120", this);} // tgen
+ee61120 ::ee61120(){ note_ctor("ee61120", this);} // tgen
+
+static void Test_ee61120()
+{
+  extern Class_Descriptor cd_ee61120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee61120, buf);
+    ee61120 *dp, &lv = *(dp=new (buf) ee61120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee61120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee61120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee61120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee61120");
+    check_base_class_offset(lv, (cc120*)(dd1120*), ABISELECT(16,12), "ee61120");
+    check_base_class_offset(lv, (dd1120*), 0, "ee61120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee61120.e");
+    test_class_info(&lv, &cd_ee61120);
+    dp->~ee61120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee61120(Test_ee61120, "ee61120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee61120C1Ev();
+extern void _ZN7ee61120D1Ev();
+Name_Map name_map_ee61120[] = {
+  NSPAIR(_ZN7ee61120C1Ev),
+  NSPAIR(_ZN7ee61120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd1120;
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern  VTBL_ENTRY _ZTV6dd1120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1120[];
+static Base_Class bases_ee61120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee61120[];
+extern void _ZN7ee611203fooEv();
+extern void _ZN7ee611203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee611203fooEv,_ZTv0_n12_N7ee611203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee611203fooEv,_ZThn20_N7ee611203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee61120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee61120[0]),
+  (VTBL_ENTRY)&_ZN7ee611203fooEv,
+  (VTBL_ENTRY)&_ZN7ee611203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee61120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee61120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee611203fooEv,_ZTv0_n12_N7ee611203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee61120[];
+static  VTBL_ENTRY _tg__ZTV6dd1120__7ee61120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd1120__7ee61120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd1120__7ee61120[] = {
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee61120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee61120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee61120[] = {
+  {&(_ZTV7ee61120[4]),  4,13},
+  {&(_tg__ZTV6dd1120__7ee61120[4]),  4,4},
+  {&(_tg__ZTV5cc120__6dd1120__7ee61120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd1120__7ee61120[3]),  3,4},
+  {&(_ZTV7ee61120[9]),  9,13},
+  {&(_ZTV7ee61120[12]),  12,13},
+  {&(_tg__ZTV5cc120__7ee61120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee61120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee61120[];
+extern  VTBL_ENTRY _ZTV7ee61120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee61120[];
+static VTBL_ENTRY alt_thunk_names44[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee611203fooEv,_ZTv0_n12_N7ee611203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee611203fooEv,_ZThn20_N7ee611203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee61120 = {  "ee61120", // class name
+  bases_ee61120, 4,
+  &(vtc_ee61120[0]), // expected_vtbl_contents
+  &(vtt_ee61120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee61120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee61120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee61120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names44,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee71120  : virtual dd1120 {
+  int e;
+  virtual void  foo(); // _ZN7ee711203fooEv
+  virtual void  bar(); // _ZN7ee711203barEv
+  ~ee71120(); // tgen
+  ee71120(); // tgen
+};
+//SIG(1 ee71120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} Fi} v1 v2 Fi}
+
+
+void  ee71120 ::foo(){vfunc_called(this, "_ZN7ee711203fooEv");}
+void  ee71120 ::bar(){vfunc_called(this, "_ZN7ee711203barEv");}
+ee71120 ::~ee71120(){ note_dtor("ee71120", this);} // tgen
+ee71120 ::ee71120(){ note_ctor("ee71120", this);} // tgen
+
+static void Test_ee71120()
+{
+  extern Class_Descriptor cd_ee71120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee71120, buf);
+    ee71120 *dp, &lv = *(dp=new (buf) ee71120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee71120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee71120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee71120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee71120");
+    check_base_class_offset(lv, (cc120*)(dd1120*), ABISELECT(32,16), "ee71120");
+    check_base_class_offset(lv, (dd1120*), ABISELECT(16,8), "ee71120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee71120.e");
+    test_class_info(&lv, &cd_ee71120);
+    dp->~ee71120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee71120(Test_ee71120, "ee71120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee71120C1Ev();
+extern void _ZN7ee71120D1Ev();
+Name_Map name_map_ee71120[] = {
+  NSPAIR(_ZN7ee71120C1Ev),
+  NSPAIR(_ZN7ee71120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd1120;
+extern VTBL_ENTRY _ZTI6dd1120[];
+extern  VTBL_ENTRY _ZTV6dd1120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1120[];
+static Base_Class bases_ee71120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    14, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1120,    ABISELECT(16,8), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee71120[];
+extern void _ZN7ee711203fooEv();
+extern void _ZN7ee711203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee711203fooEv,_ZTv0_n12_N7ee711203fooEv)();
+extern void ABISELECT(_ZThn48_N7ee711203fooEv,_ZThn24_N7ee711203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee71120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee71120[0]),
+  (VTBL_ENTRY)&_ZN7ee711203fooEv,
+  (VTBL_ENTRY)&_ZN7ee711203barEv,
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee71120[0]),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee71120[0]),
+  ABISELECT(-48,-24),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee71120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee711203fooEv,_ZTv0_n12_N7ee711203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee71120[];
+static  VTBL_ENTRY _tg__ZTV6dd1120__7ee71120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd1120__7ee71120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd1120__7ee71120[] = {
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd1120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee71120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee71120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee71120[] = {
+  {&(_ZTV7ee71120[5]),  5,18},
+  {&(_ZTV7ee71120[11]),  11,18},
+  {&(_ZTV7ee71120[14]),  14,18},
+  {&(_ZTV7ee71120[17]),  17,18},
+  {&(_tg__ZTV6dd1120__7ee71120[4]),  4,4},
+  {&(_tg__ZTV5cc120__6dd1120__7ee71120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd1120__7ee71120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee71120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee71120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee71120[];
+extern  VTBL_ENTRY _ZTV7ee71120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee71120[];
+static VTBL_ENTRY alt_thunk_names45[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee711203fooEv,_ZTv0_n12_N7ee711203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N7ee711203fooEv,_ZThn24_N7ee711203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee71120 = {  "ee71120", // class name
+  bases_ee71120, 4,
+  &(vtc_ee71120[0]), // expected_vtbl_contents
+  &(vtt_ee71120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee71120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee71120),18, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee71120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names45,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd2120  : cc120 {
+  int d;
+  virtual void  foo(); // _ZN6dd21203fooEv
+  ~dd2120(); // tgen
+  dd2120(); // tgen
+};
+//SIG(-1 dd2120) C1{ BC2{ VBC3{ BC4{ Fi} v1 Fi} Fi} v1 Fi}
+
+
+void  dd2120 ::foo(){vfunc_called(this, "_ZN6dd21203fooEv");}
+dd2120 ::~dd2120(){ note_dtor("dd2120", this);} // tgen
+dd2120 ::dd2120(){ note_ctor("dd2120", this);} // tgen
+
+static void Test_dd2120()
+{
+  extern Class_Descriptor cd_dd2120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_dd2120, buf);
+    dd2120 *dp, &lv = *(dp=new (buf) dd2120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(dd2120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd2120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(24,16), "dd2120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(16,12), "dd2120");
+    check_base_class_offset(lv, (cc120*), 0, "dd2120");
+    check_field_offset(lv, d, ABISELECT(12,8), "dd2120.d");
+    test_class_info(&lv, &cd_dd2120);
+    dp->~dd2120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd2120(Test_dd2120, "dd2120", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd2120C1Ev();
+extern void _ZN6dd2120D1Ev();
+Name_Map name_map_dd2120[] = {
+  NSPAIR(_ZN6dd2120C1Ev),
+  NSPAIR(_ZN6dd2120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+static Base_Class bases_dd2120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern void _ZN6dd21203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_dd2120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+extern VTBL_ENTRY _ZTV6dd2120[];
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd2120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__6dd2120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_dd2120[] = {
+  {&(_ZTV6dd2120[3]),  3,8},
+  {&(_tg__ZTV5cc120__6dd2120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__6dd2120[3]),  3,4},
+  {&(_ZTV6dd2120[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern  VTBL_ENTRY _ZTV6dd2120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd2120[];
+static VTBL_ENTRY alt_thunk_names46[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_dd2120 = {  "dd2120", // class name
+  bases_dd2120, 3,
+  &(vtc_dd2120[0]), // expected_vtbl_contents
+  &(vtt_dd2120[0]), // expected_vtt_contents
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI6dd2120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd2120),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd2120),4, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names46,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee02120  : dd2120 {
+  int e;
+  ~ee02120(); // tgen
+  ee02120(); // tgen
+};
+//SIG(1 ee02120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} Fi}
+
+
+ee02120 ::~ee02120(){ note_dtor("ee02120", this);} // tgen
+ee02120 ::ee02120(){ note_ctor("ee02120", this);} // tgen
+
+static void Test_ee02120()
+{
+  extern Class_Descriptor cd_ee02120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee02120, buf);
+    ee02120 *dp, &lv = *(dp=new (buf) ee02120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee02120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee02120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee02120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd2120*), ABISELECT(24,16), "ee02120");
+    check_base_class_offset(lv, (cc120*)(dd2120*), 0, "ee02120");
+    check_base_class_offset(lv, (dd2120*), 0, "ee02120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee02120.e");
+    test_class_info(&lv, &cd_ee02120);
+    dp->~ee02120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee02120(Test_ee02120, "ee02120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee02120C1Ev();
+extern void _ZN7ee02120D1Ev();
+Name_Map name_map_ee02120[] = {
+  NSPAIR(_ZN7ee02120C1Ev),
+  NSPAIR(_ZN7ee02120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd2120;
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern  VTBL_ENTRY _ZTV6dd2120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd2120[];
+static Base_Class bases_ee02120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee02120[];
+extern void _ZN6dd21203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee02120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee02120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee02120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee02120[];
+extern void _ZN6dd21203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd2120__7ee02120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd2120__7ee02120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd2120__7ee02120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd2120__7ee02120[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+static  VTT_ENTRY vtt_ee02120[] = {
+  {&(_ZTV7ee02120[3]),  3,8},
+  {&(_tg__ZTV6dd2120__7ee02120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd2120__7ee02120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd2120__7ee02120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd2120__7ee02120[3]),  3,4},
+  {&(_ZTV7ee02120[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee02120[];
+extern  VTBL_ENTRY _ZTV7ee02120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee02120[];
+static VTBL_ENTRY alt_thunk_names47[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee02120 = {  "ee02120", // class name
+  bases_ee02120, 4,
+  &(vtc_ee02120[0]), // expected_vtbl_contents
+  &(vtt_ee02120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee02120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee02120),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee02120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names47,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee12120  : virtual dd2120 {
+  int e;
+  ~ee12120(); // tgen
+  ee12120(); // tgen
+};
+//SIG(1 ee12120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} Fi}
+
+
+ee12120 ::~ee12120(){ note_dtor("ee12120", this);} // tgen
+ee12120 ::ee12120(){ note_ctor("ee12120", this);} // tgen
+
+static void Test_ee12120()
+{
+  extern Class_Descriptor cd_ee12120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee12120, buf);
+    ee12120 *dp, &lv = *(dp=new (buf) ee12120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee12120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee12120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee12120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd2120*), ABISELECT(32,20), "ee12120");
+    check_base_class_offset(lv, (cc120*)(dd2120*), ABISELECT(16,8), "ee12120");
+    check_base_class_offset(lv, (dd2120*), ABISELECT(16,8), "ee12120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee12120.e");
+    test_class_info(&lv, &cd_ee12120);
+    dp->~ee12120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee12120(Test_ee12120, "ee12120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee12120C1Ev();
+extern void _ZN7ee12120D1Ev();
+Name_Map name_map_ee12120[] = {
+  NSPAIR(_ZN7ee12120C1Ev),
+  NSPAIR(_ZN7ee12120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd2120;
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern  VTBL_ENTRY _ZTV6dd2120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd2120[];
+static Base_Class bases_ee12120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2120,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee12120[];
+extern void _ZN6dd21203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee12120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee12120[0]),
+  0,
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee12120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee12120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee12120[];
+extern void _ZN6dd21203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd2120__7ee12120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd2120__7ee12120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd2120__7ee12120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd2120__7ee12120[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+static  VTT_ENTRY vtt_ee12120[] = {
+  {&(_ZTV7ee12120[4]),  4,13},
+  {&(_ZTV7ee12120[8]),  8,13},
+  {&(_ZTV7ee12120[12]),  12,13},
+  {&(_tg__ZTV6dd2120__7ee12120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd2120__7ee12120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd2120__7ee12120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd2120__7ee12120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee12120[];
+extern  VTBL_ENTRY _ZTV7ee12120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee12120[];
+static VTBL_ENTRY alt_thunk_names48[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee12120 = {  "ee12120", // class name
+  bases_ee12120, 4,
+  &(vtc_ee12120[0]), // expected_vtbl_contents
+  &(vtt_ee12120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee12120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee12120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee12120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names48,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee22120  : dd2120 {
+  int e;
+  virtual void  foo(); // _ZN7ee221203fooEv
+  ~ee22120(); // tgen
+  ee22120(); // tgen
+};
+//SIG(1 ee22120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee22120 ::foo(){vfunc_called(this, "_ZN7ee221203fooEv");}
+ee22120 ::~ee22120(){ note_dtor("ee22120", this);} // tgen
+ee22120 ::ee22120(){ note_ctor("ee22120", this);} // tgen
+
+static void Test_ee22120()
+{
+  extern Class_Descriptor cd_ee22120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee22120, buf);
+    ee22120 *dp, &lv = *(dp=new (buf) ee22120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee22120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee22120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee22120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd2120*), ABISELECT(24,16), "ee22120");
+    check_base_class_offset(lv, (cc120*)(dd2120*), 0, "ee22120");
+    check_base_class_offset(lv, (dd2120*), 0, "ee22120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee22120.e");
+    test_class_info(&lv, &cd_ee22120);
+    dp->~ee22120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee22120(Test_ee22120, "ee22120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee22120C1Ev();
+extern void _ZN7ee22120D1Ev();
+Name_Map name_map_ee22120[] = {
+  NSPAIR(_ZN7ee22120C1Ev),
+  NSPAIR(_ZN7ee22120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd2120;
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern  VTBL_ENTRY _ZTV6dd2120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd2120[];
+static Base_Class bases_ee22120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee22120[];
+extern void _ZN7ee221203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee221203fooEv,_ZTv0_n12_N7ee221203fooEv)();
+extern void ABISELECT(_ZThn24_N7ee221203fooEv,_ZThn16_N7ee221203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee22120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee22120[0]),
+  (VTBL_ENTRY)&_ZN7ee221203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee22120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee221203fooEv,_ZTv0_n12_N7ee221203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee22120[];
+extern void _ZN6dd21203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd2120__7ee22120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd2120__7ee22120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd2120__7ee22120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd2120__7ee22120[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+static  VTT_ENTRY vtt_ee22120[] = {
+  {&(_ZTV7ee22120[3]),  3,8},
+  {&(_tg__ZTV6dd2120__7ee22120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd2120__7ee22120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd2120__7ee22120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd2120__7ee22120[3]),  3,4},
+  {&(_ZTV7ee22120[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee22120[];
+extern  VTBL_ENTRY _ZTV7ee22120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee22120[];
+static VTBL_ENTRY alt_thunk_names49[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee221203fooEv,_ZTv0_n12_N7ee221203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N7ee221203fooEv,_ZThn16_N7ee221203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee22120 = {  "ee22120", // class name
+  bases_ee22120, 4,
+  &(vtc_ee22120[0]), // expected_vtbl_contents
+  &(vtt_ee22120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee22120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee22120),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee22120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names49,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee32120  : virtual dd2120 {
+  int e;
+  virtual void  foo(); // _ZN7ee321203fooEv
+  ~ee32120(); // tgen
+  ee32120(); // tgen
+};
+//SIG(1 ee32120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee32120 ::foo(){vfunc_called(this, "_ZN7ee321203fooEv");}
+ee32120 ::~ee32120(){ note_dtor("ee32120", this);} // tgen
+ee32120 ::ee32120(){ note_ctor("ee32120", this);} // tgen
+
+static void Test_ee32120()
+{
+  extern Class_Descriptor cd_ee32120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee32120, buf);
+    ee32120 *dp, &lv = *(dp=new (buf) ee32120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee32120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee32120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee32120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd2120*), ABISELECT(32,20), "ee32120");
+    check_base_class_offset(lv, (cc120*)(dd2120*), ABISELECT(16,8), "ee32120");
+    check_base_class_offset(lv, (dd2120*), ABISELECT(16,8), "ee32120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee32120.e");
+    test_class_info(&lv, &cd_ee32120);
+    dp->~ee32120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee32120(Test_ee32120, "ee32120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee32120C1Ev();
+extern void _ZN7ee32120D1Ev();
+Name_Map name_map_ee32120[] = {
+  NSPAIR(_ZN7ee32120C1Ev),
+  NSPAIR(_ZN7ee32120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd2120;
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern  VTBL_ENTRY _ZTV6dd2120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd2120[];
+static Base_Class bases_ee32120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee32120[];
+extern void _ZN7ee321203fooEv();
+extern void ABISELECT(_ZTv0_n32_N7ee321203fooEv,_ZTv0_n16_N7ee321203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee321203fooEv,_ZThn8_N7ee321203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee321203fooEv,_ZTv0_n12_N7ee321203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee321203fooEv,_ZThn20_N7ee321203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee32120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee32120[0]),
+  (VTBL_ENTRY)&_ZN7ee321203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee32120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee321203fooEv,_ZTv0_n16_N7ee321203fooEv),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee32120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee321203fooEv,_ZTv0_n12_N7ee321203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee32120[];
+extern void _ZN6dd21203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd2120__7ee32120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd2120__7ee32120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd2120__7ee32120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd2120__7ee32120[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+static  VTT_ENTRY vtt_ee32120[] = {
+  {&(_ZTV7ee32120[4]),  4,14},
+  {&(_ZTV7ee32120[9]),  9,14},
+  {&(_ZTV7ee32120[13]),  13,14},
+  {&(_tg__ZTV6dd2120__7ee32120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd2120__7ee32120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd2120__7ee32120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd2120__7ee32120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee32120[];
+extern  VTBL_ENTRY _ZTV7ee32120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee32120[];
+static VTBL_ENTRY alt_thunk_names50[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee321203fooEv,_ZTv0_n12_N7ee321203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee321203fooEv,_ZThn20_N7ee321203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee321203fooEv,_ZTv0_n16_N7ee321203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee321203fooEv,_ZThn8_N7ee321203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee32120 = {  "ee32120", // class name
+  bases_ee32120, 4,
+  &(vtc_ee32120[0]), // expected_vtbl_contents
+  &(vtt_ee32120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee32120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee32120),14, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee32120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names50,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee42120  : dd2120 {
+  int e;
+  virtual void  bar(); // _ZN7ee421203barEv
+  ~ee42120(); // tgen
+  ee42120(); // tgen
+};
+//SIG(1 ee42120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee42120 ::bar(){vfunc_called(this, "_ZN7ee421203barEv");}
+ee42120 ::~ee42120(){ note_dtor("ee42120", this);} // tgen
+ee42120 ::ee42120(){ note_ctor("ee42120", this);} // tgen
+
+static void Test_ee42120()
+{
+  extern Class_Descriptor cd_ee42120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee42120, buf);
+    ee42120 *dp, &lv = *(dp=new (buf) ee42120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee42120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee42120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee42120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd2120*), ABISELECT(24,16), "ee42120");
+    check_base_class_offset(lv, (cc120*)(dd2120*), 0, "ee42120");
+    check_base_class_offset(lv, (dd2120*), 0, "ee42120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee42120.e");
+    test_class_info(&lv, &cd_ee42120);
+    dp->~ee42120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee42120(Test_ee42120, "ee42120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee42120C1Ev();
+extern void _ZN7ee42120D1Ev();
+Name_Map name_map_ee42120[] = {
+  NSPAIR(_ZN7ee42120C1Ev),
+  NSPAIR(_ZN7ee42120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd2120;
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern  VTBL_ENTRY _ZTV6dd2120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd2120[];
+static Base_Class bases_ee42120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee42120[];
+extern void _ZN6dd21203fooEv();
+extern void _ZN7ee421203barEv();
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee42120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee42120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+  (VTBL_ENTRY)&_ZN7ee421203barEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee42120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee42120[];
+extern void _ZN6dd21203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd2120__7ee42120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd2120__7ee42120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd2120__7ee42120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd2120__7ee42120[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+static  VTT_ENTRY vtt_ee42120[] = {
+  {&(_ZTV7ee42120[3]),  3,9},
+  {&(_tg__ZTV6dd2120__7ee42120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd2120__7ee42120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd2120__7ee42120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd2120__7ee42120[3]),  3,4},
+  {&(_ZTV7ee42120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee42120[];
+extern  VTBL_ENTRY _ZTV7ee42120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee42120[];
+static VTBL_ENTRY alt_thunk_names51[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee42120 = {  "ee42120", // class name
+  bases_ee42120, 4,
+  &(vtc_ee42120[0]), // expected_vtbl_contents
+  &(vtt_ee42120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee42120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee42120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee42120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names51,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee52120  : virtual dd2120 {
+  int e;
+  virtual void  bar(); // _ZN7ee521203barEv
+  ~ee52120(); // tgen
+  ee52120(); // tgen
+};
+//SIG(1 ee52120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee52120 ::bar(){vfunc_called(this, "_ZN7ee521203barEv");}
+ee52120 ::~ee52120(){ note_dtor("ee52120", this);} // tgen
+ee52120 ::ee52120(){ note_ctor("ee52120", this);} // tgen
+
+static void Test_ee52120()
+{
+  extern Class_Descriptor cd_ee52120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee52120, buf);
+    ee52120 *dp, &lv = *(dp=new (buf) ee52120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee52120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee52120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee52120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd2120*), ABISELECT(32,20), "ee52120");
+    check_base_class_offset(lv, (cc120*)(dd2120*), ABISELECT(16,8), "ee52120");
+    check_base_class_offset(lv, (dd2120*), ABISELECT(16,8), "ee52120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee52120.e");
+    test_class_info(&lv, &cd_ee52120);
+    dp->~ee52120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee52120(Test_ee52120, "ee52120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee52120C1Ev();
+extern void _ZN7ee52120D1Ev();
+Name_Map name_map_ee52120[] = {
+  NSPAIR(_ZN7ee52120C1Ev),
+  NSPAIR(_ZN7ee52120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd2120;
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern  VTBL_ENTRY _ZTV6dd2120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd2120[];
+static Base_Class bases_ee52120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee52120[];
+extern void _ZN7ee521203barEv();
+extern void _ZN6dd21203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee52120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee52120[0]),
+  (VTBL_ENTRY)&_ZN7ee521203barEv,
+  0,
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee52120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee52120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee52120[];
+extern void _ZN6dd21203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd2120__7ee52120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd2120__7ee52120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd2120__7ee52120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd2120__7ee52120[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+static  VTT_ENTRY vtt_ee52120[] = {
+  {&(_ZTV7ee52120[4]),  4,14},
+  {&(_ZTV7ee52120[9]),  9,14},
+  {&(_ZTV7ee52120[13]),  13,14},
+  {&(_tg__ZTV6dd2120__7ee52120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd2120__7ee52120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd2120__7ee52120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd2120__7ee52120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee52120[];
+extern  VTBL_ENTRY _ZTV7ee52120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee52120[];
+static VTBL_ENTRY alt_thunk_names52[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee52120 = {  "ee52120", // class name
+  bases_ee52120, 4,
+  &(vtc_ee52120[0]), // expected_vtbl_contents
+  &(vtt_ee52120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee52120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee52120),14, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee52120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names52,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee62120  : dd2120 {
+  int e;
+  virtual void  foo(); // _ZN7ee621203fooEv
+  virtual void  bar(); // _ZN7ee621203barEv
+  ~ee62120(); // tgen
+  ee62120(); // tgen
+};
+//SIG(1 ee62120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee62120 ::foo(){vfunc_called(this, "_ZN7ee621203fooEv");}
+void  ee62120 ::bar(){vfunc_called(this, "_ZN7ee621203barEv");}
+ee62120 ::~ee62120(){ note_dtor("ee62120", this);} // tgen
+ee62120 ::ee62120(){ note_ctor("ee62120", this);} // tgen
+
+static void Test_ee62120()
+{
+  extern Class_Descriptor cd_ee62120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee62120, buf);
+    ee62120 *dp, &lv = *(dp=new (buf) ee62120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee62120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee62120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee62120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd2120*), ABISELECT(24,16), "ee62120");
+    check_base_class_offset(lv, (cc120*)(dd2120*), 0, "ee62120");
+    check_base_class_offset(lv, (dd2120*), 0, "ee62120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee62120.e");
+    test_class_info(&lv, &cd_ee62120);
+    dp->~ee62120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee62120(Test_ee62120, "ee62120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee62120C1Ev();
+extern void _ZN7ee62120D1Ev();
+Name_Map name_map_ee62120[] = {
+  NSPAIR(_ZN7ee62120C1Ev),
+  NSPAIR(_ZN7ee62120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd2120;
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern  VTBL_ENTRY _ZTV6dd2120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd2120[];
+static Base_Class bases_ee62120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee62120[];
+extern void _ZN7ee621203fooEv();
+extern void _ZN7ee621203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee621203fooEv,_ZTv0_n12_N7ee621203fooEv)();
+extern void ABISELECT(_ZThn24_N7ee621203fooEv,_ZThn16_N7ee621203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee62120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee62120[0]),
+  (VTBL_ENTRY)&_ZN7ee621203fooEv,
+  (VTBL_ENTRY)&_ZN7ee621203barEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee62120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee621203fooEv,_ZTv0_n12_N7ee621203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee62120[];
+extern void _ZN6dd21203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd2120__7ee62120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd2120__7ee62120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd2120__7ee62120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd2120__7ee62120[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+static  VTT_ENTRY vtt_ee62120[] = {
+  {&(_ZTV7ee62120[3]),  3,9},
+  {&(_tg__ZTV6dd2120__7ee62120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd2120__7ee62120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd2120__7ee62120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd2120__7ee62120[3]),  3,4},
+  {&(_ZTV7ee62120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee62120[];
+extern  VTBL_ENTRY _ZTV7ee62120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee62120[];
+static VTBL_ENTRY alt_thunk_names53[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd21203fooEv,_ZThn16_N6dd21203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee621203fooEv,_ZTv0_n12_N7ee621203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N7ee621203fooEv,_ZThn16_N7ee621203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee62120 = {  "ee62120", // class name
+  bases_ee62120, 4,
+  &(vtc_ee62120[0]), // expected_vtbl_contents
+  &(vtt_ee62120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee62120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee62120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee62120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names53,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee72120  : virtual dd2120 {
+  int e;
+  virtual void  foo(); // _ZN7ee721203fooEv
+  virtual void  bar(); // _ZN7ee721203barEv
+  ~ee72120(); // tgen
+  ee72120(); // tgen
+};
+//SIG(1 ee72120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee72120 ::foo(){vfunc_called(this, "_ZN7ee721203fooEv");}
+void  ee72120 ::bar(){vfunc_called(this, "_ZN7ee721203barEv");}
+ee72120 ::~ee72120(){ note_dtor("ee72120", this);} // tgen
+ee72120 ::ee72120(){ note_ctor("ee72120", this);} // tgen
+
+static void Test_ee72120()
+{
+  extern Class_Descriptor cd_ee72120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee72120, buf);
+    ee72120 *dp, &lv = *(dp=new (buf) ee72120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee72120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee72120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee72120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd2120*), ABISELECT(32,20), "ee72120");
+    check_base_class_offset(lv, (cc120*)(dd2120*), ABISELECT(16,8), "ee72120");
+    check_base_class_offset(lv, (dd2120*), ABISELECT(16,8), "ee72120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee72120.e");
+    test_class_info(&lv, &cd_ee72120);
+    dp->~ee72120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee72120(Test_ee72120, "ee72120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee72120C1Ev();
+extern void _ZN7ee72120D1Ev();
+Name_Map name_map_ee72120[] = {
+  NSPAIR(_ZN7ee72120C1Ev),
+  NSPAIR(_ZN7ee72120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd2120;
+extern VTBL_ENTRY _ZTI6dd2120[];
+extern  VTBL_ENTRY _ZTV6dd2120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd2120[];
+static Base_Class bases_ee72120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee72120[];
+extern void _ZN7ee721203fooEv();
+extern void _ZN7ee721203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee721203fooEv,_ZTv0_n16_N7ee721203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee721203fooEv,_ZThn8_N7ee721203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee721203fooEv,_ZTv0_n12_N7ee721203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee721203fooEv,_ZThn20_N7ee721203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee72120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee72120[0]),
+  (VTBL_ENTRY)&_ZN7ee721203fooEv,
+  (VTBL_ENTRY)&_ZN7ee721203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee72120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee721203fooEv,_ZTv0_n16_N7ee721203fooEv),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee72120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee721203fooEv,_ZTv0_n12_N7ee721203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee72120[];
+extern void _ZN6dd21203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd2120__7ee72120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&_ZN6dd21203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd2120__7ee72120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd2120__7ee72120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd2120__7ee72120[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd2120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv),
+};
+static  VTT_ENTRY vtt_ee72120[] = {
+  {&(_ZTV7ee72120[4]),  4,15},
+  {&(_ZTV7ee72120[10]),  10,15},
+  {&(_ZTV7ee72120[14]),  14,15},
+  {&(_tg__ZTV6dd2120__7ee72120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd2120__7ee72120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd2120__7ee72120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd2120__7ee72120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee72120[];
+extern  VTBL_ENTRY _ZTV7ee72120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee72120[];
+static VTBL_ENTRY alt_thunk_names54[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd21203fooEv,_ZTv0_n12_N6dd21203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd21203fooEv,_ZThn12_N6dd21203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee721203fooEv,_ZTv0_n12_N7ee721203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee721203fooEv,_ZThn20_N7ee721203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee721203fooEv,_ZTv0_n16_N7ee721203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee721203fooEv,_ZThn8_N7ee721203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee72120 = {  "ee72120", // class name
+  bases_ee72120, 4,
+  &(vtc_ee72120[0]), // expected_vtbl_contents
+  &(vtt_ee72120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee72120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee72120),15, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee72120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names54,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd3120  : virtual cc120 {
+  int d;
+  virtual void  foo(); // _ZN6dd31203fooEv
+  ~dd3120(); // tgen
+  dd3120(); // tgen
+};
+//SIG(-1 dd3120) C1{ VBC2{ VBC3{ BC4{ Fi} v1 Fi} Fi} v1 Fi}
+
+
+void  dd3120 ::foo(){vfunc_called(this, "_ZN6dd31203fooEv");}
+dd3120 ::~dd3120(){ note_dtor("dd3120", this);} // tgen
+dd3120 ::dd3120(){ note_ctor("dd3120", this);} // tgen
+
+static void Test_dd3120()
+{
+  extern Class_Descriptor cd_dd3120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,8)];
+    init_test(&cd_dd3120, buf);
+    dd3120 *dp, &lv = *(dp=new (buf) dd3120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,28), "sizeof(dd3120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd3120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,20), "dd3120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,16), "dd3120");
+    check_base_class_offset(lv, (cc120*), ABISELECT(16,8), "dd3120");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd3120.d");
+    test_class_info(&lv, &cd_dd3120);
+    dp->~dd3120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd3120(Test_dd3120, "dd3120", ABISELECT(48,28));
+
+#else // __cplusplus
+
+extern void _ZN6dd3120C1Ev();
+extern void _ZN6dd3120D1Ev();
+Name_Map name_map_dd3120[] = {
+  NSPAIR(_ZN6dd3120C1Ev),
+  NSPAIR(_ZN6dd3120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+static Base_Class bases_dd3120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern void _ZN6dd31203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_dd3120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+extern VTBL_ENTRY _ZTV6dd3120[];
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd3120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__6dd3120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_dd3120[] = {
+  {&(_ZTV6dd3120[4]),  4,12},
+  {&(_ZTV6dd3120[8]),  8,12},
+  {&(_ZTV6dd3120[11]),  11,12},
+  {&(_tg__ZTV5cc120__6dd3120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__6dd3120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern  VTBL_ENTRY _ZTV6dd3120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3120[];
+static VTBL_ENTRY alt_thunk_names55[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_dd3120 = {  "dd3120", // class name
+  bases_dd3120, 3,
+  &(vtc_dd3120[0]), // expected_vtbl_contents
+  &(vtt_dd3120[0]), // expected_vtt_contents
+  ABISELECT(48,28), // object size
+  NSPAIRA(_ZTI6dd3120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd3120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd3120),5, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names55,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee03120  : dd3120 {
+  int e;
+  ~ee03120(); // tgen
+  ee03120(); // tgen
+};
+//SIG(1 ee03120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} Fi}
+
+
+ee03120 ::~ee03120(){ note_dtor("ee03120", this);} // tgen
+ee03120 ::ee03120(){ note_ctor("ee03120", this);} // tgen
+
+static void Test_ee03120()
+{
+  extern Class_Descriptor cd_ee03120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee03120, buf);
+    ee03120 *dp, &lv = *(dp=new (buf) ee03120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee03120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee03120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee03120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee03120");
+    check_base_class_offset(lv, (cc120*)(dd3120*), ABISELECT(16,12), "ee03120");
+    check_base_class_offset(lv, (dd3120*), 0, "ee03120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee03120.e");
+    test_class_info(&lv, &cd_ee03120);
+    dp->~ee03120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee03120(Test_ee03120, "ee03120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee03120C1Ev();
+extern void _ZN7ee03120D1Ev();
+Name_Map name_map_ee03120[] = {
+  NSPAIR(_ZN7ee03120C1Ev),
+  NSPAIR(_ZN7ee03120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd3120;
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern  VTBL_ENTRY _ZTV6dd3120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3120[];
+static Base_Class bases_ee03120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee03120[];
+extern void _ZN6dd31203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee03120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee03120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee03120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee03120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee03120[];
+extern void _ZN6dd31203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3120__7ee03120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd3120__7ee03120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd3120__7ee03120[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee03120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee03120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee03120[] = {
+  {&(_ZTV7ee03120[4]),  4,12},
+  {&(_tg__ZTV6dd3120__7ee03120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd3120__7ee03120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd3120__7ee03120[3]),  3,4},
+  {&(_ZTV7ee03120[8]),  8,12},
+  {&(_ZTV7ee03120[11]),  11,12},
+  {&(_tg__ZTV5cc120__7ee03120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee03120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee03120[];
+extern  VTBL_ENTRY _ZTV7ee03120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee03120[];
+static VTBL_ENTRY alt_thunk_names56[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee03120 = {  "ee03120", // class name
+  bases_ee03120, 4,
+  &(vtc_ee03120[0]), // expected_vtbl_contents
+  &(vtt_ee03120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee03120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee03120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee03120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names56,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee13120  : virtual dd3120 {
+  int e;
+  ~ee13120(); // tgen
+  ee13120(); // tgen
+};
+//SIG(1 ee13120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} Fi}
+
+
+ee13120 ::~ee13120(){ note_dtor("ee13120", this);} // tgen
+ee13120 ::ee13120(){ note_ctor("ee13120", this);} // tgen
+
+static void Test_ee13120()
+{
+  extern Class_Descriptor cd_ee13120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee13120, buf);
+    ee13120 *dp, &lv = *(dp=new (buf) ee13120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee13120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee13120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee13120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee13120");
+    check_base_class_offset(lv, (cc120*)(dd3120*), ABISELECT(32,16), "ee13120");
+    check_base_class_offset(lv, (dd3120*), ABISELECT(16,8), "ee13120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee13120.e");
+    test_class_info(&lv, &cd_ee13120);
+    dp->~ee13120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee13120(Test_ee13120, "ee13120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee13120C1Ev();
+extern void _ZN7ee13120D1Ev();
+Name_Map name_map_ee13120[] = {
+  NSPAIR(_ZN7ee13120C1Ev),
+  NSPAIR(_ZN7ee13120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd3120;
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern  VTBL_ENTRY _ZTV6dd3120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3120[];
+static Base_Class bases_ee13120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    14, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee13120[];
+extern void _ZN6dd31203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee13120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee13120[0]),
+  0,
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee13120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee13120[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee13120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee13120[];
+extern void _ZN6dd31203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3120__7ee13120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd3120__7ee13120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd3120__7ee13120[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee13120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee13120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee13120[] = {
+  {&(_ZTV7ee13120[5]),  5,18},
+  {&(_ZTV7ee13120[10]),  10,18},
+  {&(_ZTV7ee13120[14]),  14,18},
+  {&(_ZTV7ee13120[17]),  17,18},
+  {&(_tg__ZTV6dd3120__7ee13120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd3120__7ee13120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd3120__7ee13120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee13120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee13120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee13120[];
+extern  VTBL_ENTRY _ZTV7ee13120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee13120[];
+static VTBL_ENTRY alt_thunk_names57[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee13120 = {  "ee13120", // class name
+  bases_ee13120, 4,
+  &(vtc_ee13120[0]), // expected_vtbl_contents
+  &(vtt_ee13120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee13120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee13120),18, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee13120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names57,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee23120  : dd3120 {
+  int e;
+  virtual void  foo(); // _ZN7ee231203fooEv
+  ~ee23120(); // tgen
+  ee23120(); // tgen
+};
+//SIG(1 ee23120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee23120 ::foo(){vfunc_called(this, "_ZN7ee231203fooEv");}
+ee23120 ::~ee23120(){ note_dtor("ee23120", this);} // tgen
+ee23120 ::ee23120(){ note_ctor("ee23120", this);} // tgen
+
+static void Test_ee23120()
+{
+  extern Class_Descriptor cd_ee23120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee23120, buf);
+    ee23120 *dp, &lv = *(dp=new (buf) ee23120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee23120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee23120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee23120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee23120");
+    check_base_class_offset(lv, (cc120*)(dd3120*), ABISELECT(16,12), "ee23120");
+    check_base_class_offset(lv, (dd3120*), 0, "ee23120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee23120.e");
+    test_class_info(&lv, &cd_ee23120);
+    dp->~ee23120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee23120(Test_ee23120, "ee23120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee23120C1Ev();
+extern void _ZN7ee23120D1Ev();
+Name_Map name_map_ee23120[] = {
+  NSPAIR(_ZN7ee23120C1Ev),
+  NSPAIR(_ZN7ee23120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd3120;
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern  VTBL_ENTRY _ZTV6dd3120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3120[];
+static Base_Class bases_ee23120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee23120[];
+extern void _ZN7ee231203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee231203fooEv,_ZTv0_n12_N7ee231203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee231203fooEv,_ZThn20_N7ee231203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee23120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee23120[0]),
+  (VTBL_ENTRY)&_ZN7ee231203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee23120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee23120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee231203fooEv,_ZTv0_n12_N7ee231203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee23120[];
+extern void _ZN6dd31203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3120__7ee23120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd3120__7ee23120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd3120__7ee23120[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee23120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee23120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee23120[] = {
+  {&(_ZTV7ee23120[4]),  4,12},
+  {&(_tg__ZTV6dd3120__7ee23120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd3120__7ee23120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd3120__7ee23120[3]),  3,4},
+  {&(_ZTV7ee23120[8]),  8,12},
+  {&(_ZTV7ee23120[11]),  11,12},
+  {&(_tg__ZTV5cc120__7ee23120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee23120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee23120[];
+extern  VTBL_ENTRY _ZTV7ee23120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee23120[];
+static VTBL_ENTRY alt_thunk_names58[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee231203fooEv,_ZTv0_n12_N7ee231203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee231203fooEv,_ZThn20_N7ee231203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee23120 = {  "ee23120", // class name
+  bases_ee23120, 4,
+  &(vtc_ee23120[0]), // expected_vtbl_contents
+  &(vtt_ee23120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee23120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee23120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee23120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names58,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee33120  : virtual dd3120 {
+  int e;
+  virtual void  foo(); // _ZN7ee331203fooEv
+  ~ee33120(); // tgen
+  ee33120(); // tgen
+};
+//SIG(1 ee33120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee33120 ::foo(){vfunc_called(this, "_ZN7ee331203fooEv");}
+ee33120 ::~ee33120(){ note_dtor("ee33120", this);} // tgen
+ee33120 ::ee33120(){ note_ctor("ee33120", this);} // tgen
+
+static void Test_ee33120()
+{
+  extern Class_Descriptor cd_ee33120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee33120, buf);
+    ee33120 *dp, &lv = *(dp=new (buf) ee33120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee33120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee33120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee33120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee33120");
+    check_base_class_offset(lv, (cc120*)(dd3120*), ABISELECT(32,16), "ee33120");
+    check_base_class_offset(lv, (dd3120*), ABISELECT(16,8), "ee33120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee33120.e");
+    test_class_info(&lv, &cd_ee33120);
+    dp->~ee33120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee33120(Test_ee33120, "ee33120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee33120C1Ev();
+extern void _ZN7ee33120D1Ev();
+Name_Map name_map_ee33120[] = {
+  NSPAIR(_ZN7ee33120C1Ev),
+  NSPAIR(_ZN7ee33120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd3120;
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern  VTBL_ENTRY _ZTV6dd3120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3120[];
+static Base_Class bases_ee33120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    15, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee33120[];
+extern void _ZN7ee331203fooEv();
+extern void ABISELECT(_ZTv0_n40_N7ee331203fooEv,_ZTv0_n20_N7ee331203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee331203fooEv,_ZThn8_N7ee331203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee331203fooEv,_ZTv0_n12_N7ee331203fooEv)();
+extern void ABISELECT(_ZThn48_N7ee331203fooEv,_ZThn24_N7ee331203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee33120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee33120[0]),
+  (VTBL_ENTRY)&_ZN7ee331203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee33120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee331203fooEv,_ZTv0_n20_N7ee331203fooEv),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee33120[0]),
+  ABISELECT(-48,-24),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee33120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee331203fooEv,_ZTv0_n12_N7ee331203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee33120[];
+extern void _ZN6dd31203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3120__7ee33120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd3120__7ee33120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd3120__7ee33120[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee33120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee33120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee33120[] = {
+  {&(_ZTV7ee33120[5]),  5,19},
+  {&(_ZTV7ee33120[11]),  11,19},
+  {&(_ZTV7ee33120[15]),  15,19},
+  {&(_ZTV7ee33120[18]),  18,19},
+  {&(_tg__ZTV6dd3120__7ee33120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd3120__7ee33120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd3120__7ee33120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee33120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee33120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee33120[];
+extern  VTBL_ENTRY _ZTV7ee33120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee33120[];
+static VTBL_ENTRY alt_thunk_names59[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee331203fooEv,_ZTv0_n12_N7ee331203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N7ee331203fooEv,_ZThn24_N7ee331203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee331203fooEv,_ZTv0_n20_N7ee331203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee331203fooEv,_ZThn8_N7ee331203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee33120 = {  "ee33120", // class name
+  bases_ee33120, 4,
+  &(vtc_ee33120[0]), // expected_vtbl_contents
+  &(vtt_ee33120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee33120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee33120),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee33120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names59,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee43120  : dd3120 {
+  int e;
+  virtual void  bar(); // _ZN7ee431203barEv
+  ~ee43120(); // tgen
+  ee43120(); // tgen
+};
+//SIG(1 ee43120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee43120 ::bar(){vfunc_called(this, "_ZN7ee431203barEv");}
+ee43120 ::~ee43120(){ note_dtor("ee43120", this);} // tgen
+ee43120 ::ee43120(){ note_ctor("ee43120", this);} // tgen
+
+static void Test_ee43120()
+{
+  extern Class_Descriptor cd_ee43120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee43120, buf);
+    ee43120 *dp, &lv = *(dp=new (buf) ee43120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee43120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee43120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee43120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee43120");
+    check_base_class_offset(lv, (cc120*)(dd3120*), ABISELECT(16,12), "ee43120");
+    check_base_class_offset(lv, (dd3120*), 0, "ee43120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee43120.e");
+    test_class_info(&lv, &cd_ee43120);
+    dp->~ee43120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee43120(Test_ee43120, "ee43120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee43120C1Ev();
+extern void _ZN7ee43120D1Ev();
+Name_Map name_map_ee43120[] = {
+  NSPAIR(_ZN7ee43120C1Ev),
+  NSPAIR(_ZN7ee43120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd3120;
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern  VTBL_ENTRY _ZTV6dd3120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3120[];
+static Base_Class bases_ee43120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee43120[];
+extern void _ZN6dd31203fooEv();
+extern void _ZN7ee431203barEv();
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee43120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee43120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+  (VTBL_ENTRY)&_ZN7ee431203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee43120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee43120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee43120[];
+extern void _ZN6dd31203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3120__7ee43120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd3120__7ee43120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd3120__7ee43120[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee43120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee43120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee43120[] = {
+  {&(_ZTV7ee43120[4]),  4,13},
+  {&(_tg__ZTV6dd3120__7ee43120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd3120__7ee43120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd3120__7ee43120[3]),  3,4},
+  {&(_ZTV7ee43120[9]),  9,13},
+  {&(_ZTV7ee43120[12]),  12,13},
+  {&(_tg__ZTV5cc120__7ee43120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee43120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee43120[];
+extern  VTBL_ENTRY _ZTV7ee43120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee43120[];
+static VTBL_ENTRY alt_thunk_names60[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee43120 = {  "ee43120", // class name
+  bases_ee43120, 4,
+  &(vtc_ee43120[0]), // expected_vtbl_contents
+  &(vtt_ee43120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee43120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee43120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee43120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names60,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee53120  : virtual dd3120 {
+  int e;
+  virtual void  bar(); // _ZN7ee531203barEv
+  ~ee53120(); // tgen
+  ee53120(); // tgen
+};
+//SIG(1 ee53120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee53120 ::bar(){vfunc_called(this, "_ZN7ee531203barEv");}
+ee53120 ::~ee53120(){ note_dtor("ee53120", this);} // tgen
+ee53120 ::ee53120(){ note_ctor("ee53120", this);} // tgen
+
+static void Test_ee53120()
+{
+  extern Class_Descriptor cd_ee53120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee53120, buf);
+    ee53120 *dp, &lv = *(dp=new (buf) ee53120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee53120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee53120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee53120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee53120");
+    check_base_class_offset(lv, (cc120*)(dd3120*), ABISELECT(32,16), "ee53120");
+    check_base_class_offset(lv, (dd3120*), ABISELECT(16,8), "ee53120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee53120.e");
+    test_class_info(&lv, &cd_ee53120);
+    dp->~ee53120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee53120(Test_ee53120, "ee53120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee53120C1Ev();
+extern void _ZN7ee53120D1Ev();
+Name_Map name_map_ee53120[] = {
+  NSPAIR(_ZN7ee53120C1Ev),
+  NSPAIR(_ZN7ee53120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd3120;
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern  VTBL_ENTRY _ZTV6dd3120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3120[];
+static Base_Class bases_ee53120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    15, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee53120[];
+extern void _ZN7ee531203barEv();
+extern void _ZN6dd31203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee53120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee53120[0]),
+  (VTBL_ENTRY)&_ZN7ee531203barEv,
+  0,
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee53120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee53120[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee53120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee53120[];
+extern void _ZN6dd31203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3120__7ee53120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd3120__7ee53120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd3120__7ee53120[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee53120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee53120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee53120[] = {
+  {&(_ZTV7ee53120[5]),  5,19},
+  {&(_ZTV7ee53120[11]),  11,19},
+  {&(_ZTV7ee53120[15]),  15,19},
+  {&(_ZTV7ee53120[18]),  18,19},
+  {&(_tg__ZTV6dd3120__7ee53120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd3120__7ee53120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd3120__7ee53120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee53120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee53120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee53120[];
+extern  VTBL_ENTRY _ZTV7ee53120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee53120[];
+static VTBL_ENTRY alt_thunk_names61[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee53120 = {  "ee53120", // class name
+  bases_ee53120, 4,
+  &(vtc_ee53120[0]), // expected_vtbl_contents
+  &(vtt_ee53120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee53120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee53120),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee53120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names61,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee63120  : dd3120 {
+  int e;
+  virtual void  foo(); // _ZN7ee631203fooEv
+  virtual void  bar(); // _ZN7ee631203barEv
+  ~ee63120(); // tgen
+  ee63120(); // tgen
+};
+//SIG(1 ee63120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee63120 ::foo(){vfunc_called(this, "_ZN7ee631203fooEv");}
+void  ee63120 ::bar(){vfunc_called(this, "_ZN7ee631203barEv");}
+ee63120 ::~ee63120(){ note_dtor("ee63120", this);} // tgen
+ee63120 ::ee63120(){ note_ctor("ee63120", this);} // tgen
+
+static void Test_ee63120()
+{
+  extern Class_Descriptor cd_ee63120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee63120, buf);
+    ee63120 *dp, &lv = *(dp=new (buf) ee63120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee63120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee63120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee63120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee63120");
+    check_base_class_offset(lv, (cc120*)(dd3120*), ABISELECT(16,12), "ee63120");
+    check_base_class_offset(lv, (dd3120*), 0, "ee63120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee63120.e");
+    test_class_info(&lv, &cd_ee63120);
+    dp->~ee63120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee63120(Test_ee63120, "ee63120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee63120C1Ev();
+extern void _ZN7ee63120D1Ev();
+Name_Map name_map_ee63120[] = {
+  NSPAIR(_ZN7ee63120C1Ev),
+  NSPAIR(_ZN7ee63120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd3120;
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern  VTBL_ENTRY _ZTV6dd3120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3120[];
+static Base_Class bases_ee63120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee63120[];
+extern void _ZN7ee631203fooEv();
+extern void _ZN7ee631203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee631203fooEv,_ZTv0_n12_N7ee631203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee631203fooEv,_ZThn20_N7ee631203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee63120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee63120[0]),
+  (VTBL_ENTRY)&_ZN7ee631203fooEv,
+  (VTBL_ENTRY)&_ZN7ee631203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee63120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee63120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee631203fooEv,_ZTv0_n12_N7ee631203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee63120[];
+extern void _ZN6dd31203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3120__7ee63120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd3120__7ee63120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd3120__7ee63120[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee63120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee63120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee63120[] = {
+  {&(_ZTV7ee63120[4]),  4,13},
+  {&(_tg__ZTV6dd3120__7ee63120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd3120__7ee63120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd3120__7ee63120[3]),  3,4},
+  {&(_ZTV7ee63120[9]),  9,13},
+  {&(_ZTV7ee63120[12]),  12,13},
+  {&(_tg__ZTV5cc120__7ee63120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee63120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee63120[];
+extern  VTBL_ENTRY _ZTV7ee63120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee63120[];
+static VTBL_ENTRY alt_thunk_names62[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn20_N6dd31203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee631203fooEv,_ZTv0_n12_N7ee631203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee631203fooEv,_ZThn20_N7ee631203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee63120 = {  "ee63120", // class name
+  bases_ee63120, 4,
+  &(vtc_ee63120[0]), // expected_vtbl_contents
+  &(vtt_ee63120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee63120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee63120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee63120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names62,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee73120  : virtual dd3120 {
+  int e;
+  virtual void  foo(); // _ZN7ee731203fooEv
+  virtual void  bar(); // _ZN7ee731203barEv
+  ~ee73120(); // tgen
+  ee73120(); // tgen
+};
+//SIG(1 ee73120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee73120 ::foo(){vfunc_called(this, "_ZN7ee731203fooEv");}
+void  ee73120 ::bar(){vfunc_called(this, "_ZN7ee731203barEv");}
+ee73120 ::~ee73120(){ note_dtor("ee73120", this);} // tgen
+ee73120 ::ee73120(){ note_ctor("ee73120", this);} // tgen
+
+static void Test_ee73120()
+{
+  extern Class_Descriptor cd_ee73120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee73120, buf);
+    ee73120 *dp, &lv = *(dp=new (buf) ee73120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee73120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee73120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee73120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee73120");
+    check_base_class_offset(lv, (cc120*)(dd3120*), ABISELECT(32,16), "ee73120");
+    check_base_class_offset(lv, (dd3120*), ABISELECT(16,8), "ee73120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee73120.e");
+    test_class_info(&lv, &cd_ee73120);
+    dp->~ee73120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee73120(Test_ee73120, "ee73120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee73120C1Ev();
+extern void _ZN7ee73120D1Ev();
+Name_Map name_map_ee73120[] = {
+  NSPAIR(_ZN7ee73120C1Ev),
+  NSPAIR(_ZN7ee73120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd3120;
+extern VTBL_ENTRY _ZTI6dd3120[];
+extern  VTBL_ENTRY _ZTV6dd3120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3120[];
+static Base_Class bases_ee73120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    16, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3120,    ABISELECT(16,8), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee73120[];
+extern void _ZN7ee731203fooEv();
+extern void _ZN7ee731203barEv();
+extern void ABISELECT(_ZTv0_n40_N7ee731203fooEv,_ZTv0_n20_N7ee731203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee731203fooEv,_ZThn8_N7ee731203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee731203fooEv,_ZTv0_n12_N7ee731203fooEv)();
+extern void ABISELECT(_ZThn48_N7ee731203fooEv,_ZThn24_N7ee731203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee73120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee73120[0]),
+  (VTBL_ENTRY)&_ZN7ee731203fooEv,
+  (VTBL_ENTRY)&_ZN7ee731203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee73120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee731203fooEv,_ZTv0_n20_N7ee731203fooEv),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee73120[0]),
+  ABISELECT(-48,-24),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee73120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee731203fooEv,_ZTv0_n12_N7ee731203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee73120[];
+extern void _ZN6dd31203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3120__7ee73120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&_ZN6dd31203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd3120__7ee73120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd3120__7ee73120[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd3120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee73120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee73120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee73120[] = {
+  {&(_ZTV7ee73120[5]),  5,20},
+  {&(_ZTV7ee73120[12]),  12,20},
+  {&(_ZTV7ee73120[16]),  16,20},
+  {&(_ZTV7ee73120[19]),  19,20},
+  {&(_tg__ZTV6dd3120__7ee73120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd3120__7ee73120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd3120__7ee73120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee73120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee73120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee73120[];
+extern  VTBL_ENTRY _ZTV7ee73120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee73120[];
+static VTBL_ENTRY alt_thunk_names63[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd31203fooEv,_ZTv0_n12_N6dd31203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd31203fooEv,_ZThn16_N6dd31203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee731203fooEv,_ZTv0_n12_N7ee731203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N7ee731203fooEv,_ZThn24_N7ee731203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee731203fooEv,_ZTv0_n20_N7ee731203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee731203fooEv,_ZThn8_N7ee731203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee73120 = {  "ee73120", // class name
+  bases_ee73120, 4,
+  &(vtc_ee73120[0]), // expected_vtbl_contents
+  &(vtt_ee73120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee73120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee73120),20, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee73120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names63,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd4120  : cc120 {
+  int d;
+  virtual void  bar(); // _ZN6dd41203barEv
+  ~dd4120(); // tgen
+  dd4120(); // tgen
+};
+//SIG(-1 dd4120) C1{ BC2{ VBC3{ BC4{ Fi} v2 Fi} Fi} v1 Fi}
+
+
+void  dd4120 ::bar(){vfunc_called(this, "_ZN6dd41203barEv");}
+dd4120 ::~dd4120(){ note_dtor("dd4120", this);} // tgen
+dd4120 ::dd4120(){ note_ctor("dd4120", this);} // tgen
+
+static void Test_dd4120()
+{
+  extern Class_Descriptor cd_dd4120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_dd4120, buf);
+    dd4120 *dp, &lv = *(dp=new (buf) dd4120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(dd4120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd4120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(24,16), "dd4120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(16,12), "dd4120");
+    check_base_class_offset(lv, (cc120*), 0, "dd4120");
+    check_field_offset(lv, d, ABISELECT(12,8), "dd4120.d");
+    test_class_info(&lv, &cd_dd4120);
+    dp->~dd4120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd4120(Test_dd4120, "dd4120", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd4120C1Ev();
+extern void _ZN6dd4120D1Ev();
+Name_Map name_map_dd4120[] = {
+  NSPAIR(_ZN6dd4120C1Ev),
+  NSPAIR(_ZN6dd4120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+static Base_Class bases_dd4120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern void _ZN6dd41203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_dd4120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV6dd4120[];
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd4120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__6dd4120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_dd4120[] = {
+  {&(_ZTV6dd4120[3]),  3,8},
+  {&(_tg__ZTV5cc120__6dd4120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__6dd4120[3]),  3,4},
+  {&(_ZTV6dd4120[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern  VTBL_ENTRY _ZTV6dd4120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd4120[];
+Class_Descriptor cd_dd4120 = {  "dd4120", // class name
+  bases_dd4120, 3,
+  &(vtc_dd4120[0]), // expected_vtbl_contents
+  &(vtt_dd4120[0]), // expected_vtt_contents
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI6dd4120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd4120),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd4120),4, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee04120  : dd4120 {
+  int e;
+  ~ee04120(); // tgen
+  ee04120(); // tgen
+};
+//SIG(1 ee04120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} Fi}
+
+
+ee04120 ::~ee04120(){ note_dtor("ee04120", this);} // tgen
+ee04120 ::ee04120(){ note_ctor("ee04120", this);} // tgen
+
+static void Test_ee04120()
+{
+  extern Class_Descriptor cd_ee04120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee04120, buf);
+    ee04120 *dp, &lv = *(dp=new (buf) ee04120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee04120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee04120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee04120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd4120*), ABISELECT(24,16), "ee04120");
+    check_base_class_offset(lv, (cc120*)(dd4120*), 0, "ee04120");
+    check_base_class_offset(lv, (dd4120*), 0, "ee04120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee04120.e");
+    test_class_info(&lv, &cd_ee04120);
+    dp->~ee04120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee04120(Test_ee04120, "ee04120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee04120C1Ev();
+extern void _ZN7ee04120D1Ev();
+Name_Map name_map_ee04120[] = {
+  NSPAIR(_ZN7ee04120C1Ev),
+  NSPAIR(_ZN7ee04120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd4120;
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern  VTBL_ENTRY _ZTV6dd4120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd4120[];
+static Base_Class bases_ee04120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee04120[];
+extern void _ZN6dd41203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee04120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee04120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee04120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee04120[];
+extern void _ZN6dd41203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd4120__7ee04120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd4120__7ee04120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd4120__7ee04120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd4120__7ee04120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee04120[] = {
+  {&(_ZTV7ee04120[3]),  3,8},
+  {&(_tg__ZTV6dd4120__7ee04120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd4120__7ee04120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd4120__7ee04120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd4120__7ee04120[3]),  3,4},
+  {&(_ZTV7ee04120[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee04120[];
+extern  VTBL_ENTRY _ZTV7ee04120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee04120[];
+Class_Descriptor cd_ee04120 = {  "ee04120", // class name
+  bases_ee04120, 4,
+  &(vtc_ee04120[0]), // expected_vtbl_contents
+  &(vtt_ee04120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee04120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee04120),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee04120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee14120  : virtual dd4120 {
+  int e;
+  ~ee14120(); // tgen
+  ee14120(); // tgen
+};
+//SIG(1 ee14120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} Fi}
+
+
+ee14120 ::~ee14120(){ note_dtor("ee14120", this);} // tgen
+ee14120 ::ee14120(){ note_ctor("ee14120", this);} // tgen
+
+static void Test_ee14120()
+{
+  extern Class_Descriptor cd_ee14120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee14120, buf);
+    ee14120 *dp, &lv = *(dp=new (buf) ee14120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee14120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee14120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee14120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd4120*), ABISELECT(32,20), "ee14120");
+    check_base_class_offset(lv, (cc120*)(dd4120*), ABISELECT(16,8), "ee14120");
+    check_base_class_offset(lv, (dd4120*), ABISELECT(16,8), "ee14120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee14120.e");
+    test_class_info(&lv, &cd_ee14120);
+    dp->~ee14120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee14120(Test_ee14120, "ee14120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee14120C1Ev();
+extern void _ZN7ee14120D1Ev();
+Name_Map name_map_ee14120[] = {
+  NSPAIR(_ZN7ee14120C1Ev),
+  NSPAIR(_ZN7ee14120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd4120;
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern  VTBL_ENTRY _ZTV6dd4120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd4120[];
+static Base_Class bases_ee14120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4120,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee14120[];
+extern void _ZN6dd41203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee14120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee14120[0]),
+  0,
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee14120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee14120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee14120[];
+extern void _ZN6dd41203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd4120__7ee14120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd4120__7ee14120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd4120__7ee14120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd4120__7ee14120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee14120[] = {
+  {&(_ZTV7ee14120[4]),  4,13},
+  {&(_ZTV7ee14120[8]),  8,13},
+  {&(_ZTV7ee14120[12]),  12,13},
+  {&(_tg__ZTV6dd4120__7ee14120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd4120__7ee14120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd4120__7ee14120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd4120__7ee14120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee14120[];
+extern  VTBL_ENTRY _ZTV7ee14120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee14120[];
+Class_Descriptor cd_ee14120 = {  "ee14120", // class name
+  bases_ee14120, 4,
+  &(vtc_ee14120[0]), // expected_vtbl_contents
+  &(vtt_ee14120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee14120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee14120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee14120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee24120  : dd4120 {
+  int e;
+  virtual void  foo(); // _ZN7ee241203fooEv
+  ~ee24120(); // tgen
+  ee24120(); // tgen
+};
+//SIG(1 ee24120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee24120 ::foo(){vfunc_called(this, "_ZN7ee241203fooEv");}
+ee24120 ::~ee24120(){ note_dtor("ee24120", this);} // tgen
+ee24120 ::ee24120(){ note_ctor("ee24120", this);} // tgen
+
+static void Test_ee24120()
+{
+  extern Class_Descriptor cd_ee24120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee24120, buf);
+    ee24120 *dp, &lv = *(dp=new (buf) ee24120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee24120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee24120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee24120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd4120*), ABISELECT(24,16), "ee24120");
+    check_base_class_offset(lv, (cc120*)(dd4120*), 0, "ee24120");
+    check_base_class_offset(lv, (dd4120*), 0, "ee24120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee24120.e");
+    test_class_info(&lv, &cd_ee24120);
+    dp->~ee24120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee24120(Test_ee24120, "ee24120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee24120C1Ev();
+extern void _ZN7ee24120D1Ev();
+Name_Map name_map_ee24120[] = {
+  NSPAIR(_ZN7ee24120C1Ev),
+  NSPAIR(_ZN7ee24120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd4120;
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern  VTBL_ENTRY _ZTV6dd4120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd4120[];
+static Base_Class bases_ee24120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee24120[];
+extern void _ZN6dd41203barEv();
+extern void _ZN7ee241203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee241203fooEv,_ZTv0_n12_N7ee241203fooEv)();
+extern void ABISELECT(_ZThn24_N7ee241203fooEv,_ZThn16_N7ee241203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee24120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee24120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+  (VTBL_ENTRY)&_ZN7ee241203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee24120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee241203fooEv,_ZTv0_n12_N7ee241203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee24120[];
+extern void _ZN6dd41203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd4120__7ee24120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd4120__7ee24120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd4120__7ee24120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd4120__7ee24120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee24120[] = {
+  {&(_ZTV7ee24120[3]),  3,9},
+  {&(_tg__ZTV6dd4120__7ee24120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd4120__7ee24120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd4120__7ee24120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd4120__7ee24120[3]),  3,4},
+  {&(_ZTV7ee24120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee24120[];
+extern  VTBL_ENTRY _ZTV7ee24120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee24120[];
+static VTBL_ENTRY alt_thunk_names64[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee241203fooEv,_ZTv0_n12_N7ee241203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N7ee241203fooEv,_ZThn16_N7ee241203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee24120 = {  "ee24120", // class name
+  bases_ee24120, 4,
+  &(vtc_ee24120[0]), // expected_vtbl_contents
+  &(vtt_ee24120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee24120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee24120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee24120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names64,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee34120  : virtual dd4120 {
+  int e;
+  virtual void  foo(); // _ZN7ee341203fooEv
+  ~ee34120(); // tgen
+  ee34120(); // tgen
+};
+//SIG(1 ee34120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee34120 ::foo(){vfunc_called(this, "_ZN7ee341203fooEv");}
+ee34120 ::~ee34120(){ note_dtor("ee34120", this);} // tgen
+ee34120 ::ee34120(){ note_ctor("ee34120", this);} // tgen
+
+static void Test_ee34120()
+{
+  extern Class_Descriptor cd_ee34120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee34120, buf);
+    ee34120 *dp, &lv = *(dp=new (buf) ee34120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee34120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee34120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee34120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd4120*), ABISELECT(32,20), "ee34120");
+    check_base_class_offset(lv, (cc120*)(dd4120*), ABISELECT(16,8), "ee34120");
+    check_base_class_offset(lv, (dd4120*), ABISELECT(16,8), "ee34120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee34120.e");
+    test_class_info(&lv, &cd_ee34120);
+    dp->~ee34120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee34120(Test_ee34120, "ee34120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee34120C1Ev();
+extern void _ZN7ee34120D1Ev();
+Name_Map name_map_ee34120[] = {
+  NSPAIR(_ZN7ee34120C1Ev),
+  NSPAIR(_ZN7ee34120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd4120;
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern  VTBL_ENTRY _ZTV6dd4120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd4120[];
+static Base_Class bases_ee34120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee34120[];
+extern void _ZN7ee341203fooEv();
+extern void _ZN6dd41203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee341203fooEv,_ZTv0_n12_N7ee341203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee341203fooEv,_ZThn20_N7ee341203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee34120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee34120[0]),
+  (VTBL_ENTRY)&_ZN7ee341203fooEv,
+  0,
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee34120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee34120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee341203fooEv,_ZTv0_n12_N7ee341203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee34120[];
+extern void _ZN6dd41203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd4120__7ee34120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd4120__7ee34120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd4120__7ee34120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd4120__7ee34120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee34120[] = {
+  {&(_ZTV7ee34120[4]),  4,14},
+  {&(_ZTV7ee34120[9]),  9,14},
+  {&(_ZTV7ee34120[13]),  13,14},
+  {&(_tg__ZTV6dd4120__7ee34120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd4120__7ee34120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd4120__7ee34120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd4120__7ee34120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee34120[];
+extern  VTBL_ENTRY _ZTV7ee34120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee34120[];
+static VTBL_ENTRY alt_thunk_names65[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee341203fooEv,_ZTv0_n12_N7ee341203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee341203fooEv,_ZThn20_N7ee341203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee34120 = {  "ee34120", // class name
+  bases_ee34120, 4,
+  &(vtc_ee34120[0]), // expected_vtbl_contents
+  &(vtt_ee34120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee34120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee34120),14, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee34120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names65,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee44120  : dd4120 {
+  int e;
+  virtual void  bar(); // _ZN7ee441203barEv
+  ~ee44120(); // tgen
+  ee44120(); // tgen
+};
+//SIG(1 ee44120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee44120 ::bar(){vfunc_called(this, "_ZN7ee441203barEv");}
+ee44120 ::~ee44120(){ note_dtor("ee44120", this);} // tgen
+ee44120 ::ee44120(){ note_ctor("ee44120", this);} // tgen
+
+static void Test_ee44120()
+{
+  extern Class_Descriptor cd_ee44120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee44120, buf);
+    ee44120 *dp, &lv = *(dp=new (buf) ee44120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee44120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee44120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee44120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd4120*), ABISELECT(24,16), "ee44120");
+    check_base_class_offset(lv, (cc120*)(dd4120*), 0, "ee44120");
+    check_base_class_offset(lv, (dd4120*), 0, "ee44120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee44120.e");
+    test_class_info(&lv, &cd_ee44120);
+    dp->~ee44120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee44120(Test_ee44120, "ee44120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee44120C1Ev();
+extern void _ZN7ee44120D1Ev();
+Name_Map name_map_ee44120[] = {
+  NSPAIR(_ZN7ee44120C1Ev),
+  NSPAIR(_ZN7ee44120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd4120;
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern  VTBL_ENTRY _ZTV6dd4120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd4120[];
+static Base_Class bases_ee44120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee44120[];
+extern void _ZN7ee441203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee44120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee44120[0]),
+  (VTBL_ENTRY)&_ZN7ee441203barEv,
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee44120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee44120[];
+extern void _ZN6dd41203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd4120__7ee44120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd4120__7ee44120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd4120__7ee44120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd4120__7ee44120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee44120[] = {
+  {&(_ZTV7ee44120[3]),  3,8},
+  {&(_tg__ZTV6dd4120__7ee44120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd4120__7ee44120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd4120__7ee44120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd4120__7ee44120[3]),  3,4},
+  {&(_ZTV7ee44120[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee44120[];
+extern  VTBL_ENTRY _ZTV7ee44120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee44120[];
+Class_Descriptor cd_ee44120 = {  "ee44120", // class name
+  bases_ee44120, 4,
+  &(vtc_ee44120[0]), // expected_vtbl_contents
+  &(vtt_ee44120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee44120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee44120),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee44120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee54120  : virtual dd4120 {
+  int e;
+  virtual void  bar(); // _ZN7ee541203barEv
+  ~ee54120(); // tgen
+  ee54120(); // tgen
+};
+//SIG(1 ee54120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee54120 ::bar(){vfunc_called(this, "_ZN7ee541203barEv");}
+ee54120 ::~ee54120(){ note_dtor("ee54120", this);} // tgen
+ee54120 ::ee54120(){ note_ctor("ee54120", this);} // tgen
+
+static void Test_ee54120()
+{
+  extern Class_Descriptor cd_ee54120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee54120, buf);
+    ee54120 *dp, &lv = *(dp=new (buf) ee54120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee54120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee54120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee54120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd4120*), ABISELECT(32,20), "ee54120");
+    check_base_class_offset(lv, (cc120*)(dd4120*), ABISELECT(16,8), "ee54120");
+    check_base_class_offset(lv, (dd4120*), ABISELECT(16,8), "ee54120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee54120.e");
+    test_class_info(&lv, &cd_ee54120);
+    dp->~ee54120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee54120(Test_ee54120, "ee54120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee54120C1Ev();
+extern void _ZN7ee54120D1Ev();
+Name_Map name_map_ee54120[] = {
+  NSPAIR(_ZN7ee54120C1Ev),
+  NSPAIR(_ZN7ee54120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd4120;
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern  VTBL_ENTRY _ZTV6dd4120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd4120[];
+static Base_Class bases_ee54120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee54120[];
+extern void _ZN7ee541203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee541203barEv,_ZTv0_n16_N7ee541203barEv)();
+extern void ABISELECT(_ZThn16_N7ee541203barEv,_ZThn8_N7ee541203barEv)() __attribute__((weak));
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee54120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee54120[0]),
+  (VTBL_ENTRY)&_ZN7ee541203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee54120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee541203barEv,_ZTv0_n16_N7ee541203barEv),
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee54120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee54120[];
+extern void _ZN6dd41203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd4120__7ee54120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd4120__7ee54120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd4120__7ee54120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd4120__7ee54120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee54120[] = {
+  {&(_ZTV7ee54120[4]),  4,14},
+  {&(_ZTV7ee54120[9]),  9,14},
+  {&(_ZTV7ee54120[13]),  13,14},
+  {&(_tg__ZTV6dd4120__7ee54120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd4120__7ee54120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd4120__7ee54120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd4120__7ee54120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee54120[];
+extern  VTBL_ENTRY _ZTV7ee54120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee54120[];
+static VTBL_ENTRY alt_thunk_names66[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee541203barEv,_ZTv0_n16_N7ee541203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee541203barEv,_ZThn8_N7ee541203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee54120 = {  "ee54120", // class name
+  bases_ee54120, 4,
+  &(vtc_ee54120[0]), // expected_vtbl_contents
+  &(vtt_ee54120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee54120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee54120),14, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee54120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names66,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee64120  : dd4120 {
+  int e;
+  virtual void  foo(); // _ZN7ee641203fooEv
+  virtual void  bar(); // _ZN7ee641203barEv
+  ~ee64120(); // tgen
+  ee64120(); // tgen
+};
+//SIG(1 ee64120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 v2 Fi}
+
+
+void  ee64120 ::foo(){vfunc_called(this, "_ZN7ee641203fooEv");}
+void  ee64120 ::bar(){vfunc_called(this, "_ZN7ee641203barEv");}
+ee64120 ::~ee64120(){ note_dtor("ee64120", this);} // tgen
+ee64120 ::ee64120(){ note_ctor("ee64120", this);} // tgen
+
+static void Test_ee64120()
+{
+  extern Class_Descriptor cd_ee64120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee64120, buf);
+    ee64120 *dp, &lv = *(dp=new (buf) ee64120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee64120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee64120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee64120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd4120*), ABISELECT(24,16), "ee64120");
+    check_base_class_offset(lv, (cc120*)(dd4120*), 0, "ee64120");
+    check_base_class_offset(lv, (dd4120*), 0, "ee64120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee64120.e");
+    test_class_info(&lv, &cd_ee64120);
+    dp->~ee64120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee64120(Test_ee64120, "ee64120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee64120C1Ev();
+extern void _ZN7ee64120D1Ev();
+Name_Map name_map_ee64120[] = {
+  NSPAIR(_ZN7ee64120C1Ev),
+  NSPAIR(_ZN7ee64120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd4120;
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern  VTBL_ENTRY _ZTV6dd4120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd4120[];
+static Base_Class bases_ee64120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee64120[];
+extern void _ZN7ee641203barEv();
+extern void _ZN7ee641203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee641203fooEv,_ZTv0_n12_N7ee641203fooEv)();
+extern void ABISELECT(_ZThn24_N7ee641203fooEv,_ZThn16_N7ee641203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee64120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee64120[0]),
+  (VTBL_ENTRY)&_ZN7ee641203barEv,
+  (VTBL_ENTRY)&_ZN7ee641203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee64120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee641203fooEv,_ZTv0_n12_N7ee641203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee64120[];
+extern void _ZN6dd41203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd4120__7ee64120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd4120__7ee64120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd4120__7ee64120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd4120__7ee64120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee64120[] = {
+  {&(_ZTV7ee64120[3]),  3,9},
+  {&(_tg__ZTV6dd4120__7ee64120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd4120__7ee64120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd4120__7ee64120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd4120__7ee64120[3]),  3,4},
+  {&(_ZTV7ee64120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee64120[];
+extern  VTBL_ENTRY _ZTV7ee64120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee64120[];
+static VTBL_ENTRY alt_thunk_names67[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee641203fooEv,_ZTv0_n12_N7ee641203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N7ee641203fooEv,_ZThn16_N7ee641203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee64120 = {  "ee64120", // class name
+  bases_ee64120, 4,
+  &(vtc_ee64120[0]), // expected_vtbl_contents
+  &(vtt_ee64120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee64120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee64120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee64120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names67,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee74120  : virtual dd4120 {
+  int e;
+  virtual void  foo(); // _ZN7ee741203fooEv
+  virtual void  bar(); // _ZN7ee741203barEv
+  ~ee74120(); // tgen
+  ee74120(); // tgen
+};
+//SIG(1 ee74120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 v2 Fi}
+
+
+void  ee74120 ::foo(){vfunc_called(this, "_ZN7ee741203fooEv");}
+void  ee74120 ::bar(){vfunc_called(this, "_ZN7ee741203barEv");}
+ee74120 ::~ee74120(){ note_dtor("ee74120", this);} // tgen
+ee74120 ::ee74120(){ note_ctor("ee74120", this);} // tgen
+
+static void Test_ee74120()
+{
+  extern Class_Descriptor cd_ee74120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee74120, buf);
+    ee74120 *dp, &lv = *(dp=new (buf) ee74120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee74120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee74120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee74120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd4120*), ABISELECT(32,20), "ee74120");
+    check_base_class_offset(lv, (cc120*)(dd4120*), ABISELECT(16,8), "ee74120");
+    check_base_class_offset(lv, (dd4120*), ABISELECT(16,8), "ee74120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee74120.e");
+    test_class_info(&lv, &cd_ee74120);
+    dp->~ee74120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee74120(Test_ee74120, "ee74120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee74120C1Ev();
+extern void _ZN7ee74120D1Ev();
+Name_Map name_map_ee74120[] = {
+  NSPAIR(_ZN7ee74120C1Ev),
+  NSPAIR(_ZN7ee74120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd4120;
+extern VTBL_ENTRY _ZTI6dd4120[];
+extern  VTBL_ENTRY _ZTV6dd4120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd4120[];
+static Base_Class bases_ee74120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd4120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee74120[];
+extern void _ZN7ee741203fooEv();
+extern void _ZN7ee741203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee741203barEv,_ZTv0_n16_N7ee741203barEv)();
+extern void ABISELECT(_ZThn16_N7ee741203barEv,_ZThn8_N7ee741203barEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee741203fooEv,_ZTv0_n12_N7ee741203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee741203fooEv,_ZThn20_N7ee741203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee74120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee74120[0]),
+  (VTBL_ENTRY)&_ZN7ee741203fooEv,
+  (VTBL_ENTRY)&_ZN7ee741203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee74120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee741203barEv,_ZTv0_n16_N7ee741203barEv),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee74120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee741203fooEv,_ZTv0_n12_N7ee741203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee74120[];
+extern void _ZN6dd41203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd4120__7ee74120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN6dd41203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd4120__7ee74120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd4120__7ee74120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd4120__7ee74120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd4120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee74120[] = {
+  {&(_ZTV7ee74120[4]),  4,15},
+  {&(_ZTV7ee74120[10]),  10,15},
+  {&(_ZTV7ee74120[14]),  14,15},
+  {&(_tg__ZTV6dd4120__7ee74120[3]),  3,4},
+  {&(_tg__ZTV5cc1206dd4120__7ee74120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd4120__7ee74120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd4120__7ee74120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee74120[];
+extern  VTBL_ENTRY _ZTV7ee74120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee74120[];
+static VTBL_ENTRY alt_thunk_names68[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee741203fooEv,_ZTv0_n12_N7ee741203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee741203fooEv,_ZThn20_N7ee741203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee741203barEv,_ZTv0_n16_N7ee741203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee741203barEv,_ZThn8_N7ee741203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee74120 = {  "ee74120", // class name
+  bases_ee74120, 4,
+  &(vtc_ee74120[0]), // expected_vtbl_contents
+  &(vtt_ee74120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee74120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee74120),15, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee74120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names68,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd5120  : virtual cc120 {
+  int d;
+  virtual void  bar(); // _ZN6dd51203barEv
+  ~dd5120(); // tgen
+  dd5120(); // tgen
+};
+//SIG(-1 dd5120) C1{ VBC2{ VBC3{ BC4{ Fi} v2 Fi} Fi} v1 Fi}
+
+
+void  dd5120 ::bar(){vfunc_called(this, "_ZN6dd51203barEv");}
+dd5120 ::~dd5120(){ note_dtor("dd5120", this);} // tgen
+dd5120 ::dd5120(){ note_ctor("dd5120", this);} // tgen
+
+static void Test_dd5120()
+{
+  extern Class_Descriptor cd_dd5120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,8)];
+    init_test(&cd_dd5120, buf);
+    dd5120 *dp, &lv = *(dp=new (buf) dd5120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,28), "sizeof(dd5120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd5120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,20), "dd5120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,16), "dd5120");
+    check_base_class_offset(lv, (cc120*), ABISELECT(16,8), "dd5120");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd5120.d");
+    test_class_info(&lv, &cd_dd5120);
+    dp->~dd5120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd5120(Test_dd5120, "dd5120", ABISELECT(48,28));
+
+#else // __cplusplus
+
+extern void _ZN6dd5120C1Ev();
+extern void _ZN6dd5120D1Ev();
+Name_Map name_map_dd5120[] = {
+  NSPAIR(_ZN6dd5120C1Ev),
+  NSPAIR(_ZN6dd5120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+static Base_Class bases_dd5120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern void _ZN6dd51203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_dd5120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV6dd5120[];
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd5120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__6dd5120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_dd5120[] = {
+  {&(_ZTV6dd5120[4]),  4,12},
+  {&(_ZTV6dd5120[8]),  8,12},
+  {&(_ZTV6dd5120[11]),  11,12},
+  {&(_tg__ZTV5cc120__6dd5120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__6dd5120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern  VTBL_ENTRY _ZTV6dd5120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5120[];
+Class_Descriptor cd_dd5120 = {  "dd5120", // class name
+  bases_dd5120, 3,
+  &(vtc_dd5120[0]), // expected_vtbl_contents
+  &(vtt_dd5120[0]), // expected_vtt_contents
+  ABISELECT(48,28), // object size
+  NSPAIRA(_ZTI6dd5120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd5120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd5120),5, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee05120  : dd5120 {
+  int e;
+  ~ee05120(); // tgen
+  ee05120(); // tgen
+};
+//SIG(1 ee05120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} Fi}
+
+
+ee05120 ::~ee05120(){ note_dtor("ee05120", this);} // tgen
+ee05120 ::ee05120(){ note_ctor("ee05120", this);} // tgen
+
+static void Test_ee05120()
+{
+  extern Class_Descriptor cd_ee05120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee05120, buf);
+    ee05120 *dp, &lv = *(dp=new (buf) ee05120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee05120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee05120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee05120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee05120");
+    check_base_class_offset(lv, (cc120*)(dd5120*), ABISELECT(16,12), "ee05120");
+    check_base_class_offset(lv, (dd5120*), 0, "ee05120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee05120.e");
+    test_class_info(&lv, &cd_ee05120);
+    dp->~ee05120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee05120(Test_ee05120, "ee05120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee05120C1Ev();
+extern void _ZN7ee05120D1Ev();
+Name_Map name_map_ee05120[] = {
+  NSPAIR(_ZN7ee05120C1Ev),
+  NSPAIR(_ZN7ee05120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd5120;
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern  VTBL_ENTRY _ZTV6dd5120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5120[];
+static Base_Class bases_ee05120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee05120[];
+extern void _ZN6dd51203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee05120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee05120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee05120[0]),
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee05120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee05120[];
+extern void _ZN6dd51203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5120__7ee05120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd5120__7ee05120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd5120__7ee05120[] = {
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee05120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee05120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee05120[] = {
+  {&(_ZTV7ee05120[4]),  4,12},
+  {&(_tg__ZTV6dd5120__7ee05120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd5120__7ee05120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd5120__7ee05120[3]),  3,4},
+  {&(_ZTV7ee05120[8]),  8,12},
+  {&(_ZTV7ee05120[11]),  11,12},
+  {&(_tg__ZTV5cc120__7ee05120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee05120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee05120[];
+extern  VTBL_ENTRY _ZTV7ee05120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee05120[];
+Class_Descriptor cd_ee05120 = {  "ee05120", // class name
+  bases_ee05120, 4,
+  &(vtc_ee05120[0]), // expected_vtbl_contents
+  &(vtt_ee05120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee05120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee05120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee05120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee15120  : virtual dd5120 {
+  int e;
+  ~ee15120(); // tgen
+  ee15120(); // tgen
+};
+//SIG(1 ee15120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} Fi}
+
+
+ee15120 ::~ee15120(){ note_dtor("ee15120", this);} // tgen
+ee15120 ::ee15120(){ note_ctor("ee15120", this);} // tgen
+
+static void Test_ee15120()
+{
+  extern Class_Descriptor cd_ee15120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee15120, buf);
+    ee15120 *dp, &lv = *(dp=new (buf) ee15120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee15120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee15120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee15120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee15120");
+    check_base_class_offset(lv, (cc120*)(dd5120*), ABISELECT(32,16), "ee15120");
+    check_base_class_offset(lv, (dd5120*), ABISELECT(16,8), "ee15120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee15120.e");
+    test_class_info(&lv, &cd_ee15120);
+    dp->~ee15120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee15120(Test_ee15120, "ee15120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee15120C1Ev();
+extern void _ZN7ee15120D1Ev();
+Name_Map name_map_ee15120[] = {
+  NSPAIR(_ZN7ee15120C1Ev),
+  NSPAIR(_ZN7ee15120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd5120;
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern  VTBL_ENTRY _ZTV6dd5120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5120[];
+static Base_Class bases_ee15120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    14, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee15120[];
+extern void _ZN6dd51203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee15120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee15120[0]),
+  0,
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee15120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee15120[0]),
+  0,
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee15120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee15120[];
+extern void _ZN6dd51203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5120__7ee15120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd5120__7ee15120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd5120__7ee15120[] = {
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee15120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee15120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee15120[] = {
+  {&(_ZTV7ee15120[5]),  5,18},
+  {&(_ZTV7ee15120[10]),  10,18},
+  {&(_ZTV7ee15120[14]),  14,18},
+  {&(_ZTV7ee15120[17]),  17,18},
+  {&(_tg__ZTV6dd5120__7ee15120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd5120__7ee15120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd5120__7ee15120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee15120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee15120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee15120[];
+extern  VTBL_ENTRY _ZTV7ee15120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee15120[];
+Class_Descriptor cd_ee15120 = {  "ee15120", // class name
+  bases_ee15120, 4,
+  &(vtc_ee15120[0]), // expected_vtbl_contents
+  &(vtt_ee15120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee15120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee15120),18, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee15120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee25120  : dd5120 {
+  int e;
+  virtual void  foo(); // _ZN7ee251203fooEv
+  ~ee25120(); // tgen
+  ee25120(); // tgen
+};
+//SIG(1 ee25120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee25120 ::foo(){vfunc_called(this, "_ZN7ee251203fooEv");}
+ee25120 ::~ee25120(){ note_dtor("ee25120", this);} // tgen
+ee25120 ::ee25120(){ note_ctor("ee25120", this);} // tgen
+
+static void Test_ee25120()
+{
+  extern Class_Descriptor cd_ee25120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee25120, buf);
+    ee25120 *dp, &lv = *(dp=new (buf) ee25120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee25120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee25120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee25120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee25120");
+    check_base_class_offset(lv, (cc120*)(dd5120*), ABISELECT(16,12), "ee25120");
+    check_base_class_offset(lv, (dd5120*), 0, "ee25120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee25120.e");
+    test_class_info(&lv, &cd_ee25120);
+    dp->~ee25120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee25120(Test_ee25120, "ee25120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee25120C1Ev();
+extern void _ZN7ee25120D1Ev();
+Name_Map name_map_ee25120[] = {
+  NSPAIR(_ZN7ee25120C1Ev),
+  NSPAIR(_ZN7ee25120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd5120;
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern  VTBL_ENTRY _ZTV6dd5120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5120[];
+static Base_Class bases_ee25120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee25120[];
+extern void _ZN6dd51203barEv();
+extern void _ZN7ee251203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee251203fooEv,_ZTv0_n12_N7ee251203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee251203fooEv,_ZThn20_N7ee251203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee25120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee25120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+  (VTBL_ENTRY)&_ZN7ee251203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee25120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee25120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee251203fooEv,_ZTv0_n12_N7ee251203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee25120[];
+extern void _ZN6dd51203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5120__7ee25120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd5120__7ee25120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd5120__7ee25120[] = {
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee25120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee25120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee25120[] = {
+  {&(_ZTV7ee25120[4]),  4,13},
+  {&(_tg__ZTV6dd5120__7ee25120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd5120__7ee25120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd5120__7ee25120[3]),  3,4},
+  {&(_ZTV7ee25120[9]),  9,13},
+  {&(_ZTV7ee25120[12]),  12,13},
+  {&(_tg__ZTV5cc120__7ee25120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee25120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee25120[];
+extern  VTBL_ENTRY _ZTV7ee25120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee25120[];
+static VTBL_ENTRY alt_thunk_names69[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee251203fooEv,_ZTv0_n12_N7ee251203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee251203fooEv,_ZThn20_N7ee251203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee25120 = {  "ee25120", // class name
+  bases_ee25120, 4,
+  &(vtc_ee25120[0]), // expected_vtbl_contents
+  &(vtt_ee25120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee25120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee25120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee25120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names69,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee35120  : virtual dd5120 {
+  int e;
+  virtual void  foo(); // _ZN7ee351203fooEv
+  ~ee35120(); // tgen
+  ee35120(); // tgen
+};
+//SIG(1 ee35120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 Fi}
+
+
+void  ee35120 ::foo(){vfunc_called(this, "_ZN7ee351203fooEv");}
+ee35120 ::~ee35120(){ note_dtor("ee35120", this);} // tgen
+ee35120 ::ee35120(){ note_ctor("ee35120", this);} // tgen
+
+static void Test_ee35120()
+{
+  extern Class_Descriptor cd_ee35120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee35120, buf);
+    ee35120 *dp, &lv = *(dp=new (buf) ee35120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee35120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee35120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee35120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee35120");
+    check_base_class_offset(lv, (cc120*)(dd5120*), ABISELECT(32,16), "ee35120");
+    check_base_class_offset(lv, (dd5120*), ABISELECT(16,8), "ee35120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee35120.e");
+    test_class_info(&lv, &cd_ee35120);
+    dp->~ee35120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee35120(Test_ee35120, "ee35120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee35120C1Ev();
+extern void _ZN7ee35120D1Ev();
+Name_Map name_map_ee35120[] = {
+  NSPAIR(_ZN7ee35120C1Ev),
+  NSPAIR(_ZN7ee35120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd5120;
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern  VTBL_ENTRY _ZTV6dd5120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5120[];
+static Base_Class bases_ee35120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    15, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee35120[];
+extern void _ZN7ee351203fooEv();
+extern void _ZN6dd51203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee351203fooEv,_ZTv0_n12_N7ee351203fooEv)();
+extern void ABISELECT(_ZThn48_N7ee351203fooEv,_ZThn24_N7ee351203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee35120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee35120[0]),
+  (VTBL_ENTRY)&_ZN7ee351203fooEv,
+  0,
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee35120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee35120[0]),
+  ABISELECT(-48,-24),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee35120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee351203fooEv,_ZTv0_n12_N7ee351203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee35120[];
+extern void _ZN6dd51203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5120__7ee35120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd5120__7ee35120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd5120__7ee35120[] = {
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee35120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee35120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee35120[] = {
+  {&(_ZTV7ee35120[5]),  5,19},
+  {&(_ZTV7ee35120[11]),  11,19},
+  {&(_ZTV7ee35120[15]),  15,19},
+  {&(_ZTV7ee35120[18]),  18,19},
+  {&(_tg__ZTV6dd5120__7ee35120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd5120__7ee35120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd5120__7ee35120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee35120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee35120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee35120[];
+extern  VTBL_ENTRY _ZTV7ee35120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee35120[];
+static VTBL_ENTRY alt_thunk_names70[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee351203fooEv,_ZTv0_n12_N7ee351203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N7ee351203fooEv,_ZThn24_N7ee351203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee35120 = {  "ee35120", // class name
+  bases_ee35120, 4,
+  &(vtc_ee35120[0]), // expected_vtbl_contents
+  &(vtt_ee35120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee35120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee35120),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee35120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names70,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee45120  : dd5120 {
+  int e;
+  virtual void  bar(); // _ZN7ee451203barEv
+  ~ee45120(); // tgen
+  ee45120(); // tgen
+};
+//SIG(1 ee45120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee45120 ::bar(){vfunc_called(this, "_ZN7ee451203barEv");}
+ee45120 ::~ee45120(){ note_dtor("ee45120", this);} // tgen
+ee45120 ::ee45120(){ note_ctor("ee45120", this);} // tgen
+
+static void Test_ee45120()
+{
+  extern Class_Descriptor cd_ee45120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee45120, buf);
+    ee45120 *dp, &lv = *(dp=new (buf) ee45120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee45120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee45120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee45120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee45120");
+    check_base_class_offset(lv, (cc120*)(dd5120*), ABISELECT(16,12), "ee45120");
+    check_base_class_offset(lv, (dd5120*), 0, "ee45120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee45120.e");
+    test_class_info(&lv, &cd_ee45120);
+    dp->~ee45120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee45120(Test_ee45120, "ee45120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee45120C1Ev();
+extern void _ZN7ee45120D1Ev();
+Name_Map name_map_ee45120[] = {
+  NSPAIR(_ZN7ee45120C1Ev),
+  NSPAIR(_ZN7ee45120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd5120;
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern  VTBL_ENTRY _ZTV6dd5120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5120[];
+static Base_Class bases_ee45120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee45120[];
+extern void _ZN7ee451203barEv();
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee45120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee45120[0]),
+  (VTBL_ENTRY)&_ZN7ee451203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee45120[0]),
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee45120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee45120[];
+extern void _ZN6dd51203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5120__7ee45120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd5120__7ee45120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd5120__7ee45120[] = {
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee45120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee45120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee45120[] = {
+  {&(_ZTV7ee45120[4]),  4,12},
+  {&(_tg__ZTV6dd5120__7ee45120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd5120__7ee45120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd5120__7ee45120[3]),  3,4},
+  {&(_ZTV7ee45120[8]),  8,12},
+  {&(_ZTV7ee45120[11]),  11,12},
+  {&(_tg__ZTV5cc120__7ee45120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee45120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee45120[];
+extern  VTBL_ENTRY _ZTV7ee45120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee45120[];
+Class_Descriptor cd_ee45120 = {  "ee45120", // class name
+  bases_ee45120, 4,
+  &(vtc_ee45120[0]), // expected_vtbl_contents
+  &(vtt_ee45120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee45120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee45120),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee45120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee55120  : virtual dd5120 {
+  int e;
+  virtual void  bar(); // _ZN7ee551203barEv
+  ~ee55120(); // tgen
+  ee55120(); // tgen
+};
+//SIG(1 ee55120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 Fi} v1 Fi}
+
+
+void  ee55120 ::bar(){vfunc_called(this, "_ZN7ee551203barEv");}
+ee55120 ::~ee55120(){ note_dtor("ee55120", this);} // tgen
+ee55120 ::ee55120(){ note_ctor("ee55120", this);} // tgen
+
+static void Test_ee55120()
+{
+  extern Class_Descriptor cd_ee55120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee55120, buf);
+    ee55120 *dp, &lv = *(dp=new (buf) ee55120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee55120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee55120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee55120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee55120");
+    check_base_class_offset(lv, (cc120*)(dd5120*), ABISELECT(32,16), "ee55120");
+    check_base_class_offset(lv, (dd5120*), ABISELECT(16,8), "ee55120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee55120.e");
+    test_class_info(&lv, &cd_ee55120);
+    dp->~ee55120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee55120(Test_ee55120, "ee55120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee55120C1Ev();
+extern void _ZN7ee55120D1Ev();
+Name_Map name_map_ee55120[] = {
+  NSPAIR(_ZN7ee55120C1Ev),
+  NSPAIR(_ZN7ee55120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd5120;
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern  VTBL_ENTRY _ZTV6dd5120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5120[];
+static Base_Class bases_ee55120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    15, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee55120[];
+extern void _ZN7ee551203barEv();
+extern void ABISELECT(_ZTv0_n40_N7ee551203barEv,_ZTv0_n20_N7ee551203barEv)();
+extern void ABISELECT(_ZThn16_N7ee551203barEv,_ZThn8_N7ee551203barEv)() __attribute__((weak));
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY vtc_ee55120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee55120[0]),
+  (VTBL_ENTRY)&_ZN7ee551203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee55120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee551203barEv,_ZTv0_n20_N7ee551203barEv),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee55120[0]),
+  0,
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee55120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee55120[];
+extern void _ZN6dd51203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5120__7ee55120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd5120__7ee55120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd5120__7ee55120[] = {
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee55120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee55120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee55120[] = {
+  {&(_ZTV7ee55120[5]),  5,19},
+  {&(_ZTV7ee55120[11]),  11,19},
+  {&(_ZTV7ee55120[15]),  15,19},
+  {&(_ZTV7ee55120[18]),  18,19},
+  {&(_tg__ZTV6dd5120__7ee55120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd5120__7ee55120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd5120__7ee55120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee55120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee55120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee55120[];
+extern  VTBL_ENTRY _ZTV7ee55120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee55120[];
+static VTBL_ENTRY alt_thunk_names71[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee551203barEv,_ZTv0_n20_N7ee551203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee551203barEv,_ZThn8_N7ee551203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee55120 = {  "ee55120", // class name
+  bases_ee55120, 4,
+  &(vtc_ee55120[0]), // expected_vtbl_contents
+  &(vtt_ee55120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee55120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee55120),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee55120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names71,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee65120  : dd5120 {
+  int e;
+  virtual void  foo(); // _ZN7ee651203fooEv
+  virtual void  bar(); // _ZN7ee651203barEv
+  ~ee65120(); // tgen
+  ee65120(); // tgen
+};
+//SIG(1 ee65120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 v2 Fi}
+
+
+void  ee65120 ::foo(){vfunc_called(this, "_ZN7ee651203fooEv");}
+void  ee65120 ::bar(){vfunc_called(this, "_ZN7ee651203barEv");}
+ee65120 ::~ee65120(){ note_dtor("ee65120", this);} // tgen
+ee65120 ::ee65120(){ note_ctor("ee65120", this);} // tgen
+
+static void Test_ee65120()
+{
+  extern Class_Descriptor cd_ee65120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee65120, buf);
+    ee65120 *dp, &lv = *(dp=new (buf) ee65120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee65120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee65120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee65120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee65120");
+    check_base_class_offset(lv, (cc120*)(dd5120*), ABISELECT(16,12), "ee65120");
+    check_base_class_offset(lv, (dd5120*), 0, "ee65120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee65120.e");
+    test_class_info(&lv, &cd_ee65120);
+    dp->~ee65120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee65120(Test_ee65120, "ee65120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee65120C1Ev();
+extern void _ZN7ee65120D1Ev();
+Name_Map name_map_ee65120[] = {
+  NSPAIR(_ZN7ee65120C1Ev),
+  NSPAIR(_ZN7ee65120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd5120;
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern  VTBL_ENTRY _ZTV6dd5120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5120[];
+static Base_Class bases_ee65120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee65120[];
+extern void _ZN7ee651203barEv();
+extern void _ZN7ee651203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee651203fooEv,_ZTv0_n12_N7ee651203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee651203fooEv,_ZThn20_N7ee651203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee65120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee65120[0]),
+  (VTBL_ENTRY)&_ZN7ee651203barEv,
+  (VTBL_ENTRY)&_ZN7ee651203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee65120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee65120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee651203fooEv,_ZTv0_n12_N7ee651203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee65120[];
+extern void _ZN6dd51203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5120__7ee65120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd5120__7ee65120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd5120__7ee65120[] = {
+  0,
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee65120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee65120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee65120[] = {
+  {&(_ZTV7ee65120[4]),  4,13},
+  {&(_tg__ZTV6dd5120__7ee65120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd5120__7ee65120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd5120__7ee65120[3]),  3,4},
+  {&(_ZTV7ee65120[9]),  9,13},
+  {&(_ZTV7ee65120[12]),  12,13},
+  {&(_tg__ZTV5cc120__7ee65120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee65120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee65120[];
+extern  VTBL_ENTRY _ZTV7ee65120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee65120[];
+static VTBL_ENTRY alt_thunk_names72[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee651203fooEv,_ZTv0_n12_N7ee651203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee651203fooEv,_ZThn20_N7ee651203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee65120 = {  "ee65120", // class name
+  bases_ee65120, 4,
+  &(vtc_ee65120[0]), // expected_vtbl_contents
+  &(vtt_ee65120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee65120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee65120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee65120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names72,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee75120  : virtual dd5120 {
+  int e;
+  virtual void  foo(); // _ZN7ee751203fooEv
+  virtual void  bar(); // _ZN7ee751203barEv
+  ~ee75120(); // tgen
+  ee75120(); // tgen
+};
+//SIG(1 ee75120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 Fi} v1 v2 Fi}
+
+
+void  ee75120 ::foo(){vfunc_called(this, "_ZN7ee751203fooEv");}
+void  ee75120 ::bar(){vfunc_called(this, "_ZN7ee751203barEv");}
+ee75120 ::~ee75120(){ note_dtor("ee75120", this);} // tgen
+ee75120 ::ee75120(){ note_ctor("ee75120", this);} // tgen
+
+static void Test_ee75120()
+{
+  extern Class_Descriptor cd_ee75120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee75120, buf);
+    ee75120 *dp, &lv = *(dp=new (buf) ee75120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee75120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee75120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee75120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee75120");
+    check_base_class_offset(lv, (cc120*)(dd5120*), ABISELECT(32,16), "ee75120");
+    check_base_class_offset(lv, (dd5120*), ABISELECT(16,8), "ee75120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee75120.e");
+    test_class_info(&lv, &cd_ee75120);
+    dp->~ee75120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee75120(Test_ee75120, "ee75120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee75120C1Ev();
+extern void _ZN7ee75120D1Ev();
+Name_Map name_map_ee75120[] = {
+  NSPAIR(_ZN7ee75120C1Ev),
+  NSPAIR(_ZN7ee75120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd5120;
+extern VTBL_ENTRY _ZTI6dd5120[];
+extern  VTBL_ENTRY _ZTV6dd5120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd5120[];
+static Base_Class bases_ee75120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    16, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd5120,    ABISELECT(16,8), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee75120[];
+extern void _ZN7ee751203fooEv();
+extern void _ZN7ee751203barEv();
+extern void ABISELECT(_ZTv0_n40_N7ee751203barEv,_ZTv0_n20_N7ee751203barEv)();
+extern void ABISELECT(_ZThn16_N7ee751203barEv,_ZThn8_N7ee751203barEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee751203fooEv,_ZTv0_n12_N7ee751203fooEv)();
+extern void ABISELECT(_ZThn48_N7ee751203fooEv,_ZThn24_N7ee751203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee75120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee75120[0]),
+  (VTBL_ENTRY)&_ZN7ee751203fooEv,
+  (VTBL_ENTRY)&_ZN7ee751203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee75120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee751203barEv,_ZTv0_n20_N7ee751203barEv),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee75120[0]),
+  ABISELECT(-48,-24),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee75120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee751203fooEv,_ZTv0_n12_N7ee751203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee75120[];
+extern void _ZN6dd51203barEv();
+static  VTBL_ENTRY _tg__ZTV6dd5120__7ee75120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN6dd51203barEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd5120__7ee75120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd5120__7ee75120[] = {
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd5120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee75120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee75120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee75120[] = {
+  {&(_ZTV7ee75120[5]),  5,20},
+  {&(_ZTV7ee75120[12]),  12,20},
+  {&(_ZTV7ee75120[16]),  16,20},
+  {&(_ZTV7ee75120[19]),  19,20},
+  {&(_tg__ZTV6dd5120__7ee75120[4]),  4,5},
+  {&(_tg__ZTV5cc120__6dd5120__7ee75120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd5120__7ee75120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee75120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee75120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee75120[];
+extern  VTBL_ENTRY _ZTV7ee75120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee75120[];
+static VTBL_ENTRY alt_thunk_names73[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee751203fooEv,_ZTv0_n12_N7ee751203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N7ee751203fooEv,_ZThn24_N7ee751203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee751203barEv,_ZTv0_n20_N7ee751203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee751203barEv,_ZThn8_N7ee751203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee75120 = {  "ee75120", // class name
+  bases_ee75120, 4,
+  &(vtc_ee75120[0]), // expected_vtbl_contents
+  &(vtt_ee75120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee75120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee75120),20, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee75120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names73,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd6120  : cc120 {
+  int d;
+  virtual void  bar(); // _ZN6dd61203barEv
+  virtual void  foo(); // _ZN6dd61203fooEv
+  ~dd6120(); // tgen
+  dd6120(); // tgen
+};
+//SIG(-1 dd6120) C1{ BC2{ VBC3{ BC4{ Fi} v2 Fi} Fi} v1 v2 Fi}
+
+
+void  dd6120 ::bar(){vfunc_called(this, "_ZN6dd61203barEv");}
+void  dd6120 ::foo(){vfunc_called(this, "_ZN6dd61203fooEv");}
+dd6120 ::~dd6120(){ note_dtor("dd6120", this);} // tgen
+dd6120 ::dd6120(){ note_ctor("dd6120", this);} // tgen
+
+static void Test_dd6120()
+{
+  extern Class_Descriptor cd_dd6120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_dd6120, buf);
+    dd6120 *dp, &lv = *(dp=new (buf) dd6120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(dd6120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd6120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(24,16), "dd6120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(16,12), "dd6120");
+    check_base_class_offset(lv, (cc120*), 0, "dd6120");
+    check_field_offset(lv, d, ABISELECT(12,8), "dd6120.d");
+    test_class_info(&lv, &cd_dd6120);
+    dp->~dd6120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd6120(Test_dd6120, "dd6120", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd6120C1Ev();
+extern void _ZN6dd6120D1Ev();
+Name_Map name_map_dd6120[] = {
+  NSPAIR(_ZN6dd6120C1Ev),
+  NSPAIR(_ZN6dd6120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+static Base_Class bases_dd6120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_dd6120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+extern VTBL_ENTRY _ZTV6dd6120[];
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd6120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__6dd6120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_dd6120[] = {
+  {&(_ZTV6dd6120[3]),  3,9},
+  {&(_tg__ZTV5cc120__6dd6120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__6dd6120[3]),  3,4},
+  {&(_ZTV6dd6120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern  VTBL_ENTRY _ZTV6dd6120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd6120[];
+static VTBL_ENTRY alt_thunk_names74[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_dd6120 = {  "dd6120", // class name
+  bases_dd6120, 3,
+  &(vtc_dd6120[0]), // expected_vtbl_contents
+  &(vtt_dd6120[0]), // expected_vtt_contents
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI6dd6120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd6120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd6120),4, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names74,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee06120  : dd6120 {
+  int e;
+  ~ee06120(); // tgen
+  ee06120(); // tgen
+};
+//SIG(1 ee06120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} Fi}
+
+
+ee06120 ::~ee06120(){ note_dtor("ee06120", this);} // tgen
+ee06120 ::ee06120(){ note_ctor("ee06120", this);} // tgen
+
+static void Test_ee06120()
+{
+  extern Class_Descriptor cd_ee06120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee06120, buf);
+    ee06120 *dp, &lv = *(dp=new (buf) ee06120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee06120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee06120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee06120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd6120*), ABISELECT(24,16), "ee06120");
+    check_base_class_offset(lv, (cc120*)(dd6120*), 0, "ee06120");
+    check_base_class_offset(lv, (dd6120*), 0, "ee06120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee06120.e");
+    test_class_info(&lv, &cd_ee06120);
+    dp->~ee06120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee06120(Test_ee06120, "ee06120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee06120C1Ev();
+extern void _ZN7ee06120D1Ev();
+Name_Map name_map_ee06120[] = {
+  NSPAIR(_ZN7ee06120C1Ev),
+  NSPAIR(_ZN7ee06120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd6120;
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern  VTBL_ENTRY _ZTV6dd6120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd6120[];
+static Base_Class bases_ee06120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee06120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee06120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee06120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee06120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee06120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd6120__7ee06120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd6120__7ee06120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd6120__7ee06120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd6120__7ee06120[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+static  VTT_ENTRY vtt_ee06120[] = {
+  {&(_ZTV7ee06120[3]),  3,9},
+  {&(_tg__ZTV6dd6120__7ee06120[3]),  3,5},
+  {&(_tg__ZTV5cc1206dd6120__7ee06120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd6120__7ee06120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd6120__7ee06120[3]),  3,4},
+  {&(_ZTV7ee06120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee06120[];
+extern  VTBL_ENTRY _ZTV7ee06120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee06120[];
+static VTBL_ENTRY alt_thunk_names75[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee06120 = {  "ee06120", // class name
+  bases_ee06120, 4,
+  &(vtc_ee06120[0]), // expected_vtbl_contents
+  &(vtt_ee06120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee06120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee06120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee06120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names75,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee16120  : virtual dd6120 {
+  int e;
+  ~ee16120(); // tgen
+  ee16120(); // tgen
+};
+//SIG(1 ee16120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} Fi}
+
+
+ee16120 ::~ee16120(){ note_dtor("ee16120", this);} // tgen
+ee16120 ::ee16120(){ note_ctor("ee16120", this);} // tgen
+
+static void Test_ee16120()
+{
+  extern Class_Descriptor cd_ee16120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee16120, buf);
+    ee16120 *dp, &lv = *(dp=new (buf) ee16120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee16120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee16120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee16120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd6120*), ABISELECT(32,20), "ee16120");
+    check_base_class_offset(lv, (cc120*)(dd6120*), ABISELECT(16,8), "ee16120");
+    check_base_class_offset(lv, (dd6120*), ABISELECT(16,8), "ee16120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee16120.e");
+    test_class_info(&lv, &cd_ee16120);
+    dp->~ee16120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee16120(Test_ee16120, "ee16120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee16120C1Ev();
+extern void _ZN7ee16120D1Ev();
+Name_Map name_map_ee16120[] = {
+  NSPAIR(_ZN7ee16120C1Ev),
+  NSPAIR(_ZN7ee16120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd6120;
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern  VTBL_ENTRY _ZTV6dd6120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd6120[];
+static Base_Class bases_ee16120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6120,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee16120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee16120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee16120[0]),
+  0,
+  0,
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee16120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee16120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee16120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd6120__7ee16120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd6120__7ee16120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd6120__7ee16120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd6120__7ee16120[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+static  VTT_ENTRY vtt_ee16120[] = {
+  {&(_ZTV7ee16120[4]),  4,15},
+  {&(_ZTV7ee16120[9]),  9,15},
+  {&(_ZTV7ee16120[14]),  14,15},
+  {&(_tg__ZTV6dd6120__7ee16120[3]),  3,5},
+  {&(_tg__ZTV5cc1206dd6120__7ee16120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd6120__7ee16120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd6120__7ee16120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee16120[];
+extern  VTBL_ENTRY _ZTV7ee16120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee16120[];
+static VTBL_ENTRY alt_thunk_names76[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee16120 = {  "ee16120", // class name
+  bases_ee16120, 4,
+  &(vtc_ee16120[0]), // expected_vtbl_contents
+  &(vtt_ee16120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee16120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee16120),15, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee16120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names76,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee26120  : dd6120 {
+  int e;
+  virtual void  foo(); // _ZN7ee261203fooEv
+  ~ee26120(); // tgen
+  ee26120(); // tgen
+};
+//SIG(1 ee26120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 Fi}
+
+
+void  ee26120 ::foo(){vfunc_called(this, "_ZN7ee261203fooEv");}
+ee26120 ::~ee26120(){ note_dtor("ee26120", this);} // tgen
+ee26120 ::ee26120(){ note_ctor("ee26120", this);} // tgen
+
+static void Test_ee26120()
+{
+  extern Class_Descriptor cd_ee26120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee26120, buf);
+    ee26120 *dp, &lv = *(dp=new (buf) ee26120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee26120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee26120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee26120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd6120*), ABISELECT(24,16), "ee26120");
+    check_base_class_offset(lv, (cc120*)(dd6120*), 0, "ee26120");
+    check_base_class_offset(lv, (dd6120*), 0, "ee26120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee26120.e");
+    test_class_info(&lv, &cd_ee26120);
+    dp->~ee26120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee26120(Test_ee26120, "ee26120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee26120C1Ev();
+extern void _ZN7ee26120D1Ev();
+Name_Map name_map_ee26120[] = {
+  NSPAIR(_ZN7ee26120C1Ev),
+  NSPAIR(_ZN7ee26120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd6120;
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern  VTBL_ENTRY _ZTV6dd6120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd6120[];
+static Base_Class bases_ee26120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee26120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN7ee261203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee261203fooEv,_ZTv0_n12_N7ee261203fooEv)();
+extern void ABISELECT(_ZThn24_N7ee261203fooEv,_ZThn16_N7ee261203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee26120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee26120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN7ee261203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee26120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee261203fooEv,_ZTv0_n12_N7ee261203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee26120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd6120__7ee26120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd6120__7ee26120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd6120__7ee26120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd6120__7ee26120[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+static  VTT_ENTRY vtt_ee26120[] = {
+  {&(_ZTV7ee26120[3]),  3,9},
+  {&(_tg__ZTV6dd6120__7ee26120[3]),  3,5},
+  {&(_tg__ZTV5cc1206dd6120__7ee26120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd6120__7ee26120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd6120__7ee26120[3]),  3,4},
+  {&(_ZTV7ee26120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee26120[];
+extern  VTBL_ENTRY _ZTV7ee26120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee26120[];
+static VTBL_ENTRY alt_thunk_names77[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee261203fooEv,_ZTv0_n12_N7ee261203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N7ee261203fooEv,_ZThn16_N7ee261203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee26120 = {  "ee26120", // class name
+  bases_ee26120, 4,
+  &(vtc_ee26120[0]), // expected_vtbl_contents
+  &(vtt_ee26120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee26120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee26120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee26120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names77,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee36120  : virtual dd6120 {
+  int e;
+  virtual void  foo(); // _ZN7ee361203fooEv
+  ~ee36120(); // tgen
+  ee36120(); // tgen
+};
+//SIG(1 ee36120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 Fi}
+
+
+void  ee36120 ::foo(){vfunc_called(this, "_ZN7ee361203fooEv");}
+ee36120 ::~ee36120(){ note_dtor("ee36120", this);} // tgen
+ee36120 ::ee36120(){ note_ctor("ee36120", this);} // tgen
+
+static void Test_ee36120()
+{
+  extern Class_Descriptor cd_ee36120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee36120, buf);
+    ee36120 *dp, &lv = *(dp=new (buf) ee36120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee36120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee36120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee36120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd6120*), ABISELECT(32,20), "ee36120");
+    check_base_class_offset(lv, (cc120*)(dd6120*), ABISELECT(16,8), "ee36120");
+    check_base_class_offset(lv, (dd6120*), ABISELECT(16,8), "ee36120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee36120.e");
+    test_class_info(&lv, &cd_ee36120);
+    dp->~ee36120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee36120(Test_ee36120, "ee36120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee36120C1Ev();
+extern void _ZN7ee36120D1Ev();
+Name_Map name_map_ee36120[] = {
+  NSPAIR(_ZN7ee36120C1Ev),
+  NSPAIR(_ZN7ee36120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd6120;
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern  VTBL_ENTRY _ZTV6dd6120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd6120[];
+static Base_Class bases_ee36120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee36120[];
+extern void _ZN7ee361203fooEv();
+extern void _ZN6dd61203barEv();
+extern void ABISELECT(_ZTv0_n40_N7ee361203fooEv,_ZTv0_n20_N7ee361203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee361203fooEv,_ZThn8_N7ee361203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee361203fooEv,_ZTv0_n12_N7ee361203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee361203fooEv,_ZThn20_N7ee361203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee36120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee36120[0]),
+  (VTBL_ENTRY)&_ZN7ee361203fooEv,
+  ABISELECT(-16,-8),
+  0,
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee36120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee361203fooEv,_ZTv0_n20_N7ee361203fooEv),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee36120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee361203fooEv,_ZTv0_n12_N7ee361203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee36120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd6120__7ee36120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd6120__7ee36120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd6120__7ee36120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd6120__7ee36120[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+static  VTT_ENTRY vtt_ee36120[] = {
+  {&(_ZTV7ee36120[4]),  4,16},
+  {&(_ZTV7ee36120[10]),  10,16},
+  {&(_ZTV7ee36120[15]),  15,16},
+  {&(_tg__ZTV6dd6120__7ee36120[3]),  3,5},
+  {&(_tg__ZTV5cc1206dd6120__7ee36120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd6120__7ee36120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd6120__7ee36120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee36120[];
+extern  VTBL_ENTRY _ZTV7ee36120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee36120[];
+static VTBL_ENTRY alt_thunk_names78[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee361203fooEv,_ZTv0_n12_N7ee361203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee361203fooEv,_ZThn20_N7ee361203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee361203fooEv,_ZTv0_n20_N7ee361203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee361203fooEv,_ZThn8_N7ee361203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee36120 = {  "ee36120", // class name
+  bases_ee36120, 4,
+  &(vtc_ee36120[0]), // expected_vtbl_contents
+  &(vtt_ee36120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee36120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee36120),16, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee36120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names78,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee46120  : dd6120 {
+  int e;
+  virtual void  bar(); // _ZN7ee461203barEv
+  ~ee46120(); // tgen
+  ee46120(); // tgen
+};
+//SIG(1 ee46120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} v1 Fi}
+
+
+void  ee46120 ::bar(){vfunc_called(this, "_ZN7ee461203barEv");}
+ee46120 ::~ee46120(){ note_dtor("ee46120", this);} // tgen
+ee46120 ::ee46120(){ note_ctor("ee46120", this);} // tgen
+
+static void Test_ee46120()
+{
+  extern Class_Descriptor cd_ee46120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee46120, buf);
+    ee46120 *dp, &lv = *(dp=new (buf) ee46120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee46120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee46120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee46120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd6120*), ABISELECT(24,16), "ee46120");
+    check_base_class_offset(lv, (cc120*)(dd6120*), 0, "ee46120");
+    check_base_class_offset(lv, (dd6120*), 0, "ee46120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee46120.e");
+    test_class_info(&lv, &cd_ee46120);
+    dp->~ee46120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee46120(Test_ee46120, "ee46120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee46120C1Ev();
+extern void _ZN7ee46120D1Ev();
+Name_Map name_map_ee46120[] = {
+  NSPAIR(_ZN7ee46120C1Ev),
+  NSPAIR(_ZN7ee46120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd6120;
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern  VTBL_ENTRY _ZTV6dd6120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd6120[];
+static Base_Class bases_ee46120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee46120[];
+extern void _ZN7ee461203barEv();
+extern void _ZN6dd61203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee46120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee46120[0]),
+  (VTBL_ENTRY)&_ZN7ee461203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee46120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee46120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd6120__7ee46120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd6120__7ee46120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd6120__7ee46120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd6120__7ee46120[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+static  VTT_ENTRY vtt_ee46120[] = {
+  {&(_ZTV7ee46120[3]),  3,9},
+  {&(_tg__ZTV6dd6120__7ee46120[3]),  3,5},
+  {&(_tg__ZTV5cc1206dd6120__7ee46120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd6120__7ee46120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd6120__7ee46120[3]),  3,4},
+  {&(_ZTV7ee46120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee46120[];
+extern  VTBL_ENTRY _ZTV7ee46120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee46120[];
+static VTBL_ENTRY alt_thunk_names79[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee46120 = {  "ee46120", // class name
+  bases_ee46120, 4,
+  &(vtc_ee46120[0]), // expected_vtbl_contents
+  &(vtt_ee46120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee46120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee46120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee46120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names79,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee56120  : virtual dd6120 {
+  int e;
+  virtual void  bar(); // _ZN7ee561203barEv
+  ~ee56120(); // tgen
+  ee56120(); // tgen
+};
+//SIG(1 ee56120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} v1 Fi}
+
+
+void  ee56120 ::bar(){vfunc_called(this, "_ZN7ee561203barEv");}
+ee56120 ::~ee56120(){ note_dtor("ee56120", this);} // tgen
+ee56120 ::ee56120(){ note_ctor("ee56120", this);} // tgen
+
+static void Test_ee56120()
+{
+  extern Class_Descriptor cd_ee56120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee56120, buf);
+    ee56120 *dp, &lv = *(dp=new (buf) ee56120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee56120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee56120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee56120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd6120*), ABISELECT(32,20), "ee56120");
+    check_base_class_offset(lv, (cc120*)(dd6120*), ABISELECT(16,8), "ee56120");
+    check_base_class_offset(lv, (dd6120*), ABISELECT(16,8), "ee56120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee56120.e");
+    test_class_info(&lv, &cd_ee56120);
+    dp->~ee56120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee56120(Test_ee56120, "ee56120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee56120C1Ev();
+extern void _ZN7ee56120D1Ev();
+Name_Map name_map_ee56120[] = {
+  NSPAIR(_ZN7ee56120C1Ev),
+  NSPAIR(_ZN7ee56120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd6120;
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern  VTBL_ENTRY _ZTV6dd6120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd6120[];
+static Base_Class bases_ee56120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee56120[];
+extern void _ZN7ee561203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee561203barEv,_ZTv0_n16_N7ee561203barEv)();
+extern void ABISELECT(_ZThn16_N7ee561203barEv,_ZThn8_N7ee561203barEv)() __attribute__((weak));
+extern void _ZN6dd61203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee56120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee56120[0]),
+  (VTBL_ENTRY)&_ZN7ee561203barEv,
+  0,
+  ABISELECT(-16,-8),
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee56120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee561203barEv,_ZTv0_n16_N7ee561203barEv),
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee56120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee56120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd6120__7ee56120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd6120__7ee56120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd6120__7ee56120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd6120__7ee56120[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+static  VTT_ENTRY vtt_ee56120[] = {
+  {&(_ZTV7ee56120[4]),  4,16},
+  {&(_ZTV7ee56120[10]),  10,16},
+  {&(_ZTV7ee56120[15]),  15,16},
+  {&(_tg__ZTV6dd6120__7ee56120[3]),  3,5},
+  {&(_tg__ZTV5cc1206dd6120__7ee56120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd6120__7ee56120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd6120__7ee56120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee56120[];
+extern  VTBL_ENTRY _ZTV7ee56120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee56120[];
+static VTBL_ENTRY alt_thunk_names80[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee561203barEv,_ZTv0_n16_N7ee561203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee561203barEv,_ZThn8_N7ee561203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee56120 = {  "ee56120", // class name
+  bases_ee56120, 4,
+  &(vtc_ee56120[0]), // expected_vtbl_contents
+  &(vtt_ee56120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee56120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee56120),16, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee56120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names80,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee66120  : dd6120 {
+  int e;
+  virtual void  foo(); // _ZN7ee661203fooEv
+  virtual void  bar(); // _ZN7ee661203barEv
+  ~ee66120(); // tgen
+  ee66120(); // tgen
+};
+//SIG(1 ee66120) C1{ BC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 v2 Fi}
+
+
+void  ee66120 ::foo(){vfunc_called(this, "_ZN7ee661203fooEv");}
+void  ee66120 ::bar(){vfunc_called(this, "_ZN7ee661203barEv");}
+ee66120 ::~ee66120(){ note_dtor("ee66120", this);} // tgen
+ee66120 ::ee66120(){ note_ctor("ee66120", this);} // tgen
+
+static void Test_ee66120()
+{
+  extern Class_Descriptor cd_ee66120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee66120, buf);
+    ee66120 *dp, &lv = *(dp=new (buf) ee66120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee66120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee66120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(32,20), "ee66120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd6120*), ABISELECT(24,16), "ee66120");
+    check_base_class_offset(lv, (cc120*)(dd6120*), 0, "ee66120");
+    check_base_class_offset(lv, (dd6120*), 0, "ee66120");
+    check_field_offset(lv, e, ABISELECT(16,12), "ee66120.e");
+    test_class_info(&lv, &cd_ee66120);
+    dp->~ee66120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee66120(Test_ee66120, "ee66120", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee66120C1Ev();
+extern void _ZN7ee66120D1Ev();
+Name_Map name_map_ee66120[] = {
+  NSPAIR(_ZN7ee66120C1Ev),
+  NSPAIR(_ZN7ee66120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd6120;
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern  VTBL_ENTRY _ZTV6dd6120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd6120[];
+static Base_Class bases_ee66120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(32,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(24,16), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee66120[];
+extern void _ZN7ee661203barEv();
+extern void _ZN7ee661203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee661203fooEv,_ZTv0_n12_N7ee661203fooEv)();
+extern void ABISELECT(_ZThn24_N7ee661203fooEv,_ZThn16_N7ee661203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee66120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee66120[0]),
+  (VTBL_ENTRY)&_ZN7ee661203barEv,
+  (VTBL_ENTRY)&_ZN7ee661203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI7ee66120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee661203fooEv,_ZTv0_n12_N7ee661203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee66120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd6120__7ee66120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd6120__7ee66120[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd6120__7ee66120[] = {
+  0,
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd6120__7ee66120[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+static  VTT_ENTRY vtt_ee66120[] = {
+  {&(_ZTV7ee66120[3]),  3,9},
+  {&(_tg__ZTV6dd6120__7ee66120[3]),  3,5},
+  {&(_tg__ZTV5cc1206dd6120__7ee66120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd6120__7ee66120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd6120__7ee66120[3]),  3,4},
+  {&(_ZTV7ee66120[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee66120[];
+extern  VTBL_ENTRY _ZTV7ee66120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee66120[];
+static VTBL_ENTRY alt_thunk_names81[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N6dd61203fooEv,_ZThn16_N6dd61203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee661203fooEv,_ZTv0_n12_N7ee661203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N7ee661203fooEv,_ZThn16_N7ee661203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee66120 = {  "ee66120", // class name
+  bases_ee66120, 4,
+  &(vtc_ee66120[0]), // expected_vtbl_contents
+  &(vtt_ee66120[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee66120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee66120),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee66120),6, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names81,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee76120  : virtual dd6120 {
+  int e;
+  virtual void  foo(); // _ZN7ee761203fooEv
+  virtual void  bar(); // _ZN7ee761203barEv
+  ~ee76120(); // tgen
+  ee76120(); // tgen
+};
+//SIG(1 ee76120) C1{ VBC2{ BC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 v2 Fi}
+
+
+void  ee76120 ::foo(){vfunc_called(this, "_ZN7ee761203fooEv");}
+void  ee76120 ::bar(){vfunc_called(this, "_ZN7ee761203barEv");}
+ee76120 ::~ee76120(){ note_dtor("ee76120", this);} // tgen
+ee76120 ::ee76120(){ note_ctor("ee76120", this);} // tgen
+
+static void Test_ee76120()
+{
+  extern Class_Descriptor cd_ee76120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee76120, buf);
+    ee76120 *dp, &lv = *(dp=new (buf) ee76120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee76120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee76120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee76120");
+    check_base_class_offset(lv, (bb20*)(cc120*)(dd6120*), ABISELECT(32,20), "ee76120");
+    check_base_class_offset(lv, (cc120*)(dd6120*), ABISELECT(16,8), "ee76120");
+    check_base_class_offset(lv, (dd6120*), ABISELECT(16,8), "ee76120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee76120.e");
+    test_class_info(&lv, &cd_ee76120);
+    dp->~ee76120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee76120(Test_ee76120, "ee76120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee76120C1Ev();
+extern void _ZN7ee76120D1Ev();
+Name_Map name_map_ee76120[] = {
+  NSPAIR(_ZN7ee76120C1Ev),
+  NSPAIR(_ZN7ee76120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd6120;
+extern VTBL_ENTRY _ZTI6dd6120[];
+extern  VTBL_ENTRY _ZTV6dd6120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd6120[];
+static Base_Class bases_ee76120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd6120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee76120[];
+extern void _ZN7ee761203fooEv();
+extern void _ZN7ee761203barEv();
+extern void ABISELECT(_ZTv0_n32_N7ee761203barEv,_ZTv0_n16_N7ee761203barEv)();
+extern void ABISELECT(_ZThn16_N7ee761203barEv,_ZThn8_N7ee761203barEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n40_N7ee761203fooEv,_ZTv0_n20_N7ee761203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee761203fooEv,_ZThn8_N7ee761203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee761203fooEv,_ZTv0_n12_N7ee761203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee761203fooEv,_ZThn20_N7ee761203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee76120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee76120[0]),
+  (VTBL_ENTRY)&_ZN7ee761203fooEv,
+  (VTBL_ENTRY)&_ZN7ee761203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  ABISELECT(16,12),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee76120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7ee761203barEv,_ZTv0_n16_N7ee761203barEv),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee761203fooEv,_ZTv0_n20_N7ee761203fooEv),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee76120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee761203fooEv,_ZTv0_n12_N7ee761203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee76120[];
+extern void _ZN6dd61203barEv();
+extern void _ZN6dd61203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd6120__7ee76120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&_ZN6dd61203barEv,
+  (VTBL_ENTRY)&_ZN6dd61203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc1206dd6120__7ee76120[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc1206dd6120__7ee76120[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd6120__7ee76120[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd6120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv),
+};
+static  VTT_ENTRY vtt_ee76120[] = {
+  {&(_ZTV7ee76120[4]),  4,17},
+  {&(_ZTV7ee76120[11]),  11,17},
+  {&(_ZTV7ee76120[16]),  16,17},
+  {&(_tg__ZTV6dd6120__7ee76120[3]),  3,5},
+  {&(_tg__ZTV5cc1206dd6120__7ee76120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc1206dd6120__7ee76120[3]),  3,4},
+  {&(_tg__ZTV4bb20__6dd6120__7ee76120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee76120[];
+extern  VTBL_ENTRY _ZTV7ee76120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee76120[];
+static VTBL_ENTRY alt_thunk_names82[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd61203fooEv,_ZTv0_n12_N6dd61203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd61203fooEv,_ZThn12_N6dd61203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee761203fooEv,_ZTv0_n12_N7ee761203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee761203fooEv,_ZThn20_N7ee761203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee761203fooEv,_ZTv0_n20_N7ee761203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee761203fooEv,_ZThn8_N7ee761203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7ee761203barEv,_ZTv0_n16_N7ee761203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee761203barEv,_ZThn8_N7ee761203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee76120 = {  "ee76120", // class name
+  bases_ee76120, 4,
+  &(vtc_ee76120[0]), // expected_vtbl_contents
+  &(vtt_ee76120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee76120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee76120),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee76120),7, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names82,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd7120  : virtual cc120 {
+  int d;
+  virtual void  bar(); // _ZN6dd71203barEv
+  virtual void  foo(); // _ZN6dd71203fooEv
+  ~dd7120(); // tgen
+  dd7120(); // tgen
+};
+//SIG(-1 dd7120) C1{ VBC2{ VBC3{ BC4{ Fi} v2 Fi} Fi} v1 v2 Fi}
+
+
+void  dd7120 ::bar(){vfunc_called(this, "_ZN6dd71203barEv");}
+void  dd7120 ::foo(){vfunc_called(this, "_ZN6dd71203fooEv");}
+dd7120 ::~dd7120(){ note_dtor("dd7120", this);} // tgen
+dd7120 ::dd7120(){ note_ctor("dd7120", this);} // tgen
+
+static void Test_dd7120()
+{
+  extern Class_Descriptor cd_dd7120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,8)];
+    init_test(&cd_dd7120, buf);
+    dd7120 *dp, &lv = *(dp=new (buf) dd7120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,28), "sizeof(dd7120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd7120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,20), "dd7120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,16), "dd7120");
+    check_base_class_offset(lv, (cc120*), ABISELECT(16,8), "dd7120");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd7120.d");
+    test_class_info(&lv, &cd_dd7120);
+    dp->~dd7120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd7120(Test_dd7120, "dd7120", ABISELECT(48,28));
+
+#else // __cplusplus
+
+extern void _ZN6dd7120C1Ev();
+extern void _ZN6dd7120D1Ev();
+Name_Map name_map_dd7120[] = {
+  NSPAIR(_ZN6dd7120C1Ev),
+  NSPAIR(_ZN6dd7120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+static Base_Class bases_dd7120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_dd7120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+extern VTBL_ENTRY _ZTV6dd7120[];
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd7120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__6dd7120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_dd7120[] = {
+  {&(_ZTV6dd7120[4]),  4,13},
+  {&(_ZTV6dd7120[9]),  9,13},
+  {&(_ZTV6dd7120[12]),  12,13},
+  {&(_tg__ZTV5cc120__6dd7120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__6dd7120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern  VTBL_ENTRY _ZTV6dd7120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7120[];
+static VTBL_ENTRY alt_thunk_names83[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_dd7120 = {  "dd7120", // class name
+  bases_dd7120, 3,
+  &(vtc_dd7120[0]), // expected_vtbl_contents
+  &(vtt_dd7120[0]), // expected_vtt_contents
+  ABISELECT(48,28), // object size
+  NSPAIRA(_ZTI6dd7120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd7120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd7120),5, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names83,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee07120  : dd7120 {
+  int e;
+  ~ee07120(); // tgen
+  ee07120(); // tgen
+};
+//SIG(1 ee07120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} Fi}
+
+
+ee07120 ::~ee07120(){ note_dtor("ee07120", this);} // tgen
+ee07120 ::ee07120(){ note_ctor("ee07120", this);} // tgen
+
+static void Test_ee07120()
+{
+  extern Class_Descriptor cd_ee07120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee07120, buf);
+    ee07120 *dp, &lv = *(dp=new (buf) ee07120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee07120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee07120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee07120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee07120");
+    check_base_class_offset(lv, (cc120*)(dd7120*), ABISELECT(16,12), "ee07120");
+    check_base_class_offset(lv, (dd7120*), 0, "ee07120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee07120.e");
+    test_class_info(&lv, &cd_ee07120);
+    dp->~ee07120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee07120(Test_ee07120, "ee07120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee07120C1Ev();
+extern void _ZN7ee07120D1Ev();
+Name_Map name_map_ee07120[] = {
+  NSPAIR(_ZN7ee07120C1Ev),
+  NSPAIR(_ZN7ee07120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd7120;
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern  VTBL_ENTRY _ZTV6dd7120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7120[];
+static Base_Class bases_ee07120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee07120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee07120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee07120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee07120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee07120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee07120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7120__7ee07120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd7120__7ee07120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd7120__7ee07120[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee07120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee07120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee07120[] = {
+  {&(_ZTV7ee07120[4]),  4,13},
+  {&(_tg__ZTV6dd7120__7ee07120[4]),  4,6},
+  {&(_tg__ZTV5cc120__6dd7120__7ee07120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd7120__7ee07120[3]),  3,4},
+  {&(_ZTV7ee07120[9]),  9,13},
+  {&(_ZTV7ee07120[12]),  12,13},
+  {&(_tg__ZTV5cc120__7ee07120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee07120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee07120[];
+extern  VTBL_ENTRY _ZTV7ee07120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee07120[];
+static VTBL_ENTRY alt_thunk_names84[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee07120 = {  "ee07120", // class name
+  bases_ee07120, 4,
+  &(vtc_ee07120[0]), // expected_vtbl_contents
+  &(vtt_ee07120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee07120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee07120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee07120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names84,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee17120  : virtual dd7120 {
+  int e;
+  ~ee17120(); // tgen
+  ee17120(); // tgen
+};
+//SIG(1 ee17120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} Fi}
+
+
+ee17120 ::~ee17120(){ note_dtor("ee17120", this);} // tgen
+ee17120 ::ee17120(){ note_ctor("ee17120", this);} // tgen
+
+static void Test_ee17120()
+{
+  extern Class_Descriptor cd_ee17120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee17120, buf);
+    ee17120 *dp, &lv = *(dp=new (buf) ee17120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee17120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee17120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee17120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee17120");
+    check_base_class_offset(lv, (cc120*)(dd7120*), ABISELECT(32,16), "ee17120");
+    check_base_class_offset(lv, (dd7120*), ABISELECT(16,8), "ee17120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee17120.e");
+    test_class_info(&lv, &cd_ee17120);
+    dp->~ee17120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee17120(Test_ee17120, "ee17120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee17120C1Ev();
+extern void _ZN7ee17120D1Ev();
+Name_Map name_map_ee17120[] = {
+  NSPAIR(_ZN7ee17120C1Ev),
+  NSPAIR(_ZN7ee17120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd7120;
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern  VTBL_ENTRY _ZTV6dd7120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7120[];
+static Base_Class bases_ee17120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    16, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7120,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    6, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee17120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee17120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee17120[0]),
+  0,
+  0,
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee17120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee17120[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee17120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee17120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7120__7ee17120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd7120__7ee17120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd7120__7ee17120[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee17120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee17120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee17120[] = {
+  {&(_ZTV7ee17120[5]),  5,20},
+  {&(_ZTV7ee17120[11]),  11,20},
+  {&(_ZTV7ee17120[16]),  16,20},
+  {&(_ZTV7ee17120[19]),  19,20},
+  {&(_tg__ZTV6dd7120__7ee17120[4]),  4,6},
+  {&(_tg__ZTV5cc120__6dd7120__7ee17120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd7120__7ee17120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee17120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee17120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee17120[];
+extern  VTBL_ENTRY _ZTV7ee17120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee17120[];
+static VTBL_ENTRY alt_thunk_names85[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee17120 = {  "ee17120", // class name
+  bases_ee17120, 4,
+  &(vtc_ee17120[0]), // expected_vtbl_contents
+  &(vtt_ee17120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee17120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee17120),20, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee17120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names85,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee27120  : dd7120 {
+  int e;
+  virtual void  foo(); // _ZN7ee271203fooEv
+  ~ee27120(); // tgen
+  ee27120(); // tgen
+};
+//SIG(1 ee27120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 Fi}
+
+
+void  ee27120 ::foo(){vfunc_called(this, "_ZN7ee271203fooEv");}
+ee27120 ::~ee27120(){ note_dtor("ee27120", this);} // tgen
+ee27120 ::ee27120(){ note_ctor("ee27120", this);} // tgen
+
+static void Test_ee27120()
+{
+  extern Class_Descriptor cd_ee27120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee27120, buf);
+    ee27120 *dp, &lv = *(dp=new (buf) ee27120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee27120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee27120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee27120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee27120");
+    check_base_class_offset(lv, (cc120*)(dd7120*), ABISELECT(16,12), "ee27120");
+    check_base_class_offset(lv, (dd7120*), 0, "ee27120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee27120.e");
+    test_class_info(&lv, &cd_ee27120);
+    dp->~ee27120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee27120(Test_ee27120, "ee27120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee27120C1Ev();
+extern void _ZN7ee27120D1Ev();
+Name_Map name_map_ee27120[] = {
+  NSPAIR(_ZN7ee27120C1Ev),
+  NSPAIR(_ZN7ee27120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd7120;
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern  VTBL_ENTRY _ZTV6dd7120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7120[];
+static Base_Class bases_ee27120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee27120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN7ee271203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee271203fooEv,_ZTv0_n12_N7ee271203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee271203fooEv,_ZThn20_N7ee271203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee27120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee27120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN7ee271203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee27120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee27120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee271203fooEv,_ZTv0_n12_N7ee271203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee27120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7120__7ee27120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd7120__7ee27120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd7120__7ee27120[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee27120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee27120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee27120[] = {
+  {&(_ZTV7ee27120[4]),  4,13},
+  {&(_tg__ZTV6dd7120__7ee27120[4]),  4,6},
+  {&(_tg__ZTV5cc120__6dd7120__7ee27120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd7120__7ee27120[3]),  3,4},
+  {&(_ZTV7ee27120[9]),  9,13},
+  {&(_ZTV7ee27120[12]),  12,13},
+  {&(_tg__ZTV5cc120__7ee27120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee27120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee27120[];
+extern  VTBL_ENTRY _ZTV7ee27120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee27120[];
+static VTBL_ENTRY alt_thunk_names86[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee271203fooEv,_ZTv0_n12_N7ee271203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee271203fooEv,_ZThn20_N7ee271203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee27120 = {  "ee27120", // class name
+  bases_ee27120, 4,
+  &(vtc_ee27120[0]), // expected_vtbl_contents
+  &(vtt_ee27120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee27120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee27120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee27120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names86,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee37120  : virtual dd7120 {
+  int e;
+  virtual void  foo(); // _ZN7ee371203fooEv
+  ~ee37120(); // tgen
+  ee37120(); // tgen
+};
+//SIG(1 ee37120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 Fi}
+
+
+void  ee37120 ::foo(){vfunc_called(this, "_ZN7ee371203fooEv");}
+ee37120 ::~ee37120(){ note_dtor("ee37120", this);} // tgen
+ee37120 ::ee37120(){ note_ctor("ee37120", this);} // tgen
+
+static void Test_ee37120()
+{
+  extern Class_Descriptor cd_ee37120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee37120, buf);
+    ee37120 *dp, &lv = *(dp=new (buf) ee37120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee37120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee37120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee37120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee37120");
+    check_base_class_offset(lv, (cc120*)(dd7120*), ABISELECT(32,16), "ee37120");
+    check_base_class_offset(lv, (dd7120*), ABISELECT(16,8), "ee37120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee37120.e");
+    test_class_info(&lv, &cd_ee37120);
+    dp->~ee37120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee37120(Test_ee37120, "ee37120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee37120C1Ev();
+extern void _ZN7ee37120D1Ev();
+Name_Map name_map_ee37120[] = {
+  NSPAIR(_ZN7ee37120C1Ev),
+  NSPAIR(_ZN7ee37120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd7120;
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern  VTBL_ENTRY _ZTV6dd7120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7120[];
+static Base_Class bases_ee37120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    17, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    14, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    6, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee37120[];
+extern void _ZN7ee371203fooEv();
+extern void _ZN6dd71203barEv();
+extern void ABISELECT(_ZTv0_n48_N7ee371203fooEv,_ZTv0_n24_N7ee371203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee371203fooEv,_ZThn8_N7ee371203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee371203fooEv,_ZTv0_n12_N7ee371203fooEv)();
+extern void ABISELECT(_ZThn48_N7ee371203fooEv,_ZThn24_N7ee371203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee37120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee37120[0]),
+  (VTBL_ENTRY)&_ZN7ee371203fooEv,
+  ABISELECT(-16,-8),
+  0,
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee37120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7ee371203fooEv,_ZTv0_n24_N7ee371203fooEv),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee37120[0]),
+  ABISELECT(-48,-24),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee37120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee371203fooEv,_ZTv0_n12_N7ee371203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee37120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7120__7ee37120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd7120__7ee37120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd7120__7ee37120[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee37120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee37120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee37120[] = {
+  {&(_ZTV7ee37120[5]),  5,21},
+  {&(_ZTV7ee37120[12]),  12,21},
+  {&(_ZTV7ee37120[17]),  17,21},
+  {&(_ZTV7ee37120[20]),  20,21},
+  {&(_tg__ZTV6dd7120__7ee37120[4]),  4,6},
+  {&(_tg__ZTV5cc120__6dd7120__7ee37120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd7120__7ee37120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee37120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee37120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee37120[];
+extern  VTBL_ENTRY _ZTV7ee37120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee37120[];
+static VTBL_ENTRY alt_thunk_names87[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee371203fooEv,_ZTv0_n12_N7ee371203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N7ee371203fooEv,_ZThn24_N7ee371203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7ee371203fooEv,_ZTv0_n24_N7ee371203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee371203fooEv,_ZThn8_N7ee371203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee37120 = {  "ee37120", // class name
+  bases_ee37120, 4,
+  &(vtc_ee37120[0]), // expected_vtbl_contents
+  &(vtt_ee37120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee37120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee37120),21, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee37120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names87,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee47120  : dd7120 {
+  int e;
+  virtual void  bar(); // _ZN7ee471203barEv
+  ~ee47120(); // tgen
+  ee47120(); // tgen
+};
+//SIG(1 ee47120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} v1 Fi}
+
+
+void  ee47120 ::bar(){vfunc_called(this, "_ZN7ee471203barEv");}
+ee47120 ::~ee47120(){ note_dtor("ee47120", this);} // tgen
+ee47120 ::ee47120(){ note_ctor("ee47120", this);} // tgen
+
+static void Test_ee47120()
+{
+  extern Class_Descriptor cd_ee47120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee47120, buf);
+    ee47120 *dp, &lv = *(dp=new (buf) ee47120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee47120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee47120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee47120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee47120");
+    check_base_class_offset(lv, (cc120*)(dd7120*), ABISELECT(16,12), "ee47120");
+    check_base_class_offset(lv, (dd7120*), 0, "ee47120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee47120.e");
+    test_class_info(&lv, &cd_ee47120);
+    dp->~ee47120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee47120(Test_ee47120, "ee47120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee47120C1Ev();
+extern void _ZN7ee47120D1Ev();
+Name_Map name_map_ee47120[] = {
+  NSPAIR(_ZN7ee47120C1Ev),
+  NSPAIR(_ZN7ee47120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd7120;
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern  VTBL_ENTRY _ZTV6dd7120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7120[];
+static Base_Class bases_ee47120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee47120[];
+extern void _ZN7ee471203barEv();
+extern void _ZN6dd71203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee47120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee47120[0]),
+  (VTBL_ENTRY)&_ZN7ee471203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee47120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee47120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee47120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7120__7ee47120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd7120__7ee47120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd7120__7ee47120[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee47120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee47120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee47120[] = {
+  {&(_ZTV7ee47120[4]),  4,13},
+  {&(_tg__ZTV6dd7120__7ee47120[4]),  4,6},
+  {&(_tg__ZTV5cc120__6dd7120__7ee47120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd7120__7ee47120[3]),  3,4},
+  {&(_ZTV7ee47120[9]),  9,13},
+  {&(_ZTV7ee47120[12]),  12,13},
+  {&(_tg__ZTV5cc120__7ee47120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee47120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee47120[];
+extern  VTBL_ENTRY _ZTV7ee47120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee47120[];
+static VTBL_ENTRY alt_thunk_names88[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee47120 = {  "ee47120", // class name
+  bases_ee47120, 4,
+  &(vtc_ee47120[0]), // expected_vtbl_contents
+  &(vtt_ee47120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee47120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee47120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee47120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names88,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee57120  : virtual dd7120 {
+  int e;
+  virtual void  bar(); // _ZN7ee571203barEv
+  ~ee57120(); // tgen
+  ee57120(); // tgen
+};
+//SIG(1 ee57120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v2 Fi} Fi} v1 v2 Fi} v1 Fi}
+
+
+void  ee57120 ::bar(){vfunc_called(this, "_ZN7ee571203barEv");}
+ee57120 ::~ee57120(){ note_dtor("ee57120", this);} // tgen
+ee57120 ::ee57120(){ note_ctor("ee57120", this);} // tgen
+
+static void Test_ee57120()
+{
+  extern Class_Descriptor cd_ee57120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee57120, buf);
+    ee57120 *dp, &lv = *(dp=new (buf) ee57120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee57120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee57120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee57120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee57120");
+    check_base_class_offset(lv, (cc120*)(dd7120*), ABISELECT(32,16), "ee57120");
+    check_base_class_offset(lv, (dd7120*), ABISELECT(16,8), "ee57120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee57120.e");
+    test_class_info(&lv, &cd_ee57120);
+    dp->~ee57120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee57120(Test_ee57120, "ee57120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee57120C1Ev();
+extern void _ZN7ee57120D1Ev();
+Name_Map name_map_ee57120[] = {
+  NSPAIR(_ZN7ee57120C1Ev),
+  NSPAIR(_ZN7ee57120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd7120;
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern  VTBL_ENTRY _ZTV6dd7120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7120[];
+static Base_Class bases_ee57120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    17, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    14, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7120,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    6, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee57120[];
+extern void _ZN7ee571203barEv();
+extern void ABISELECT(_ZTv0_n40_N7ee571203barEv,_ZTv0_n20_N7ee571203barEv)();
+extern void ABISELECT(_ZThn16_N7ee571203barEv,_ZThn8_N7ee571203barEv)() __attribute__((weak));
+extern void _ZN6dd71203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee57120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee57120[0]),
+  (VTBL_ENTRY)&_ZN7ee571203barEv,
+  0,
+  ABISELECT(-16,-8),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee57120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee571203barEv,_ZTv0_n20_N7ee571203barEv),
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee57120[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee57120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee57120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7120__7ee57120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd7120__7ee57120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd7120__7ee57120[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee57120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee57120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee57120[] = {
+  {&(_ZTV7ee57120[5]),  5,21},
+  {&(_ZTV7ee57120[12]),  12,21},
+  {&(_ZTV7ee57120[17]),  17,21},
+  {&(_ZTV7ee57120[20]),  20,21},
+  {&(_tg__ZTV6dd7120__7ee57120[4]),  4,6},
+  {&(_tg__ZTV5cc120__6dd7120__7ee57120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd7120__7ee57120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee57120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee57120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee57120[];
+extern  VTBL_ENTRY _ZTV7ee57120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee57120[];
+static VTBL_ENTRY alt_thunk_names89[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee571203barEv,_ZTv0_n20_N7ee571203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee571203barEv,_ZThn8_N7ee571203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee57120 = {  "ee57120", // class name
+  bases_ee57120, 4,
+  &(vtc_ee57120[0]), // expected_vtbl_contents
+  &(vtt_ee57120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee57120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee57120),21, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee57120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names89,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee67120  : dd7120 {
+  int e;
+  virtual void  foo(); // _ZN7ee671203fooEv
+  virtual void  bar(); // _ZN7ee671203barEv
+  ~ee67120(); // tgen
+  ee67120(); // tgen
+};
+//SIG(1 ee67120) C1{ BC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 v2 Fi}
+
+
+void  ee67120 ::foo(){vfunc_called(this, "_ZN7ee671203fooEv");}
+void  ee67120 ::bar(){vfunc_called(this, "_ZN7ee671203barEv");}
+ee67120 ::~ee67120(){ note_dtor("ee67120", this);} // tgen
+ee67120 ::ee67120(){ note_ctor("ee67120", this);} // tgen
+
+static void Test_ee67120()
+{
+  extern Class_Descriptor cd_ee67120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(7,9)];
+    init_test(&cd_ee67120, buf);
+    ee67120 *dp, &lv = *(dp=new (buf) ee67120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,32), "sizeof(ee67120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee67120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(40,24), "ee67120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(32,20), "ee67120");
+    check_base_class_offset(lv, (cc120*)(dd7120*), ABISELECT(16,12), "ee67120");
+    check_base_class_offset(lv, (dd7120*), 0, "ee67120");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee67120.e");
+    test_class_info(&lv, &cd_ee67120);
+    dp->~ee67120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee67120(Test_ee67120, "ee67120", ABISELECT(48,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee67120C1Ev();
+extern void _ZN7ee67120D1Ev();
+Name_Map name_map_ee67120[] = {
+  NSPAIR(_ZN7ee67120C1Ev),
+  NSPAIR(_ZN7ee67120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd7120;
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern  VTBL_ENTRY _ZTV6dd7120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7120[];
+static Base_Class bases_ee67120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,24), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,20), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7120,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee67120[];
+extern void _ZN7ee671203barEv();
+extern void _ZN7ee671203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee671203fooEv,_ZTv0_n12_N7ee671203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee671203fooEv,_ZThn20_N7ee671203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee67120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee67120[0]),
+  (VTBL_ENTRY)&_ZN7ee671203barEv,
+  (VTBL_ENTRY)&_ZN7ee671203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee67120[0]),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI7ee67120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee671203fooEv,_ZTv0_n12_N7ee671203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee67120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7120__7ee67120[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd7120__7ee67120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd7120__7ee67120[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee67120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee67120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee67120[] = {
+  {&(_ZTV7ee67120[4]),  4,13},
+  {&(_tg__ZTV6dd7120__7ee67120[4]),  4,6},
+  {&(_tg__ZTV5cc120__6dd7120__7ee67120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd7120__7ee67120[3]),  3,4},
+  {&(_ZTV7ee67120[9]),  9,13},
+  {&(_ZTV7ee67120[12]),  12,13},
+  {&(_tg__ZTV5cc120__7ee67120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee67120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee67120[];
+extern  VTBL_ENTRY _ZTV7ee67120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee67120[];
+static VTBL_ENTRY alt_thunk_names90[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn20_N6dd71203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee671203fooEv,_ZTv0_n12_N7ee671203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee671203fooEv,_ZThn20_N7ee671203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee67120 = {  "ee67120", // class name
+  bases_ee67120, 4,
+  &(vtc_ee67120[0]), // expected_vtbl_contents
+  &(vtt_ee67120[0]), // expected_vtt_contents
+  ABISELECT(48,32), // object size
+  NSPAIRA(_ZTI7ee67120),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee67120),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee67120),8, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names90,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee77120  : virtual dd7120 {
+  int e;
+  virtual void  foo(); // _ZN7ee771203fooEv
+  virtual void  bar(); // _ZN7ee771203barEv
+  ~ee77120(); // tgen
+  ee77120(); // tgen
+};
+//SIG(1 ee77120) C1{ VBC2{ VBC3{ VBC4{ BC5{ Fi} v1 Fi} Fi} v2 v1 Fi} v1 v2 Fi}
+
+
+void  ee77120 ::foo(){vfunc_called(this, "_ZN7ee771203fooEv");}
+void  ee77120 ::bar(){vfunc_called(this, "_ZN7ee771203barEv");}
+ee77120 ::~ee77120(){ note_dtor("ee77120", this);} // tgen
+ee77120 ::ee77120(){ note_ctor("ee77120", this);} // tgen
+
+static void Test_ee77120()
+{
+  extern Class_Descriptor cd_ee77120;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(9,10)];
+    init_test(&cd_ee77120, buf);
+    ee77120 *dp, &lv = *(dp=new (buf) ee77120());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(64,36), "sizeof(ee77120)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee77120)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(56,28), "ee77120");
+    check_base_class_offset(lv, (bb20*)(cc120*), ABISELECT(48,24), "ee77120");
+    check_base_class_offset(lv, (cc120*)(dd7120*), ABISELECT(32,16), "ee77120");
+    check_base_class_offset(lv, (dd7120*), ABISELECT(16,8), "ee77120");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee77120.e");
+    test_class_info(&lv, &cd_ee77120);
+    dp->~ee77120();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee77120(Test_ee77120, "ee77120", ABISELECT(64,36));
+
+#else // __cplusplus
+
+extern void _ZN7ee77120C1Ev();
+extern void _ZN7ee77120D1Ev();
+Name_Map name_map_ee77120[] = {
+  NSPAIR(_ZN7ee77120C1Ev),
+  NSPAIR(_ZN7ee77120D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc120;
+extern VTBL_ENTRY _ZTI5cc120[];
+extern  VTBL_ENTRY _ZTV5cc120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5cc120[];
+extern Class_Descriptor cd_dd7120;
+extern VTBL_ENTRY _ZTI6dd7120[];
+extern  VTBL_ENTRY _ZTV6dd7120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd7120[];
+static Base_Class bases_ee77120[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(56,28), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(48,24), //bcp->offset
+    18, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_cc120,    ABISELECT(32,16), //bcp->offset
+    15, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd7120,    ABISELECT(16,8), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    6, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee77120[];
+extern void _ZN7ee771203fooEv();
+extern void _ZN7ee771203barEv();
+extern void ABISELECT(_ZTv0_n40_N7ee771203barEv,_ZTv0_n20_N7ee771203barEv)();
+extern void ABISELECT(_ZThn16_N7ee771203barEv,_ZThn8_N7ee771203barEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n48_N7ee771203fooEv,_ZTv0_n24_N7ee771203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee771203fooEv,_ZThn8_N7ee771203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N7ee771203fooEv,_ZTv0_n12_N7ee771203fooEv)();
+extern void ABISELECT(_ZThn48_N7ee771203fooEv,_ZThn24_N7ee771203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee77120[] = {
+  ABISELECT(48,24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee77120[0]),
+  (VTBL_ENTRY)&_ZN7ee771203fooEv,
+  (VTBL_ENTRY)&_ZN7ee771203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee77120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7ee771203barEv,_ZTv0_n20_N7ee771203barEv),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7ee771203fooEv,_ZTv0_n24_N7ee771203fooEv),
+  ABISELECT(16,8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee77120[0]),
+  ABISELECT(-48,-24),
+  ABISELECT(-48,-24),
+  (VTBL_ENTRY)&(_ZTI7ee77120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee771203fooEv,_ZTv0_n12_N7ee771203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee77120[];
+extern void _ZN6dd71203barEv();
+extern void _ZN6dd71203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd7120__7ee77120[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&_ZN6dd71203barEv,
+  (VTBL_ENTRY)&_ZN6dd71203fooEv,
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__6dd7120__7ee77120[] = {
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+};
+extern void ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv)();
+extern void ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb20__6dd7120__7ee77120[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI6dd7120[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv),
+};
+static  VTBL_ENTRY _tg__ZTV5cc120__7ee77120[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+};
+extern void _ZN4bb203fooEv();
+static  VTBL_ENTRY _tg__ZTV4bb20__5cc120__7ee77120[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI5cc120[0]),
+  (VTBL_ENTRY)&_ZN4bb203fooEv,
+};
+static  VTT_ENTRY vtt_ee77120[] = {
+  {&(_ZTV7ee77120[5]),  5,22},
+  {&(_ZTV7ee77120[13]),  13,22},
+  {&(_ZTV7ee77120[18]),  18,22},
+  {&(_ZTV7ee77120[21]),  21,22},
+  {&(_tg__ZTV6dd7120__7ee77120[4]),  4,6},
+  {&(_tg__ZTV5cc120__6dd7120__7ee77120[3]),  3,3},
+  {&(_tg__ZTV4bb20__6dd7120__7ee77120[3]),  3,4},
+  {&(_tg__ZTV5cc120__7ee77120[3]),  3,3},
+  {&(_tg__ZTV4bb20__5cc120__7ee77120[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee77120[];
+extern  VTBL_ENTRY _ZTV7ee77120[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee77120[];
+static VTBL_ENTRY alt_thunk_names91[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd71203fooEv,_ZTv0_n12_N6dd71203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N6dd71203fooEv,_ZThn16_N6dd71203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee771203fooEv,_ZTv0_n12_N7ee771203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N7ee771203fooEv,_ZThn24_N7ee771203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7ee771203fooEv,_ZTv0_n24_N7ee771203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee771203fooEv,_ZThn8_N7ee771203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7ee771203barEv,_ZTv0_n20_N7ee771203barEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee771203barEv,_ZThn8_N7ee771203barEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee77120 = {  "ee77120", // class name
+  bases_ee77120, 4,
+  &(vtc_ee77120[0]), // expected_vtbl_contents
+  &(vtt_ee77120[0]), // expected_vtt_contents
+  ABISELECT(64,36), // object size
+  NSPAIRA(_ZTI7ee77120),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee77120),22, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee77120),9, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names91,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  cc220  : bb20 {
+  int c;
+  virtual void  foo(); // _ZN5cc2203fooEv
+  ~cc220(); // tgen
+  cc220(); // tgen
+};
+//SIG(-1 cc220) C1{ BC2{ BC3{ Fi} v1 Fi} v1 Fi}
+
+
+void  cc220 ::foo(){vfunc_called(this, "_ZN5cc2203fooEv");}
+cc220 ::~cc220(){ note_dtor("cc220", this);} // tgen
+cc220 ::cc220(){ note_ctor("cc220", this);} // tgen
+
+static void Test_cc220()
+{
+  extern Class_Descriptor cd_cc220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(4,5)];
+    init_test(&cd_cc220, buf);
+    cc220 *dp, &lv = *(dp=new (buf) cc220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,16), "sizeof(cc220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc220)");
+    check_base_class_offset(lv, (aa0*)(bb20*), ABISELECT(8,4), "cc220");
+    check_base_class_offset(lv, (bb20*), 0, "cc220");
+    check_field_offset(lv, c, ABISELECT(16,12), "cc220.c");
+    test_class_info(&lv, &cd_cc220);
+    dp->~cc220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc220(Test_cc220, "cc220", ABISELECT(24,16));
+
+#else // __cplusplus
+
+extern void _ZN5cc220C1Ev();
+extern void _ZN5cc220D1Ev();
+Name_Map name_map_cc220[] = {
+  NSPAIR(_ZN5cc220C1Ev),
+  NSPAIR(_ZN5cc220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+static Base_Class bases_cc220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI5cc220[];
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_cc220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI5cc220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+Class_Descriptor cd_cc220 = {  "cc220", // class name
+  bases_cc220, 2,
+  &(vtc_cc220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(24,16), // object size
+  NSPAIRA(_ZTI5cc220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV5cc220),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  1, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd0220  : cc220 {
+  int d;
+  ~dd0220(); // tgen
+  dd0220(); // tgen
+};
+//SIG(-1 dd0220) C1{ BC2{ BC3{ BC4{ Fi} v1 Fi} v1 Fi} Fi}
+
+
+dd0220 ::~dd0220(){ note_dtor("dd0220", this);} // tgen
+dd0220 ::dd0220(){ note_ctor("dd0220", this);} // tgen
+
+static void Test_dd0220()
+{
+  extern Class_Descriptor cd_dd0220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(4,6)];
+    init_test(&cd_dd0220, buf);
+    dd0220 *dp, &lv = *(dp=new (buf) dd0220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,20), "sizeof(dd0220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd0220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(8,4), "dd0220");
+    check_base_class_offset(lv, (bb20*)(cc220*), 0, "dd0220");
+    check_base_class_offset(lv, (cc220*), 0, "dd0220");
+    check_field_offset(lv, d, ABISELECT(20,16), "dd0220.d");
+    test_class_info(&lv, &cd_dd0220);
+    dp->~dd0220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd0220(Test_dd0220, "dd0220", ABISELECT(24,20));
+
+#else // __cplusplus
+
+extern void _ZN6dd0220C1Ev();
+extern void _ZN6dd0220D1Ev();
+Name_Map name_map_dd0220[] = {
+  NSPAIR(_ZN6dd0220C1Ev),
+  NSPAIR(_ZN6dd0220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+static Base_Class bases_dd0220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    0, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_dd0220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd0220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern  VTBL_ENTRY _ZTV6dd0220[];
+Class_Descriptor cd_dd0220 = {  "dd0220", // class name
+  bases_dd0220, 3,
+  &(vtc_dd0220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(24,20), // object size
+  NSPAIRA(_ZTI6dd0220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd0220),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  2, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee00220  : dd0220 {
+  int e;
+  ~ee00220(); // tgen
+  ee00220(); // tgen
+};
+//SIG(1 ee00220) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} Fi}
+
+
+ee00220 ::~ee00220(){ note_dtor("ee00220", this);} // tgen
+ee00220 ::ee00220(){ note_ctor("ee00220", this);} // tgen
+
+static void Test_ee00220()
+{
+  extern Class_Descriptor cd_ee00220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee00220, buf);
+    ee00220 *dp, &lv = *(dp=new (buf) ee00220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee00220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee00220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd0220*), ABISELECT(8,4), "ee00220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd0220*), 0, "ee00220");
+    check_base_class_offset(lv, (cc220*)(dd0220*), 0, "ee00220");
+    check_base_class_offset(lv, (dd0220*), 0, "ee00220");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee00220.e");
+    test_class_info(&lv, &cd_ee00220);
+    dp->~ee00220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee00220(Test_ee00220, "ee00220", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee00220C1Ev();
+extern void _ZN7ee00220D1Ev();
+Name_Map name_map_ee00220[] = {
+  NSPAIR(_ZN7ee00220C1Ev),
+  NSPAIR(_ZN7ee00220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd0220;
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern  VTBL_ENTRY _ZTV6dd0220[];
+static Base_Class bases_ee00220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    0, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee00220[];
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_ee00220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee00220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTI7ee00220[];
+extern  VTBL_ENTRY _ZTV7ee00220[];
+Class_Descriptor cd_ee00220 = {  "ee00220", // class name
+  bases_ee00220, 4,
+  &(vtc_ee00220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee00220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee00220),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee10220  : virtual dd0220 {
+  int e;
+  ~ee10220(); // tgen
+  ee10220(); // tgen
+};
+//SIG(1 ee10220) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} Fi}
+
+
+ee10220 ::~ee10220(){ note_dtor("ee10220", this);} // tgen
+ee10220 ::ee10220(){ note_ctor("ee10220", this);} // tgen
+
+static void Test_ee10220()
+{
+  extern Class_Descriptor cd_ee10220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee10220, buf);
+    ee10220 *dp, &lv = *(dp=new (buf) ee10220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee10220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee10220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd0220*), ABISELECT(24,12), "ee10220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd0220*), ABISELECT(16,8), "ee10220");
+    check_base_class_offset(lv, (cc220*)(dd0220*), ABISELECT(16,8), "ee10220");
+    check_base_class_offset(lv, (dd0220*), ABISELECT(16,8), "ee10220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee10220.e");
+    test_class_info(&lv, &cd_ee10220);
+    dp->~ee10220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee10220(Test_ee10220, "ee10220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee10220C1Ev();
+extern void _ZN7ee10220D1Ev();
+Name_Map name_map_ee10220[] = {
+  NSPAIR(_ZN7ee10220C1Ev),
+  NSPAIR(_ZN7ee10220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd0220;
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern  VTBL_ENTRY _ZTV6dd0220[];
+static Base_Class bases_ee10220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0220,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee10220[];
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_ee10220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee10220[0]),
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee10220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee10220[];
+static  VTT_ENTRY vtt_ee10220[] = {
+  {&(_ZTV7ee10220[3]),  3,7},
+  {&(_ZTV7ee10220[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI7ee10220[];
+extern  VTBL_ENTRY _ZTV7ee10220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee10220[];
+Class_Descriptor cd_ee10220 = {  "ee10220", // class name
+  bases_ee10220, 4,
+  &(vtc_ee10220[0]), // expected_vtbl_contents
+  &(vtt_ee10220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee10220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee10220),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee10220),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee20220  : dd0220 {
+  int e;
+  virtual void  foo(); // _ZN7ee202203fooEv
+  ~ee20220(); // tgen
+  ee20220(); // tgen
+};
+//SIG(1 ee20220) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} v1 Fi}
+
+
+void  ee20220 ::foo(){vfunc_called(this, "_ZN7ee202203fooEv");}
+ee20220 ::~ee20220(){ note_dtor("ee20220", this);} // tgen
+ee20220 ::ee20220(){ note_ctor("ee20220", this);} // tgen
+
+static void Test_ee20220()
+{
+  extern Class_Descriptor cd_ee20220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee20220, buf);
+    ee20220 *dp, &lv = *(dp=new (buf) ee20220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee20220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee20220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd0220*), ABISELECT(8,4), "ee20220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd0220*), 0, "ee20220");
+    check_base_class_offset(lv, (cc220*)(dd0220*), 0, "ee20220");
+    check_base_class_offset(lv, (dd0220*), 0, "ee20220");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee20220.e");
+    test_class_info(&lv, &cd_ee20220);
+    dp->~ee20220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee20220(Test_ee20220, "ee20220", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee20220C1Ev();
+extern void _ZN7ee20220D1Ev();
+Name_Map name_map_ee20220[] = {
+  NSPAIR(_ZN7ee20220C1Ev),
+  NSPAIR(_ZN7ee20220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd0220;
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern  VTBL_ENTRY _ZTV6dd0220[];
+static Base_Class bases_ee20220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee20220[];
+extern void _ZN7ee202203fooEv();
+static  VTBL_ENTRY vtc_ee20220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee20220[0]),
+  (VTBL_ENTRY)&_ZN7ee202203fooEv,
+};
+extern VTBL_ENTRY _ZTI7ee20220[];
+extern  VTBL_ENTRY _ZTV7ee20220[];
+Class_Descriptor cd_ee20220 = {  "ee20220", // class name
+  bases_ee20220, 4,
+  &(vtc_ee20220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee20220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee20220),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee30220  : virtual dd0220 {
+  int e;
+  virtual void  foo(); // _ZN7ee302203fooEv
+  ~ee30220(); // tgen
+  ee30220(); // tgen
+};
+//SIG(1 ee30220) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} v1 Fi}
+
+
+void  ee30220 ::foo(){vfunc_called(this, "_ZN7ee302203fooEv");}
+ee30220 ::~ee30220(){ note_dtor("ee30220", this);} // tgen
+ee30220 ::ee30220(){ note_ctor("ee30220", this);} // tgen
+
+static void Test_ee30220()
+{
+  extern Class_Descriptor cd_ee30220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee30220, buf);
+    ee30220 *dp, &lv = *(dp=new (buf) ee30220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee30220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee30220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd0220*), ABISELECT(24,12), "ee30220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd0220*), ABISELECT(16,8), "ee30220");
+    check_base_class_offset(lv, (cc220*)(dd0220*), ABISELECT(16,8), "ee30220");
+    check_base_class_offset(lv, (dd0220*), ABISELECT(16,8), "ee30220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee30220.e");
+    test_class_info(&lv, &cd_ee30220);
+    dp->~ee30220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee30220(Test_ee30220, "ee30220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee30220C1Ev();
+extern void _ZN7ee30220D1Ev();
+Name_Map name_map_ee30220[] = {
+  NSPAIR(_ZN7ee30220C1Ev),
+  NSPAIR(_ZN7ee30220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd0220;
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern  VTBL_ENTRY _ZTV6dd0220[];
+static Base_Class bases_ee30220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0220,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee30220[];
+extern void _ZN7ee302203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee302203fooEv,_ZTv0_n12_N7ee302203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee302203fooEv,_ZThn8_N7ee302203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee30220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee30220[0]),
+  (VTBL_ENTRY)&_ZN7ee302203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee30220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee302203fooEv,_ZTv0_n12_N7ee302203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee30220[];
+static  VTT_ENTRY vtt_ee30220[] = {
+  {&(_ZTV7ee30220[3]),  3,8},
+  {&(_ZTV7ee30220[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee30220[];
+extern  VTBL_ENTRY _ZTV7ee30220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee30220[];
+static VTBL_ENTRY alt_thunk_names92[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee302203fooEv,_ZTv0_n12_N7ee302203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee302203fooEv,_ZThn8_N7ee302203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee30220 = {  "ee30220", // class name
+  bases_ee30220, 4,
+  &(vtc_ee30220[0]), // expected_vtbl_contents
+  &(vtt_ee30220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee30220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee30220),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee30220),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names92,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee40220  : dd0220 {
+  int e;
+  virtual void  bar(); // _ZN7ee402203barEv
+  ~ee40220(); // tgen
+  ee40220(); // tgen
+};
+//SIG(1 ee40220) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} v2 Fi} Fi} v1 Fi}
+
+
+void  ee40220 ::bar(){vfunc_called(this, "_ZN7ee402203barEv");}
+ee40220 ::~ee40220(){ note_dtor("ee40220", this);} // tgen
+ee40220 ::ee40220(){ note_ctor("ee40220", this);} // tgen
+
+static void Test_ee40220()
+{
+  extern Class_Descriptor cd_ee40220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee40220, buf);
+    ee40220 *dp, &lv = *(dp=new (buf) ee40220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee40220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee40220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd0220*), ABISELECT(8,4), "ee40220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd0220*), 0, "ee40220");
+    check_base_class_offset(lv, (cc220*)(dd0220*), 0, "ee40220");
+    check_base_class_offset(lv, (dd0220*), 0, "ee40220");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee40220.e");
+    test_class_info(&lv, &cd_ee40220);
+    dp->~ee40220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee40220(Test_ee40220, "ee40220", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee40220C1Ev();
+extern void _ZN7ee40220D1Ev();
+Name_Map name_map_ee40220[] = {
+  NSPAIR(_ZN7ee40220C1Ev),
+  NSPAIR(_ZN7ee40220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd0220;
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern  VTBL_ENTRY _ZTV6dd0220[];
+static Base_Class bases_ee40220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee40220[];
+extern void _ZN5cc2203fooEv();
+extern void _ZN7ee402203barEv();
+static  VTBL_ENTRY vtc_ee40220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee40220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+  (VTBL_ENTRY)&_ZN7ee402203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee40220[];
+extern  VTBL_ENTRY _ZTV7ee40220[];
+Class_Descriptor cd_ee40220 = {  "ee40220", // class name
+  bases_ee40220, 4,
+  &(vtc_ee40220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee40220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee40220),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee50220  : virtual dd0220 {
+  int e;
+  virtual void  bar(); // _ZN7ee502203barEv
+  ~ee50220(); // tgen
+  ee50220(); // tgen
+};
+//SIG(1 ee50220) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} v2 Fi} Fi} v1 Fi}
+
+
+void  ee50220 ::bar(){vfunc_called(this, "_ZN7ee502203barEv");}
+ee50220 ::~ee50220(){ note_dtor("ee50220", this);} // tgen
+ee50220 ::ee50220(){ note_ctor("ee50220", this);} // tgen
+
+static void Test_ee50220()
+{
+  extern Class_Descriptor cd_ee50220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee50220, buf);
+    ee50220 *dp, &lv = *(dp=new (buf) ee50220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee50220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee50220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd0220*), ABISELECT(24,12), "ee50220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd0220*), ABISELECT(16,8), "ee50220");
+    check_base_class_offset(lv, (cc220*)(dd0220*), ABISELECT(16,8), "ee50220");
+    check_base_class_offset(lv, (dd0220*), ABISELECT(16,8), "ee50220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee50220.e");
+    test_class_info(&lv, &cd_ee50220);
+    dp->~ee50220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee50220(Test_ee50220, "ee50220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee50220C1Ev();
+extern void _ZN7ee50220D1Ev();
+Name_Map name_map_ee50220[] = {
+  NSPAIR(_ZN7ee50220C1Ev),
+  NSPAIR(_ZN7ee50220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd0220;
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern  VTBL_ENTRY _ZTV6dd0220[];
+static Base_Class bases_ee50220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0220,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee50220[];
+extern void _ZN7ee502203barEv();
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_ee50220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee50220[0]),
+  (VTBL_ENTRY)&_ZN7ee502203barEv,
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee50220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee50220[];
+static  VTT_ENTRY vtt_ee50220[] = {
+  {&(_ZTV7ee50220[3]),  3,8},
+  {&(_ZTV7ee50220[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee50220[];
+extern  VTBL_ENTRY _ZTV7ee50220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee50220[];
+Class_Descriptor cd_ee50220 = {  "ee50220", // class name
+  bases_ee50220, 4,
+  &(vtc_ee50220[0]), // expected_vtbl_contents
+  &(vtt_ee50220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee50220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee50220),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee50220),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee60220  : dd0220 {
+  int e;
+  virtual void  foo(); // _ZN7ee602203fooEv
+  virtual void  bar(); // _ZN7ee602203barEv
+  ~ee60220(); // tgen
+  ee60220(); // tgen
+};
+//SIG(1 ee60220) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} v1 v2 Fi}
+
+
+void  ee60220 ::foo(){vfunc_called(this, "_ZN7ee602203fooEv");}
+void  ee60220 ::bar(){vfunc_called(this, "_ZN7ee602203barEv");}
+ee60220 ::~ee60220(){ note_dtor("ee60220", this);} // tgen
+ee60220 ::ee60220(){ note_ctor("ee60220", this);} // tgen
+
+static void Test_ee60220()
+{
+  extern Class_Descriptor cd_ee60220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee60220, buf);
+    ee60220 *dp, &lv = *(dp=new (buf) ee60220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee60220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee60220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd0220*), ABISELECT(8,4), "ee60220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd0220*), 0, "ee60220");
+    check_base_class_offset(lv, (cc220*)(dd0220*), 0, "ee60220");
+    check_base_class_offset(lv, (dd0220*), 0, "ee60220");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee60220.e");
+    test_class_info(&lv, &cd_ee60220);
+    dp->~ee60220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee60220(Test_ee60220, "ee60220", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee60220C1Ev();
+extern void _ZN7ee60220D1Ev();
+Name_Map name_map_ee60220[] = {
+  NSPAIR(_ZN7ee60220C1Ev),
+  NSPAIR(_ZN7ee60220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd0220;
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern  VTBL_ENTRY _ZTV6dd0220[];
+static Base_Class bases_ee60220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee60220[];
+extern void _ZN7ee602203fooEv();
+extern void _ZN7ee602203barEv();
+static  VTBL_ENTRY vtc_ee60220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee60220[0]),
+  (VTBL_ENTRY)&_ZN7ee602203fooEv,
+  (VTBL_ENTRY)&_ZN7ee602203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee60220[];
+extern  VTBL_ENTRY _ZTV7ee60220[];
+Class_Descriptor cd_ee60220 = {  "ee60220", // class name
+  bases_ee60220, 4,
+  &(vtc_ee60220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee60220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee60220),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee70220  : virtual dd0220 {
+  int e;
+  virtual void  foo(); // _ZN7ee702203fooEv
+  virtual void  bar(); // _ZN7ee702203barEv
+  ~ee70220(); // tgen
+  ee70220(); // tgen
+};
+//SIG(1 ee70220) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} v1 v2 Fi}
+
+
+void  ee70220 ::foo(){vfunc_called(this, "_ZN7ee702203fooEv");}
+void  ee70220 ::bar(){vfunc_called(this, "_ZN7ee702203barEv");}
+ee70220 ::~ee70220(){ note_dtor("ee70220", this);} // tgen
+ee70220 ::ee70220(){ note_ctor("ee70220", this);} // tgen
+
+static void Test_ee70220()
+{
+  extern Class_Descriptor cd_ee70220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee70220, buf);
+    ee70220 *dp, &lv = *(dp=new (buf) ee70220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee70220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee70220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd0220*), ABISELECT(24,12), "ee70220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd0220*), ABISELECT(16,8), "ee70220");
+    check_base_class_offset(lv, (cc220*)(dd0220*), ABISELECT(16,8), "ee70220");
+    check_base_class_offset(lv, (dd0220*), ABISELECT(16,8), "ee70220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee70220.e");
+    test_class_info(&lv, &cd_ee70220);
+    dp->~ee70220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee70220(Test_ee70220, "ee70220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee70220C1Ev();
+extern void _ZN7ee70220D1Ev();
+Name_Map name_map_ee70220[] = {
+  NSPAIR(_ZN7ee70220C1Ev),
+  NSPAIR(_ZN7ee70220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd0220;
+extern VTBL_ENTRY _ZTI6dd0220[];
+extern  VTBL_ENTRY _ZTV6dd0220[];
+static Base_Class bases_ee70220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd0220,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee70220[];
+extern void _ZN7ee702203fooEv();
+extern void _ZN7ee702203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee702203fooEv,_ZTv0_n12_N7ee702203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee702203fooEv,_ZThn8_N7ee702203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee70220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee70220[0]),
+  (VTBL_ENTRY)&_ZN7ee702203fooEv,
+  (VTBL_ENTRY)&_ZN7ee702203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee70220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee702203fooEv,_ZTv0_n12_N7ee702203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee70220[];
+static  VTT_ENTRY vtt_ee70220[] = {
+  {&(_ZTV7ee70220[3]),  3,9},
+  {&(_ZTV7ee70220[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee70220[];
+extern  VTBL_ENTRY _ZTV7ee70220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee70220[];
+static VTBL_ENTRY alt_thunk_names93[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee702203fooEv,_ZTv0_n12_N7ee702203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee702203fooEv,_ZThn8_N7ee702203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee70220 = {  "ee70220", // class name
+  bases_ee70220, 4,
+  &(vtc_ee70220[0]), // expected_vtbl_contents
+  &(vtt_ee70220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee70220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee70220),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee70220),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names93,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd1220  : virtual cc220 {
+  int d;
+  ~dd1220(); // tgen
+  dd1220(); // tgen
+};
+//SIG(-1 dd1220) C1{ VBC2{ BC3{ BC4{ Fi} v1 Fi} v1 Fi} Fi}
+
+
+dd1220 ::~dd1220(){ note_dtor("dd1220", this);} // tgen
+dd1220 ::dd1220(){ note_ctor("dd1220", this);} // tgen
+
+static void Test_dd1220()
+{
+  extern Class_Descriptor cd_dd1220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,7)];
+    init_test(&cd_dd1220, buf);
+    dd1220 *dp, &lv = *(dp=new (buf) dd1220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,24), "sizeof(dd1220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd1220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(24,12), "dd1220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(16,8), "dd1220");
+    check_base_class_offset(lv, (cc220*), ABISELECT(16,8), "dd1220");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd1220.d");
+    test_class_info(&lv, &cd_dd1220);
+    dp->~dd1220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd1220(Test_dd1220, "dd1220", ABISELECT(40,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd1220C1Ev();
+extern void _ZN6dd1220D1Ev();
+Name_Map name_map_dd1220[] = {
+  NSPAIR(_ZN6dd1220C1Ev),
+  NSPAIR(_ZN6dd1220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+static Base_Class bases_dd1220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_dd1220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTV6dd1220[];
+static  VTT_ENTRY vtt_dd1220[] = {
+  {&(_ZTV6dd1220[3]),  3,7},
+  {&(_ZTV6dd1220[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern  VTBL_ENTRY _ZTV6dd1220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1220[];
+Class_Descriptor cd_dd1220 = {  "dd1220", // class name
+  bases_dd1220, 3,
+  &(vtc_dd1220[0]), // expected_vtbl_contents
+  &(vtt_dd1220[0]), // expected_vtt_contents
+  ABISELECT(40,24), // object size
+  NSPAIRA(_ZTI6dd1220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd1220),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd1220),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee01220  : dd1220 {
+  int e;
+  ~ee01220(); // tgen
+  ee01220(); // tgen
+};
+//SIG(1 ee01220) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} Fi}
+
+
+ee01220 ::~ee01220(){ note_dtor("ee01220", this);} // tgen
+ee01220 ::ee01220(){ note_ctor("ee01220", this);} // tgen
+
+static void Test_ee01220()
+{
+  extern Class_Descriptor cd_ee01220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee01220, buf);
+    ee01220 *dp, &lv = *(dp=new (buf) ee01220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee01220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee01220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(24,16), "ee01220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(16,12), "ee01220");
+    check_base_class_offset(lv, (cc220*)(dd1220*), ABISELECT(16,12), "ee01220");
+    check_base_class_offset(lv, (dd1220*), 0, "ee01220");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee01220.e");
+    test_class_info(&lv, &cd_ee01220);
+    dp->~ee01220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee01220(Test_ee01220, "ee01220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee01220C1Ev();
+extern void _ZN7ee01220D1Ev();
+Name_Map name_map_ee01220[] = {
+  NSPAIR(_ZN7ee01220C1Ev),
+  NSPAIR(_ZN7ee01220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd1220;
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern  VTBL_ENTRY _ZTV6dd1220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1220[];
+static Base_Class bases_ee01220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,12), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee01220[];
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_ee01220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee01220[0]),
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee01220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee01220[];
+static  VTBL_ENTRY _tg__ZTV6dd1220__7ee01220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+};
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd1220__7ee01220[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+static  VTT_ENTRY vtt_ee01220[] = {
+  {&(_ZTV7ee01220[3]),  3,7},
+  {&(_tg__ZTV6dd1220__7ee01220[3]),  3,3},
+  {&(_tg__ZTV5cc220__6dd1220__7ee01220[3]),  3,4},
+  {&(_ZTV7ee01220[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI7ee01220[];
+extern  VTBL_ENTRY _ZTV7ee01220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee01220[];
+Class_Descriptor cd_ee01220 = {  "ee01220", // class name
+  bases_ee01220, 4,
+  &(vtc_ee01220[0]), // expected_vtbl_contents
+  &(vtt_ee01220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee01220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee01220),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee01220),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee11220  : virtual dd1220 {
+  int e;
+  ~ee11220(); // tgen
+  ee11220(); // tgen
+};
+//SIG(1 ee11220) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} Fi}
+
+
+ee11220 ::~ee11220(){ note_dtor("ee11220", this);} // tgen
+ee11220 ::ee11220(){ note_ctor("ee11220", this);} // tgen
+
+static void Test_ee11220()
+{
+  extern Class_Descriptor cd_ee11220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee11220, buf);
+    ee11220 *dp, &lv = *(dp=new (buf) ee11220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee11220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee11220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(40,20), "ee11220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(32,16), "ee11220");
+    check_base_class_offset(lv, (cc220*)(dd1220*), ABISELECT(32,16), "ee11220");
+    check_base_class_offset(lv, (dd1220*), ABISELECT(16,8), "ee11220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee11220.e");
+    test_class_info(&lv, &cd_ee11220);
+    dp->~ee11220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee11220(Test_ee11220, "ee11220", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee11220C1Ev();
+extern void _ZN7ee11220D1Ev();
+Name_Map name_map_ee11220[] = {
+  NSPAIR(_ZN7ee11220C1Ev),
+  NSPAIR(_ZN7ee11220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd1220;
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern  VTBL_ENTRY _ZTV6dd1220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1220[];
+static Base_Class bases_ee11220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(32,16), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1220,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee11220[];
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_ee11220[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee11220[0]),
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee11220[0]),
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee11220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee11220[];
+static  VTBL_ENTRY _tg__ZTV6dd1220__7ee11220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+};
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd1220__7ee11220[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+static  VTT_ENTRY vtt_ee11220[] = {
+  {&(_ZTV7ee11220[4]),  4,11},
+  {&(_ZTV7ee11220[7]),  7,11},
+  {&(_ZTV7ee11220[10]),  10,11},
+  {&(_tg__ZTV6dd1220__7ee11220[3]),  3,3},
+  {&(_tg__ZTV5cc220__6dd1220__7ee11220[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee11220[];
+extern  VTBL_ENTRY _ZTV7ee11220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee11220[];
+Class_Descriptor cd_ee11220 = {  "ee11220", // class name
+  bases_ee11220, 4,
+  &(vtc_ee11220[0]), // expected_vtbl_contents
+  &(vtt_ee11220[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee11220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee11220),11, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee11220),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee21220  : dd1220 {
+  int e;
+  virtual void  foo(); // _ZN7ee212203fooEv
+  ~ee21220(); // tgen
+  ee21220(); // tgen
+};
+//SIG(1 ee21220) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} v1 Fi}
+
+
+void  ee21220 ::foo(){vfunc_called(this, "_ZN7ee212203fooEv");}
+ee21220 ::~ee21220(){ note_dtor("ee21220", this);} // tgen
+ee21220 ::ee21220(){ note_ctor("ee21220", this);} // tgen
+
+static void Test_ee21220()
+{
+  extern Class_Descriptor cd_ee21220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee21220, buf);
+    ee21220 *dp, &lv = *(dp=new (buf) ee21220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee21220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee21220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(24,16), "ee21220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(16,12), "ee21220");
+    check_base_class_offset(lv, (cc220*)(dd1220*), ABISELECT(16,12), "ee21220");
+    check_base_class_offset(lv, (dd1220*), 0, "ee21220");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee21220.e");
+    test_class_info(&lv, &cd_ee21220);
+    dp->~ee21220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee21220(Test_ee21220, "ee21220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee21220C1Ev();
+extern void _ZN7ee21220D1Ev();
+Name_Map name_map_ee21220[] = {
+  NSPAIR(_ZN7ee21220C1Ev),
+  NSPAIR(_ZN7ee21220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd1220;
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern  VTBL_ENTRY _ZTV6dd1220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1220[];
+static Base_Class bases_ee21220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee21220[];
+extern void _ZN7ee212203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee212203fooEv,_ZTv0_n12_N7ee212203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee212203fooEv,_ZThn12_N7ee212203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee21220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee21220[0]),
+  (VTBL_ENTRY)&_ZN7ee212203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee21220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee212203fooEv,_ZTv0_n12_N7ee212203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee21220[];
+static  VTBL_ENTRY _tg__ZTV6dd1220__7ee21220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+};
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd1220__7ee21220[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+static  VTT_ENTRY vtt_ee21220[] = {
+  {&(_ZTV7ee21220[3]),  3,8},
+  {&(_tg__ZTV6dd1220__7ee21220[3]),  3,3},
+  {&(_tg__ZTV5cc220__6dd1220__7ee21220[3]),  3,4},
+  {&(_ZTV7ee21220[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee21220[];
+extern  VTBL_ENTRY _ZTV7ee21220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee21220[];
+static VTBL_ENTRY alt_thunk_names94[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee212203fooEv,_ZTv0_n12_N7ee212203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee212203fooEv,_ZThn12_N7ee212203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee21220 = {  "ee21220", // class name
+  bases_ee21220, 4,
+  &(vtc_ee21220[0]), // expected_vtbl_contents
+  &(vtt_ee21220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee21220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee21220),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee21220),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names94,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee31220  : virtual dd1220 {
+  int e;
+  virtual void  foo(); // _ZN7ee312203fooEv
+  ~ee31220(); // tgen
+  ee31220(); // tgen
+};
+//SIG(1 ee31220) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} v1 Fi}
+
+
+void  ee31220 ::foo(){vfunc_called(this, "_ZN7ee312203fooEv");}
+ee31220 ::~ee31220(){ note_dtor("ee31220", this);} // tgen
+ee31220 ::ee31220(){ note_ctor("ee31220", this);} // tgen
+
+static void Test_ee31220()
+{
+  extern Class_Descriptor cd_ee31220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee31220, buf);
+    ee31220 *dp, &lv = *(dp=new (buf) ee31220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee31220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee31220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(40,20), "ee31220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(32,16), "ee31220");
+    check_base_class_offset(lv, (cc220*)(dd1220*), ABISELECT(32,16), "ee31220");
+    check_base_class_offset(lv, (dd1220*), ABISELECT(16,8), "ee31220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee31220.e");
+    test_class_info(&lv, &cd_ee31220);
+    dp->~ee31220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee31220(Test_ee31220, "ee31220", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee31220C1Ev();
+extern void _ZN7ee31220D1Ev();
+Name_Map name_map_ee31220[] = {
+  NSPAIR(_ZN7ee31220C1Ev),
+  NSPAIR(_ZN7ee31220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd1220;
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern  VTBL_ENTRY _ZTV6dd1220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1220[];
+static Base_Class bases_ee31220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(32,16), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1220,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee31220[];
+extern void _ZN7ee312203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee312203fooEv,_ZTv0_n12_N7ee312203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee312203fooEv,_ZThn16_N7ee312203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee31220[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee31220[0]),
+  (VTBL_ENTRY)&_ZN7ee312203fooEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee31220[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee31220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee312203fooEv,_ZTv0_n12_N7ee312203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee31220[];
+static  VTBL_ENTRY _tg__ZTV6dd1220__7ee31220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+};
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd1220__7ee31220[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+static  VTT_ENTRY vtt_ee31220[] = {
+  {&(_ZTV7ee31220[4]),  4,12},
+  {&(_ZTV7ee31220[8]),  8,12},
+  {&(_ZTV7ee31220[11]),  11,12},
+  {&(_tg__ZTV6dd1220__7ee31220[3]),  3,3},
+  {&(_tg__ZTV5cc220__6dd1220__7ee31220[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee31220[];
+extern  VTBL_ENTRY _ZTV7ee31220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee31220[];
+static VTBL_ENTRY alt_thunk_names95[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee312203fooEv,_ZTv0_n12_N7ee312203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee312203fooEv,_ZThn16_N7ee312203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee31220 = {  "ee31220", // class name
+  bases_ee31220, 4,
+  &(vtc_ee31220[0]), // expected_vtbl_contents
+  &(vtt_ee31220[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee31220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee31220),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee31220),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names95,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee41220  : dd1220 {
+  int e;
+  virtual void  bar(); // _ZN7ee412203barEv
+  ~ee41220(); // tgen
+  ee41220(); // tgen
+};
+//SIG(1 ee41220) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} v2 Fi} Fi} v1 Fi}
+
+
+void  ee41220 ::bar(){vfunc_called(this, "_ZN7ee412203barEv");}
+ee41220 ::~ee41220(){ note_dtor("ee41220", this);} // tgen
+ee41220 ::ee41220(){ note_ctor("ee41220", this);} // tgen
+
+static void Test_ee41220()
+{
+  extern Class_Descriptor cd_ee41220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee41220, buf);
+    ee41220 *dp, &lv = *(dp=new (buf) ee41220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee41220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee41220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(24,16), "ee41220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(16,12), "ee41220");
+    check_base_class_offset(lv, (cc220*)(dd1220*), ABISELECT(16,12), "ee41220");
+    check_base_class_offset(lv, (dd1220*), 0, "ee41220");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee41220.e");
+    test_class_info(&lv, &cd_ee41220);
+    dp->~ee41220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee41220(Test_ee41220, "ee41220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee41220C1Ev();
+extern void _ZN7ee41220D1Ev();
+Name_Map name_map_ee41220[] = {
+  NSPAIR(_ZN7ee41220C1Ev),
+  NSPAIR(_ZN7ee41220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd1220;
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern  VTBL_ENTRY _ZTV6dd1220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1220[];
+static Base_Class bases_ee41220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee41220[];
+extern void _ZN7ee412203barEv();
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_ee41220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee41220[0]),
+  (VTBL_ENTRY)&_ZN7ee412203barEv,
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee41220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee41220[];
+static  VTBL_ENTRY _tg__ZTV6dd1220__7ee41220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+};
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd1220__7ee41220[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+static  VTT_ENTRY vtt_ee41220[] = {
+  {&(_ZTV7ee41220[3]),  3,8},
+  {&(_tg__ZTV6dd1220__7ee41220[3]),  3,3},
+  {&(_tg__ZTV5cc220__6dd1220__7ee41220[3]),  3,4},
+  {&(_ZTV7ee41220[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee41220[];
+extern  VTBL_ENTRY _ZTV7ee41220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee41220[];
+Class_Descriptor cd_ee41220 = {  "ee41220", // class name
+  bases_ee41220, 4,
+  &(vtc_ee41220[0]), // expected_vtbl_contents
+  &(vtt_ee41220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee41220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee41220),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee41220),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee51220  : virtual dd1220 {
+  int e;
+  virtual void  bar(); // _ZN7ee512203barEv
+  ~ee51220(); // tgen
+  ee51220(); // tgen
+};
+//SIG(1 ee51220) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v2 Fi} v2 Fi} Fi} v1 Fi}
+
+
+void  ee51220 ::bar(){vfunc_called(this, "_ZN7ee512203barEv");}
+ee51220 ::~ee51220(){ note_dtor("ee51220", this);} // tgen
+ee51220 ::ee51220(){ note_ctor("ee51220", this);} // tgen
+
+static void Test_ee51220()
+{
+  extern Class_Descriptor cd_ee51220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee51220, buf);
+    ee51220 *dp, &lv = *(dp=new (buf) ee51220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee51220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee51220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(40,20), "ee51220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(32,16), "ee51220");
+    check_base_class_offset(lv, (cc220*)(dd1220*), ABISELECT(32,16), "ee51220");
+    check_base_class_offset(lv, (dd1220*), ABISELECT(16,8), "ee51220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee51220.e");
+    test_class_info(&lv, &cd_ee51220);
+    dp->~ee51220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee51220(Test_ee51220, "ee51220", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee51220C1Ev();
+extern void _ZN7ee51220D1Ev();
+Name_Map name_map_ee51220[] = {
+  NSPAIR(_ZN7ee51220C1Ev),
+  NSPAIR(_ZN7ee51220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd1220;
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern  VTBL_ENTRY _ZTV6dd1220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1220[];
+static Base_Class bases_ee51220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(32,16), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1220,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee51220[];
+extern void _ZN7ee512203barEv();
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY vtc_ee51220[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee51220[0]),
+  (VTBL_ENTRY)&_ZN7ee512203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee51220[0]),
+  0,
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee51220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee51220[];
+static  VTBL_ENTRY _tg__ZTV6dd1220__7ee51220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+};
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd1220__7ee51220[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+static  VTT_ENTRY vtt_ee51220[] = {
+  {&(_ZTV7ee51220[4]),  4,12},
+  {&(_ZTV7ee51220[8]),  8,12},
+  {&(_ZTV7ee51220[11]),  11,12},
+  {&(_tg__ZTV6dd1220__7ee51220[3]),  3,3},
+  {&(_tg__ZTV5cc220__6dd1220__7ee51220[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee51220[];
+extern  VTBL_ENTRY _ZTV7ee51220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee51220[];
+Class_Descriptor cd_ee51220 = {  "ee51220", // class name
+  bases_ee51220, 4,
+  &(vtc_ee51220[0]), // expected_vtbl_contents
+  &(vtt_ee51220[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee51220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee51220),12, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee51220),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee61220  : dd1220 {
+  int e;
+  virtual void  foo(); // _ZN7ee612203fooEv
+  virtual void  bar(); // _ZN7ee612203barEv
+  ~ee61220(); // tgen
+  ee61220(); // tgen
+};
+//SIG(1 ee61220) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} v1 v2 Fi}
+
+
+void  ee61220 ::foo(){vfunc_called(this, "_ZN7ee612203fooEv");}
+void  ee61220 ::bar(){vfunc_called(this, "_ZN7ee612203barEv");}
+ee61220 ::~ee61220(){ note_dtor("ee61220", this);} // tgen
+ee61220 ::ee61220(){ note_ctor("ee61220", this);} // tgen
+
+static void Test_ee61220()
+{
+  extern Class_Descriptor cd_ee61220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee61220, buf);
+    ee61220 *dp, &lv = *(dp=new (buf) ee61220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee61220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee61220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(24,16), "ee61220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(16,12), "ee61220");
+    check_base_class_offset(lv, (cc220*)(dd1220*), ABISELECT(16,12), "ee61220");
+    check_base_class_offset(lv, (dd1220*), 0, "ee61220");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee61220.e");
+    test_class_info(&lv, &cd_ee61220);
+    dp->~ee61220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee61220(Test_ee61220, "ee61220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee61220C1Ev();
+extern void _ZN7ee61220D1Ev();
+Name_Map name_map_ee61220[] = {
+  NSPAIR(_ZN7ee61220C1Ev),
+  NSPAIR(_ZN7ee61220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd1220;
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern  VTBL_ENTRY _ZTV6dd1220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1220[];
+static Base_Class bases_ee61220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee61220[];
+extern void _ZN7ee612203fooEv();
+extern void _ZN7ee612203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee612203fooEv,_ZTv0_n12_N7ee612203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee612203fooEv,_ZThn12_N7ee612203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee61220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee61220[0]),
+  (VTBL_ENTRY)&_ZN7ee612203fooEv,
+  (VTBL_ENTRY)&_ZN7ee612203barEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee61220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee612203fooEv,_ZTv0_n12_N7ee612203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee61220[];
+static  VTBL_ENTRY _tg__ZTV6dd1220__7ee61220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+};
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd1220__7ee61220[] = {
+  0,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+static  VTT_ENTRY vtt_ee61220[] = {
+  {&(_ZTV7ee61220[3]),  3,9},
+  {&(_tg__ZTV6dd1220__7ee61220[3]),  3,3},
+  {&(_tg__ZTV5cc220__6dd1220__7ee61220[3]),  3,4},
+  {&(_ZTV7ee61220[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee61220[];
+extern  VTBL_ENTRY _ZTV7ee61220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee61220[];
+static VTBL_ENTRY alt_thunk_names96[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee612203fooEv,_ZTv0_n12_N7ee612203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee612203fooEv,_ZThn12_N7ee612203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee61220 = {  "ee61220", // class name
+  bases_ee61220, 4,
+  &(vtc_ee61220[0]), // expected_vtbl_contents
+  &(vtt_ee61220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee61220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee61220),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee61220),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names96,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee71220  : virtual dd1220 {
+  int e;
+  virtual void  foo(); // _ZN7ee712203fooEv
+  virtual void  bar(); // _ZN7ee712203barEv
+  ~ee71220(); // tgen
+  ee71220(); // tgen
+};
+//SIG(1 ee71220) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} Fi} v1 v2 Fi}
+
+
+void  ee71220 ::foo(){vfunc_called(this, "_ZN7ee712203fooEv");}
+void  ee71220 ::bar(){vfunc_called(this, "_ZN7ee712203barEv");}
+ee71220 ::~ee71220(){ note_dtor("ee71220", this);} // tgen
+ee71220 ::ee71220(){ note_ctor("ee71220", this);} // tgen
+
+static void Test_ee71220()
+{
+  extern Class_Descriptor cd_ee71220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee71220, buf);
+    ee71220 *dp, &lv = *(dp=new (buf) ee71220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee71220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee71220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(40,20), "ee71220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(32,16), "ee71220");
+    check_base_class_offset(lv, (cc220*)(dd1220*), ABISELECT(32,16), "ee71220");
+    check_base_class_offset(lv, (dd1220*), ABISELECT(16,8), "ee71220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee71220.e");
+    test_class_info(&lv, &cd_ee71220);
+    dp->~ee71220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee71220(Test_ee71220, "ee71220", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee71220C1Ev();
+extern void _ZN7ee71220D1Ev();
+Name_Map name_map_ee71220[] = {
+  NSPAIR(_ZN7ee71220C1Ev),
+  NSPAIR(_ZN7ee71220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd1220;
+extern VTBL_ENTRY _ZTI6dd1220[];
+extern  VTBL_ENTRY _ZTV6dd1220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd1220[];
+static Base_Class bases_ee71220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(32,16), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd1220,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee71220[];
+extern void _ZN7ee712203fooEv();
+extern void _ZN7ee712203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee712203fooEv,_ZTv0_n12_N7ee712203fooEv)();
+extern void ABISELECT(_ZThn32_N7ee712203fooEv,_ZThn16_N7ee712203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee71220[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee71220[0]),
+  (VTBL_ENTRY)&_ZN7ee712203fooEv,
+  (VTBL_ENTRY)&_ZN7ee712203barEv,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee71220[0]),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee71220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee712203fooEv,_ZTv0_n12_N7ee712203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee71220[];
+static  VTBL_ENTRY _tg__ZTV6dd1220__7ee71220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+};
+extern void _ZN5cc2203fooEv();
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd1220__7ee71220[] = {
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd1220[0]),
+  (VTBL_ENTRY)&_ZN5cc2203fooEv,
+};
+static  VTT_ENTRY vtt_ee71220[] = {
+  {&(_ZTV7ee71220[4]),  4,13},
+  {&(_ZTV7ee71220[9]),  9,13},
+  {&(_ZTV7ee71220[12]),  12,13},
+  {&(_tg__ZTV6dd1220__7ee71220[3]),  3,3},
+  {&(_tg__ZTV5cc220__6dd1220__7ee71220[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee71220[];
+extern  VTBL_ENTRY _ZTV7ee71220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee71220[];
+static VTBL_ENTRY alt_thunk_names97[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee712203fooEv,_ZTv0_n12_N7ee712203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N7ee712203fooEv,_ZThn16_N7ee712203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee71220 = {  "ee71220", // class name
+  bases_ee71220, 4,
+  &(vtc_ee71220[0]), // expected_vtbl_contents
+  &(vtt_ee71220[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee71220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee71220),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee71220),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names97,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd2220  : cc220 {
+  int d;
+  virtual void  foo(); // _ZN6dd22203fooEv
+  ~dd2220(); // tgen
+  dd2220(); // tgen
+};
+//SIG(-1 dd2220) C1{ BC2{ BC3{ BC4{ Fi} v1 Fi} v1 Fi} v1 Fi}
+
+
+void  dd2220 ::foo(){vfunc_called(this, "_ZN6dd22203fooEv");}
+dd2220 ::~dd2220(){ note_dtor("dd2220", this);} // tgen
+dd2220 ::dd2220(){ note_ctor("dd2220", this);} // tgen
+
+static void Test_dd2220()
+{
+  extern Class_Descriptor cd_dd2220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(4,6)];
+    init_test(&cd_dd2220, buf);
+    dd2220 *dp, &lv = *(dp=new (buf) dd2220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,20), "sizeof(dd2220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd2220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(8,4), "dd2220");
+    check_base_class_offset(lv, (bb20*)(cc220*), 0, "dd2220");
+    check_base_class_offset(lv, (cc220*), 0, "dd2220");
+    check_field_offset(lv, d, ABISELECT(20,16), "dd2220.d");
+    test_class_info(&lv, &cd_dd2220);
+    dp->~dd2220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd2220(Test_dd2220, "dd2220", ABISELECT(24,20));
+
+#else // __cplusplus
+
+extern void _ZN6dd2220C1Ev();
+extern void _ZN6dd2220D1Ev();
+Name_Map name_map_dd2220[] = {
+  NSPAIR(_ZN6dd2220C1Ev),
+  NSPAIR(_ZN6dd2220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+static Base_Class bases_dd2220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern void _ZN6dd22203fooEv();
+static  VTBL_ENTRY vtc_dd2220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd2220[0]),
+  (VTBL_ENTRY)&_ZN6dd22203fooEv,
+};
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern  VTBL_ENTRY _ZTV6dd2220[];
+Class_Descriptor cd_dd2220 = {  "dd2220", // class name
+  bases_dd2220, 3,
+  &(vtc_dd2220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(24,20), // object size
+  NSPAIRA(_ZTI6dd2220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV6dd2220),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  2, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee02220  : dd2220 {
+  int e;
+  ~ee02220(); // tgen
+  ee02220(); // tgen
+};
+//SIG(1 ee02220) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} v1 Fi} Fi}
+
+
+ee02220 ::~ee02220(){ note_dtor("ee02220", this);} // tgen
+ee02220 ::ee02220(){ note_ctor("ee02220", this);} // tgen
+
+static void Test_ee02220()
+{
+  extern Class_Descriptor cd_ee02220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee02220, buf);
+    ee02220 *dp, &lv = *(dp=new (buf) ee02220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee02220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee02220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd2220*), ABISELECT(8,4), "ee02220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd2220*), 0, "ee02220");
+    check_base_class_offset(lv, (cc220*)(dd2220*), 0, "ee02220");
+    check_base_class_offset(lv, (dd2220*), 0, "ee02220");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee02220.e");
+    test_class_info(&lv, &cd_ee02220);
+    dp->~ee02220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee02220(Test_ee02220, "ee02220", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee02220C1Ev();
+extern void _ZN7ee02220D1Ev();
+Name_Map name_map_ee02220[] = {
+  NSPAIR(_ZN7ee02220C1Ev),
+  NSPAIR(_ZN7ee02220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd2220;
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern  VTBL_ENTRY _ZTV6dd2220[];
+static Base_Class bases_ee02220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2220,    0, //bcp->offset
+    0, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee02220[];
+extern void _ZN6dd22203fooEv();
+static  VTBL_ENTRY vtc_ee02220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee02220[0]),
+  (VTBL_ENTRY)&_ZN6dd22203fooEv,
+};
+extern VTBL_ENTRY _ZTI7ee02220[];
+extern  VTBL_ENTRY _ZTV7ee02220[];
+Class_Descriptor cd_ee02220 = {  "ee02220", // class name
+  bases_ee02220, 4,
+  &(vtc_ee02220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee02220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee02220),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee12220  : virtual dd2220 {
+  int e;
+  ~ee12220(); // tgen
+  ee12220(); // tgen
+};
+//SIG(1 ee12220) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} v1 Fi} Fi}
+
+
+ee12220 ::~ee12220(){ note_dtor("ee12220", this);} // tgen
+ee12220 ::ee12220(){ note_ctor("ee12220", this);} // tgen
+
+static void Test_ee12220()
+{
+  extern Class_Descriptor cd_ee12220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee12220, buf);
+    ee12220 *dp, &lv = *(dp=new (buf) ee12220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee12220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee12220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd2220*), ABISELECT(24,12), "ee12220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd2220*), ABISELECT(16,8), "ee12220");
+    check_base_class_offset(lv, (cc220*)(dd2220*), ABISELECT(16,8), "ee12220");
+    check_base_class_offset(lv, (dd2220*), ABISELECT(16,8), "ee12220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee12220.e");
+    test_class_info(&lv, &cd_ee12220);
+    dp->~ee12220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee12220(Test_ee12220, "ee12220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee12220C1Ev();
+extern void _ZN7ee12220D1Ev();
+Name_Map name_map_ee12220[] = {
+  NSPAIR(_ZN7ee12220C1Ev),
+  NSPAIR(_ZN7ee12220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd2220;
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern  VTBL_ENTRY _ZTV6dd2220[];
+static Base_Class bases_ee12220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2220,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee12220[];
+extern void _ZN6dd22203fooEv();
+static  VTBL_ENTRY vtc_ee12220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee12220[0]),
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee12220[0]),
+  (VTBL_ENTRY)&_ZN6dd22203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee12220[];
+static  VTT_ENTRY vtt_ee12220[] = {
+  {&(_ZTV7ee12220[3]),  3,7},
+  {&(_ZTV7ee12220[6]),  6,7},
+};
+extern VTBL_ENTRY _ZTI7ee12220[];
+extern  VTBL_ENTRY _ZTV7ee12220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee12220[];
+Class_Descriptor cd_ee12220 = {  "ee12220", // class name
+  bases_ee12220, 4,
+  &(vtc_ee12220[0]), // expected_vtbl_contents
+  &(vtt_ee12220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee12220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee12220),7, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee12220),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee22220  : dd2220 {
+  int e;
+  virtual void  foo(); // _ZN7ee222203fooEv
+  ~ee22220(); // tgen
+  ee22220(); // tgen
+};
+//SIG(1 ee22220) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} v1 Fi} v1 Fi}
+
+
+void  ee22220 ::foo(){vfunc_called(this, "_ZN7ee222203fooEv");}
+ee22220 ::~ee22220(){ note_dtor("ee22220", this);} // tgen
+ee22220 ::ee22220(){ note_ctor("ee22220", this);} // tgen
+
+static void Test_ee22220()
+{
+  extern Class_Descriptor cd_ee22220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee22220, buf);
+    ee22220 *dp, &lv = *(dp=new (buf) ee22220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee22220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee22220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd2220*), ABISELECT(8,4), "ee22220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd2220*), 0, "ee22220");
+    check_base_class_offset(lv, (cc220*)(dd2220*), 0, "ee22220");
+    check_base_class_offset(lv, (dd2220*), 0, "ee22220");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee22220.e");
+    test_class_info(&lv, &cd_ee22220);
+    dp->~ee22220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee22220(Test_ee22220, "ee22220", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee22220C1Ev();
+extern void _ZN7ee22220D1Ev();
+Name_Map name_map_ee22220[] = {
+  NSPAIR(_ZN7ee22220C1Ev),
+  NSPAIR(_ZN7ee22220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd2220;
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern  VTBL_ENTRY _ZTV6dd2220[];
+static Base_Class bases_ee22220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee22220[];
+extern void _ZN7ee222203fooEv();
+static  VTBL_ENTRY vtc_ee22220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee22220[0]),
+  (VTBL_ENTRY)&_ZN7ee222203fooEv,
+};
+extern VTBL_ENTRY _ZTI7ee22220[];
+extern  VTBL_ENTRY _ZTV7ee22220[];
+Class_Descriptor cd_ee22220 = {  "ee22220", // class name
+  bases_ee22220, 4,
+  &(vtc_ee22220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee22220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee22220),3, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee32220  : virtual dd2220 {
+  int e;
+  virtual void  foo(); // _ZN7ee322203fooEv
+  ~ee32220(); // tgen
+  ee32220(); // tgen
+};
+//SIG(1 ee32220) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} v1 Fi} v1 Fi}
+
+
+void  ee32220 ::foo(){vfunc_called(this, "_ZN7ee322203fooEv");}
+ee32220 ::~ee32220(){ note_dtor("ee32220", this);} // tgen
+ee32220 ::ee32220(){ note_ctor("ee32220", this);} // tgen
+
+static void Test_ee32220()
+{
+  extern Class_Descriptor cd_ee32220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee32220, buf);
+    ee32220 *dp, &lv = *(dp=new (buf) ee32220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee32220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee32220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd2220*), ABISELECT(24,12), "ee32220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd2220*), ABISELECT(16,8), "ee32220");
+    check_base_class_offset(lv, (cc220*)(dd2220*), ABISELECT(16,8), "ee32220");
+    check_base_class_offset(lv, (dd2220*), ABISELECT(16,8), "ee32220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee32220.e");
+    test_class_info(&lv, &cd_ee32220);
+    dp->~ee32220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee32220(Test_ee32220, "ee32220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee32220C1Ev();
+extern void _ZN7ee32220D1Ev();
+Name_Map name_map_ee32220[] = {
+  NSPAIR(_ZN7ee32220C1Ev),
+  NSPAIR(_ZN7ee32220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd2220;
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern  VTBL_ENTRY _ZTV6dd2220[];
+static Base_Class bases_ee32220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2220,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee32220[];
+extern void _ZN7ee322203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee322203fooEv,_ZTv0_n12_N7ee322203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee322203fooEv,_ZThn8_N7ee322203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee32220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee32220[0]),
+  (VTBL_ENTRY)&_ZN7ee322203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee32220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee322203fooEv,_ZTv0_n12_N7ee322203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee32220[];
+static  VTT_ENTRY vtt_ee32220[] = {
+  {&(_ZTV7ee32220[3]),  3,8},
+  {&(_ZTV7ee32220[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee32220[];
+extern  VTBL_ENTRY _ZTV7ee32220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee32220[];
+static VTBL_ENTRY alt_thunk_names98[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee322203fooEv,_ZTv0_n12_N7ee322203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee322203fooEv,_ZThn8_N7ee322203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee32220 = {  "ee32220", // class name
+  bases_ee32220, 4,
+  &(vtc_ee32220[0]), // expected_vtbl_contents
+  &(vtt_ee32220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee32220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee32220),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee32220),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names98,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee42220  : dd2220 {
+  int e;
+  virtual void  bar(); // _ZN7ee422203barEv
+  ~ee42220(); // tgen
+  ee42220(); // tgen
+};
+//SIG(1 ee42220) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} v2 Fi} v2 Fi} v1 Fi}
+
+
+void  ee42220 ::bar(){vfunc_called(this, "_ZN7ee422203barEv");}
+ee42220 ::~ee42220(){ note_dtor("ee42220", this);} // tgen
+ee42220 ::ee42220(){ note_ctor("ee42220", this);} // tgen
+
+static void Test_ee42220()
+{
+  extern Class_Descriptor cd_ee42220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee42220, buf);
+    ee42220 *dp, &lv = *(dp=new (buf) ee42220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee42220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee42220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd2220*), ABISELECT(8,4), "ee42220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd2220*), 0, "ee42220");
+    check_base_class_offset(lv, (cc220*)(dd2220*), 0, "ee42220");
+    check_base_class_offset(lv, (dd2220*), 0, "ee42220");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee42220.e");
+    test_class_info(&lv, &cd_ee42220);
+    dp->~ee42220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee42220(Test_ee42220, "ee42220", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee42220C1Ev();
+extern void _ZN7ee42220D1Ev();
+Name_Map name_map_ee42220[] = {
+  NSPAIR(_ZN7ee42220C1Ev),
+  NSPAIR(_ZN7ee42220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd2220;
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern  VTBL_ENTRY _ZTV6dd2220[];
+static Base_Class bases_ee42220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee42220[];
+extern void _ZN6dd22203fooEv();
+extern void _ZN7ee422203barEv();
+static  VTBL_ENTRY vtc_ee42220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee42220[0]),
+  (VTBL_ENTRY)&_ZN6dd22203fooEv,
+  (VTBL_ENTRY)&_ZN7ee422203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee42220[];
+extern  VTBL_ENTRY _ZTV7ee42220[];
+Class_Descriptor cd_ee42220 = {  "ee42220", // class name
+  bases_ee42220, 4,
+  &(vtc_ee42220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee42220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee42220),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee52220  : virtual dd2220 {
+  int e;
+  virtual void  bar(); // _ZN7ee522203barEv
+  ~ee52220(); // tgen
+  ee52220(); // tgen
+};
+//SIG(1 ee52220) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v2 Fi} v2 Fi} v2 Fi} v1 Fi}
+
+
+void  ee52220 ::bar(){vfunc_called(this, "_ZN7ee522203barEv");}
+ee52220 ::~ee52220(){ note_dtor("ee52220", this);} // tgen
+ee52220 ::ee52220(){ note_ctor("ee52220", this);} // tgen
+
+static void Test_ee52220()
+{
+  extern Class_Descriptor cd_ee52220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee52220, buf);
+    ee52220 *dp, &lv = *(dp=new (buf) ee52220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee52220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee52220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd2220*), ABISELECT(24,12), "ee52220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd2220*), ABISELECT(16,8), "ee52220");
+    check_base_class_offset(lv, (cc220*)(dd2220*), ABISELECT(16,8), "ee52220");
+    check_base_class_offset(lv, (dd2220*), ABISELECT(16,8), "ee52220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee52220.e");
+    test_class_info(&lv, &cd_ee52220);
+    dp->~ee52220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee52220(Test_ee52220, "ee52220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee52220C1Ev();
+extern void _ZN7ee52220D1Ev();
+Name_Map name_map_ee52220[] = {
+  NSPAIR(_ZN7ee52220C1Ev),
+  NSPAIR(_ZN7ee52220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd2220;
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern  VTBL_ENTRY _ZTV6dd2220[];
+static Base_Class bases_ee52220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2220,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee52220[];
+extern void _ZN7ee522203barEv();
+extern void _ZN6dd22203fooEv();
+static  VTBL_ENTRY vtc_ee52220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee52220[0]),
+  (VTBL_ENTRY)&_ZN7ee522203barEv,
+  0,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee52220[0]),
+  (VTBL_ENTRY)&_ZN6dd22203fooEv,
+};
+extern VTBL_ENTRY _ZTV7ee52220[];
+static  VTT_ENTRY vtt_ee52220[] = {
+  {&(_ZTV7ee52220[3]),  3,8},
+  {&(_ZTV7ee52220[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee52220[];
+extern  VTBL_ENTRY _ZTV7ee52220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee52220[];
+Class_Descriptor cd_ee52220 = {  "ee52220", // class name
+  bases_ee52220, 4,
+  &(vtc_ee52220[0]), // expected_vtbl_contents
+  &(vtt_ee52220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee52220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee52220),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee52220),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee62220  : dd2220 {
+  int e;
+  virtual void  foo(); // _ZN7ee622203fooEv
+  virtual void  bar(); // _ZN7ee622203barEv
+  ~ee62220(); // tgen
+  ee62220(); // tgen
+};
+//SIG(1 ee62220) C1{ BC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee62220 ::foo(){vfunc_called(this, "_ZN7ee622203fooEv");}
+void  ee62220 ::bar(){vfunc_called(this, "_ZN7ee622203barEv");}
+ee62220 ::~ee62220(){ note_dtor("ee62220", this);} // tgen
+ee62220 ::ee62220(){ note_ctor("ee62220", this);} // tgen
+
+static void Test_ee62220()
+{
+  extern Class_Descriptor cd_ee62220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,7)];
+    init_test(&cd_ee62220, buf);
+    ee62220 *dp, &lv = *(dp=new (buf) ee62220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,24), "sizeof(ee62220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee62220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd2220*), ABISELECT(8,4), "ee62220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd2220*), 0, "ee62220");
+    check_base_class_offset(lv, (cc220*)(dd2220*), 0, "ee62220");
+    check_base_class_offset(lv, (dd2220*), 0, "ee62220");
+    check_field_offset(lv, e, ABISELECT(24,20), "ee62220.e");
+    test_class_info(&lv, &cd_ee62220);
+    dp->~ee62220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee62220(Test_ee62220, "ee62220", ABISELECT(32,24));
+
+#else // __cplusplus
+
+extern void _ZN7ee62220C1Ev();
+extern void _ZN7ee62220D1Ev();
+Name_Map name_map_ee62220[] = {
+  NSPAIR(_ZN7ee62220C1Ev),
+  NSPAIR(_ZN7ee62220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd2220;
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern  VTBL_ENTRY _ZTV6dd2220[];
+static Base_Class bases_ee62220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee62220[];
+extern void _ZN7ee622203fooEv();
+extern void _ZN7ee622203barEv();
+static  VTBL_ENTRY vtc_ee62220[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee62220[0]),
+  (VTBL_ENTRY)&_ZN7ee622203fooEv,
+  (VTBL_ENTRY)&_ZN7ee622203barEv,
+};
+extern VTBL_ENTRY _ZTI7ee62220[];
+extern  VTBL_ENTRY _ZTV7ee62220[];
+Class_Descriptor cd_ee62220 = {  "ee62220", // class name
+  bases_ee62220, 4,
+  &(vtc_ee62220[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,24), // object size
+  NSPAIRA(_ZTI7ee62220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee62220),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  3, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee72220  : virtual dd2220 {
+  int e;
+  virtual void  foo(); // _ZN7ee722203fooEv
+  virtual void  bar(); // _ZN7ee722203barEv
+  ~ee72220(); // tgen
+  ee72220(); // tgen
+};
+//SIG(1 ee72220) C1{ VBC2{ BC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} v1 Fi} v1 v2 Fi}
+
+
+void  ee72220 ::foo(){vfunc_called(this, "_ZN7ee722203fooEv");}
+void  ee72220 ::bar(){vfunc_called(this, "_ZN7ee722203barEv");}
+ee72220 ::~ee72220(){ note_dtor("ee72220", this);} // tgen
+ee72220 ::ee72220(){ note_ctor("ee72220", this);} // tgen
+
+static void Test_ee72220()
+{
+  extern Class_Descriptor cd_ee72220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee72220, buf);
+    ee72220 *dp, &lv = *(dp=new (buf) ee72220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee72220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee72220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*)(dd2220*), ABISELECT(24,12), "ee72220");
+    check_base_class_offset(lv, (bb20*)(cc220*)(dd2220*), ABISELECT(16,8), "ee72220");
+    check_base_class_offset(lv, (cc220*)(dd2220*), ABISELECT(16,8), "ee72220");
+    check_base_class_offset(lv, (dd2220*), ABISELECT(16,8), "ee72220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee72220.e");
+    test_class_info(&lv, &cd_ee72220);
+    dp->~ee72220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee72220(Test_ee72220, "ee72220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee72220C1Ev();
+extern void _ZN7ee72220D1Ev();
+Name_Map name_map_ee72220[] = {
+  NSPAIR(_ZN7ee72220C1Ev),
+  NSPAIR(_ZN7ee72220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd2220;
+extern VTBL_ENTRY _ZTI6dd2220[];
+extern  VTBL_ENTRY _ZTV6dd2220[];
+static Base_Class bases_ee72220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 0},
+  {&cd_dd2220,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee72220[];
+extern void _ZN7ee722203fooEv();
+extern void _ZN7ee722203barEv();
+extern void ABISELECT(_ZTv0_n24_N7ee722203fooEv,_ZTv0_n12_N7ee722203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee722203fooEv,_ZThn8_N7ee722203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee72220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee72220[0]),
+  (VTBL_ENTRY)&_ZN7ee722203fooEv,
+  (VTBL_ENTRY)&_ZN7ee722203barEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee72220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee722203fooEv,_ZTv0_n12_N7ee722203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee72220[];
+static  VTT_ENTRY vtt_ee72220[] = {
+  {&(_ZTV7ee72220[3]),  3,9},
+  {&(_ZTV7ee72220[8]),  8,9},
+};
+extern VTBL_ENTRY _ZTI7ee72220[];
+extern  VTBL_ENTRY _ZTV7ee72220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee72220[];
+static VTBL_ENTRY alt_thunk_names99[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee722203fooEv,_ZTv0_n12_N7ee722203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N7ee722203fooEv,_ZThn8_N7ee722203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee72220 = {  "ee72220", // class name
+  bases_ee72220, 4,
+  &(vtc_ee72220[0]), // expected_vtbl_contents
+  &(vtt_ee72220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee72220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee72220),9, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee72220),2, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names99,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  dd3220  : virtual cc220 {
+  int d;
+  virtual void  foo(); // _ZN6dd32203fooEv
+  ~dd3220(); // tgen
+  dd3220(); // tgen
+};
+//SIG(-1 dd3220) C1{ VBC2{ BC3{ BC4{ Fi} v1 Fi} v1 Fi} v1 Fi}
+
+
+void  dd3220 ::foo(){vfunc_called(this, "_ZN6dd32203fooEv");}
+dd3220 ::~dd3220(){ note_dtor("dd3220", this);} // tgen
+dd3220 ::dd3220(){ note_ctor("dd3220", this);} // tgen
+
+static void Test_dd3220()
+{
+  extern Class_Descriptor cd_dd3220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,7)];
+    init_test(&cd_dd3220, buf);
+    dd3220 *dp, &lv = *(dp=new (buf) dd3220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,24), "sizeof(dd3220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd3220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(24,12), "dd3220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(16,8), "dd3220");
+    check_base_class_offset(lv, (cc220*), ABISELECT(16,8), "dd3220");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd3220.d");
+    test_class_info(&lv, &cd_dd3220);
+    dp->~dd3220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd3220(Test_dd3220, "dd3220", ABISELECT(40,24));
+
+#else // __cplusplus
+
+extern void _ZN6dd3220C1Ev();
+extern void _ZN6dd3220D1Ev();
+Name_Map name_map_dd3220[] = {
+  NSPAIR(_ZN6dd3220C1Ev),
+  NSPAIR(_ZN6dd3220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+static Base_Class bases_dd3220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI6dd3220[];
+extern void _ZN6dd32203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn8_N6dd32203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_dd3220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3220[0]),
+  (VTBL_ENTRY)&_ZN6dd32203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv),
+};
+extern VTBL_ENTRY _ZTV6dd3220[];
+static  VTT_ENTRY vtt_dd3220[] = {
+  {&(_ZTV6dd3220[3]),  3,8},
+  {&(_ZTV6dd3220[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI6dd3220[];
+extern  VTBL_ENTRY _ZTV6dd3220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3220[];
+static VTBL_ENTRY alt_thunk_names100[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn8_N6dd32203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_dd3220 = {  "dd3220", // class name
+  bases_dd3220, 3,
+  &(vtc_dd3220[0]), // expected_vtbl_contents
+  &(vtt_dd3220[0]), // expected_vtt_contents
+  ABISELECT(40,24), // object size
+  NSPAIRA(_ZTI6dd3220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV6dd3220),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT6dd3220),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names100,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee03220  : dd3220 {
+  int e;
+  ~ee03220(); // tgen
+  ee03220(); // tgen
+};
+//SIG(1 ee03220) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} v1 Fi} Fi}
+
+
+ee03220 ::~ee03220(){ note_dtor("ee03220", this);} // tgen
+ee03220 ::ee03220(){ note_ctor("ee03220", this);} // tgen
+
+static void Test_ee03220()
+{
+  extern Class_Descriptor cd_ee03220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee03220, buf);
+    ee03220 *dp, &lv = *(dp=new (buf) ee03220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee03220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee03220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(24,16), "ee03220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(16,12), "ee03220");
+    check_base_class_offset(lv, (cc220*)(dd3220*), ABISELECT(16,12), "ee03220");
+    check_base_class_offset(lv, (dd3220*), 0, "ee03220");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee03220.e");
+    test_class_info(&lv, &cd_ee03220);
+    dp->~ee03220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee03220(Test_ee03220, "ee03220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee03220C1Ev();
+extern void _ZN7ee03220D1Ev();
+Name_Map name_map_ee03220[] = {
+  NSPAIR(_ZN7ee03220C1Ev),
+  NSPAIR(_ZN7ee03220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd3220;
+extern VTBL_ENTRY _ZTI6dd3220[];
+extern  VTBL_ENTRY _ZTV6dd3220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3220[];
+static Base_Class bases_ee03220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee03220[];
+extern void _ZN6dd32203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn12_N6dd32203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee03220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee03220[0]),
+  (VTBL_ENTRY)&_ZN6dd32203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee03220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee03220[];
+extern void _ZN6dd32203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3220__7ee03220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3220[0]),
+  (VTBL_ENTRY)&_ZN6dd32203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn12_N6dd32203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd3220__7ee03220[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv),
+};
+static  VTT_ENTRY vtt_ee03220[] = {
+  {&(_ZTV7ee03220[3]),  3,8},
+  {&(_tg__ZTV6dd3220__7ee03220[3]),  3,4},
+  {&(_tg__ZTV5cc220__6dd3220__7ee03220[3]),  3,4},
+  {&(_ZTV7ee03220[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee03220[];
+extern  VTBL_ENTRY _ZTV7ee03220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee03220[];
+static VTBL_ENTRY alt_thunk_names101[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn12_N6dd32203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn12_N6dd32203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee03220 = {  "ee03220", // class name
+  bases_ee03220, 4,
+  &(vtc_ee03220[0]), // expected_vtbl_contents
+  &(vtt_ee03220[0]), // expected_vtt_contents
+  ABISELECT(40,28), // object size
+  NSPAIRA(_ZTI7ee03220),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV7ee03220),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee03220),4, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names101,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee13220  : virtual dd3220 {
+  int e;
+  ~ee13220(); // tgen
+  ee13220(); // tgen
+};
+//SIG(1 ee13220) C1{ VBC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} v1 Fi} Fi}
+
+
+ee13220 ::~ee13220(){ note_dtor("ee13220", this);} // tgen
+ee13220 ::ee13220(){ note_ctor("ee13220", this);} // tgen
+
+static void Test_ee13220()
+{
+  extern Class_Descriptor cd_ee13220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(8,9)];
+    init_test(&cd_ee13220, buf);
+    ee13220 *dp, &lv = *(dp=new (buf) ee13220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(56,32), "sizeof(ee13220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee13220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(40,20), "ee13220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(32,16), "ee13220");
+    check_base_class_offset(lv, (cc220*)(dd3220*), ABISELECT(32,16), "ee13220");
+    check_base_class_offset(lv, (dd3220*), ABISELECT(16,8), "ee13220");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee13220.e");
+    test_class_info(&lv, &cd_ee13220);
+    dp->~ee13220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee13220(Test_ee13220, "ee13220", ABISELECT(56,32));
+
+#else // __cplusplus
+
+extern void _ZN7ee13220C1Ev();
+extern void _ZN7ee13220D1Ev();
+Name_Map name_map_ee13220[] = {
+  NSPAIR(_ZN7ee13220C1Ev),
+  NSPAIR(_ZN7ee13220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd3220;
+extern VTBL_ENTRY _ZTI6dd3220[];
+extern  VTBL_ENTRY _ZTV6dd3220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3220[];
+static Base_Class bases_ee13220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(40,20), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(32,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(32,16), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    3, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3220,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee13220[];
+extern void _ZN6dd32203fooEv();
+extern void ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn8_N6dd32203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee13220[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee13220[0]),
+  0,
+  ABISELECT(16,8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI7ee13220[0]),
+  (VTBL_ENTRY)&_ZN6dd32203fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI7ee13220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee13220[];
+extern void _ZN6dd32203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3220__7ee13220[] = {
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3220[0]),
+  (VTBL_ENTRY)&_ZN6dd32203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn8_N6dd32203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd3220__7ee13220[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI6dd3220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv),
+};
+static  VTT_ENTRY vtt_ee13220[] = {
+  {&(_ZTV7ee13220[4]),  4,13},
+  {&(_ZTV7ee13220[8]),  8,13},
+  {&(_ZTV7ee13220[12]),  12,13},
+  {&(_tg__ZTV6dd3220__7ee13220[3]),  3,4},
+  {&(_tg__ZTV5cc220__6dd3220__7ee13220[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI7ee13220[];
+extern  VTBL_ENTRY _ZTV7ee13220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee13220[];
+static VTBL_ENTRY alt_thunk_names102[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn8_N6dd32203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn8_N6dd32203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee13220 = {  "ee13220", // class name
+  bases_ee13220, 4,
+  &(vtc_ee13220[0]), // expected_vtbl_contents
+  &(vtt_ee13220[0]), // expected_vtt_contents
+  ABISELECT(56,32), // object size
+  NSPAIRA(_ZTI7ee13220),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV7ee13220),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT7ee13220),5, //virtual table table var
+  3, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names102,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ee23220  : dd3220 {
+  int e;
+  virtual void  foo(); // _ZN7ee232203fooEv
+  ~ee23220(); // tgen
+  ee23220(); // tgen
+};
+//SIG(1 ee23220) C1{ BC2{ VBC3{ BC4{ BC5{ Fi} v1 Fi} v1 Fi} v1 Fi} v1 Fi}
+
+
+void  ee23220 ::foo(){vfunc_called(this, "_ZN7ee232203fooEv");}
+ee23220 ::~ee23220(){ note_dtor("ee23220", this);} // tgen
+ee23220 ::ee23220(){ note_ctor("ee23220", this);} // tgen
+
+static void Test_ee23220()
+{
+  extern Class_Descriptor cd_ee23220;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(6,8)];
+    init_test(&cd_ee23220, buf);
+    ee23220 *dp, &lv = *(dp=new (buf) ee23220());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(40,28), "sizeof(ee23220)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee23220)");
+    check_base_class_offset(lv, (aa0*)(bb20*)(cc220*), ABISELECT(24,16), "ee23220");
+    check_base_class_offset(lv, (bb20*)(cc220*), ABISELECT(16,12), "ee23220");
+    check_base_class_offset(lv, (cc220*)(dd3220*), ABISELECT(16,12), "ee23220");
+    check_base_class_offset(lv, (dd3220*), 0, "ee23220");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee23220.e");
+    test_class_info(&lv, &cd_ee23220);
+    dp->~ee23220();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee23220(Test_ee23220, "ee23220", ABISELECT(40,28));
+
+#else // __cplusplus
+
+extern void _ZN7ee23220C1Ev();
+extern void _ZN7ee23220D1Ev();
+Name_Map name_map_ee23220[] = {
+  NSPAIR(_ZN7ee23220C1Ev),
+  NSPAIR(_ZN7ee23220D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_cc220;
+extern VTBL_ENTRY _ZTI5cc220[];
+extern  VTBL_ENTRY _ZTV5cc220[];
+extern Class_Descriptor cd_dd3220;
+extern VTBL_ENTRY _ZTI6dd3220[];
+extern  VTBL_ENTRY _ZTV6dd3220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT6dd3220[];
+static Base_Class bases_ee23220[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    ABISELECT(24,16), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(16,12), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_cc220,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    3, //immediately_derived
+  0, 1},
+  {&cd_dd3220,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI7ee23220[];
+extern void _ZN7ee232203fooEv();
+extern void ABISELECT(_ZTv0_n24_N7ee232203fooEv,_ZTv0_n12_N7ee232203fooEv)();
+extern void ABISELECT(_ZThn16_N7ee232203fooEv,_ZThn12_N7ee232203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee23220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI7ee23220[0]),
+  (VTBL_ENTRY)&_ZN7ee232203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI7ee23220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7ee232203fooEv,_ZTv0_n12_N7ee232203fooEv),
+};
+extern VTBL_ENTRY _ZTV7ee23220[];
+extern void _ZN6dd32203fooEv();
+static  VTBL_ENTRY _tg__ZTV6dd3220__7ee23220[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI6dd3220[0]),
+  (VTBL_ENTRY)&_ZN6dd32203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv)();
+extern void ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn12_N6dd32203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV5cc220__6dd3220__7ee23220[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI6dd3220[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv),
+};
+static  VTT_ENTRY vtt_ee23220[] = {
+  {&(_ZTV7ee23220[3]),  3,8},
+  {&(_tg__ZTV6dd3220__7ee23220[3]),  3,4},
+  {&(_tg__ZTV5cc220__6dd3220__7ee23220[3]),  3,4},
+  {&(_ZTV7ee23220[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI7ee23220[];
+extern  VTBL_ENTRY _ZTV7ee23220[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT7ee23220[];
+static VTBL_ENTRY alt_thunk_names103[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6dd32203fooEv,_ZTv0_n12_N6dd32203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N6dd32203fooEv,_ZThn12_N6dd32203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7ee232203fooEv,_ZTv0_n12_N7ee232203fooEv), // 

[... 269477 lines stripped ...]




More information about the llvm-commits mailing list