[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_isc.x
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/s2_6/T_isc.x?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/s2_6/T_isc.x (added)
+++ test-suite/trunk/ABI-Testsuite/test/s2_6/T_isc.x Mon Jul 28 16:20:34 2014
@@ -0,0 +1,47135 @@
+// 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;
+   aa0(); // _ZN3aa0C1Ev
+  virtual void  foo(); // _ZN3aa03fooEv
+  ~aa0(); // tgen
+};
+//SIG(-1 aa0) C1{ v1 Fi}
+
+
+ aa0 ::aa0(){ note_ctor("aa0", this);}
+void  aa0 ::foo(){vfunc_called(this, "_ZN3aa03fooEv");}
+aa0 ::~aa0(){ note_dtor("aa0", this);} // tgen
+
+static void Test_aa0()
+{
+  extern Class_Descriptor cd_aa0;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa0, buf);
+    aa0 *dp, &lv = *(dp=new (buf) aa0());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa0)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa0)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa0.a");
+    test_class_info(&lv, &cd_aa0);
+    dp->~aa0();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa0(Test_aa0, "aa0", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa0C1Ev();
+extern void _ZN3aa0D1Ev();
+Name_Map name_map_aa0[] = {
+  NSPAIR(_ZN3aa0C1Ev),
+  NSPAIR(_ZN3aa0D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa0[];
+extern void _ZN3aa03fooEv();
+static  VTBL_ENTRY vtc_aa0[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa0[0]),
+  (VTBL_ENTRY)&_ZN3aa03fooEv,
+};
+extern VTBL_ENTRY _ZTI3aa0[];
+extern  VTBL_ENTRY _ZTV3aa0[];
+Class_Descriptor cd_aa0 = {  "aa0", // class name
+  0,0,//no base classes
+  &(vtc_aa0[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa0),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa0),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  bb0  {
+  int b;
+   bb0(); // _ZN3bb0C1Ev
+  virtual void  foo(); // _ZN3bb03fooEv
+  ~bb0(); // tgen
+};
+//SIG(-1 bb0) C1{ v1 Fi}
+
+
+ bb0 ::bb0(){ note_ctor("bb0", this);}
+void  bb0 ::foo(){vfunc_called(this, "_ZN3bb03fooEv");}
+bb0 ::~bb0(){ note_dtor("bb0", this);} // tgen
+
+static void Test_bb0()
+{
+  extern Class_Descriptor cd_bb0;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb0, buf);
+    bb0 *dp, &lv = *(dp=new (buf) bb0());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb0)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb0)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb0.b");
+    test_class_info(&lv, &cd_bb0);
+    dp->~bb0();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb0(Test_bb0, "bb0", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb0C1Ev();
+extern void _ZN3bb0D1Ev();
+Name_Map name_map_bb0[] = {
+  NSPAIR(_ZN3bb0C1Ev),
+  NSPAIR(_ZN3bb0D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb0[];
+extern void _ZN3bb03fooEv();
+static  VTBL_ENTRY vtc_bb0[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb0[0]),
+  (VTBL_ENTRY)&_ZN3bb03fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb0[];
+extern  VTBL_ENTRY _ZTV3bb0[];
+Class_Descriptor cd_bb0 = {  "bb0", // class name
+  0,0,//no base classes
+  &(vtc_bb0[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb0),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb0),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  cc0  {
+  int c;
+   cc0(); // _ZN3cc0C1Ev
+  virtual void  foo(); // _ZN3cc03fooEv
+  ~cc0(); // tgen
+};
+//SIG(-1 cc0) C1{ v1 Fi}
+
+
+ cc0 ::cc0(){ note_ctor("cc0", this);}
+void  cc0 ::foo(){vfunc_called(this, "_ZN3cc03fooEv");}
+cc0 ::~cc0(){ note_dtor("cc0", this);} // tgen
+
+static void Test_cc0()
+{
+  extern Class_Descriptor cd_cc0;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc0, buf);
+    cc0 *dp, &lv = *(dp=new (buf) cc0());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc0)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc0)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc0.c");
+    test_class_info(&lv, &cd_cc0);
+    dp->~cc0();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc0(Test_cc0, "cc0", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc0C1Ev();
+extern void _ZN3cc0D1Ev();
+Name_Map name_map_cc0[] = {
+  NSPAIR(_ZN3cc0C1Ev),
+  NSPAIR(_ZN3cc0D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc0[];
+extern void _ZN3cc03fooEv();
+static  VTBL_ENTRY vtc_cc0[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc0[0]),
+  (VTBL_ENTRY)&_ZN3cc03fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc0[];
+extern  VTBL_ENTRY _ZTV3cc0[];
+Class_Descriptor cd_cc0 = {  "cc0", // class name
+  0,0,//no base classes
+  &(vtc_cc0[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc0),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc0),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  dd0  {
+  int d;
+   dd0(); // _ZN3dd0C1Ev
+  virtual void  foo(); // _ZN3dd03fooEv
+  ~dd0(); // tgen
+};
+//SIG(-1 dd0) C1{ v1 Fi}
+
+
+ dd0 ::dd0(){ note_ctor("dd0", this);}
+void  dd0 ::foo(){vfunc_called(this, "_ZN3dd03fooEv");}
+dd0 ::~dd0(){ note_dtor("dd0", this);} // tgen
+
+static void Test_dd0()
+{
+  extern Class_Descriptor cd_dd0;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd0, buf);
+    dd0 *dp, &lv = *(dp=new (buf) dd0());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd0)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd0)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd0.d");
+    test_class_info(&lv, &cd_dd0);
+    dp->~dd0();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd0(Test_dd0, "dd0", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd0C1Ev();
+extern void _ZN3dd0D1Ev();
+Name_Map name_map_dd0[] = {
+  NSPAIR(_ZN3dd0C1Ev),
+  NSPAIR(_ZN3dd0D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd0[];
+extern void _ZN3dd03fooEv();
+static  VTBL_ENTRY vtc_dd0[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd0[0]),
+  (VTBL_ENTRY)&_ZN3dd03fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd0[];
+extern  VTBL_ENTRY _ZTV3dd0[];
+Class_Descriptor cd_dd0 = {  "dd0", // class name
+  0,0,//no base classes
+  &(vtc_dd0[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd0),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd0),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  ee0  : aa0 , bb0 {
+  int e;
+   ee0(); // _ZN3ee0C1Ev
+  virtual void  foo(); // _ZN3ee03fooEv
+  ~ee0(); // tgen
+};
+//SIG(-1 ee0) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee0 ::ee0(){ note_ctor("ee0", this);}
+void  ee0 ::foo(){vfunc_called(this, "_ZN3ee03fooEv");}
+ee0 ::~ee0(){ note_dtor("ee0", this);} // tgen
+
+static void Test_ee0()
+{
+  extern Class_Descriptor cd_ee0;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee0, buf);
+    ee0 *dp, &lv = *(dp=new (buf) ee0());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee0)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee0)");
+    check_base_class_offset(lv, (aa0*), 0, "ee0");
+    check_base_class_offset(lv, (bb0*), ABISELECT(16,8), "ee0");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee0.e");
+    test_class_info(&lv, &cd_ee0);
+    dp->~ee0();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee0(Test_ee0, "ee0", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ee0C1Ev();
+extern void _ZN3ee0D1Ev();
+Name_Map name_map_ee0[] = {
+  NSPAIR(_ZN3ee0C1Ev),
+  NSPAIR(_ZN3ee0D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern  VTBL_ENTRY _ZTV3aa0[];
+extern Class_Descriptor cd_bb0;
+extern VTBL_ENTRY _ZTI3bb0[];
+extern  VTBL_ENTRY _ZTV3bb0[];
+static Base_Class bases_ee0[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    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},
+  {&cd_bb0,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI3ee0[];
+extern void _ZN3ee03fooEv();
+extern void ABISELECT(_ZThn16_N3ee03fooEv,_ZThn8_N3ee03fooEv)();
+static  VTBL_ENTRY vtc_ee0[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee0[0]),
+  (VTBL_ENTRY)&_ZN3ee03fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3ee0[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3ee03fooEv,_ZThn8_N3ee03fooEv),
+};
+extern VTBL_ENTRY _ZTI3ee0[];
+extern  VTBL_ENTRY _ZTV3ee0[];
+Class_Descriptor cd_ee0 = {  "ee0", // class name
+  bases_ee0, 2,
+  &(vtc_ee0[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ee0),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee0),6, //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  ff0  : cc0 , dd0 {
+  int f;
+   ff0(); // _ZN3ff0C1Ev
+  virtual void  foo(); // _ZN3ff03fooEv
+  ~ff0(); // tgen
+};
+//SIG(-1 ff0) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff0 ::ff0(){ note_ctor("ff0", this);}
+void  ff0 ::foo(){vfunc_called(this, "_ZN3ff03fooEv");}
+ff0 ::~ff0(){ note_dtor("ff0", this);} // tgen
+
+static void Test_ff0()
+{
+  extern Class_Descriptor cd_ff0;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff0, buf);
+    ff0 *dp, &lv = *(dp=new (buf) ff0());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff0)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff0)");
+    check_base_class_offset(lv, (cc0*), 0, "ff0");
+    check_base_class_offset(lv, (dd0*), ABISELECT(16,8), "ff0");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff0.f");
+    test_class_info(&lv, &cd_ff0);
+    dp->~ff0();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff0(Test_ff0, "ff0", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff0C1Ev();
+extern void _ZN3ff0D1Ev();
+Name_Map name_map_ff0[] = {
+  NSPAIR(_ZN3ff0C1Ev),
+  NSPAIR(_ZN3ff0D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc0;
+extern VTBL_ENTRY _ZTI3cc0[];
+extern  VTBL_ENTRY _ZTV3cc0[];
+extern Class_Descriptor cd_dd0;
+extern VTBL_ENTRY _ZTI3dd0[];
+extern  VTBL_ENTRY _ZTV3dd0[];
+static Base_Class bases_ff0[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc0,    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},
+  {&cd_dd0,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI3ff0[];
+extern void _ZN3ff03fooEv();
+extern void ABISELECT(_ZThn16_N3ff03fooEv,_ZThn8_N3ff03fooEv)();
+static  VTBL_ENTRY vtc_ff0[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff0[0]),
+  (VTBL_ENTRY)&_ZN3ff03fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3ff0[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3ff03fooEv,_ZThn8_N3ff03fooEv),
+};
+extern VTBL_ENTRY _ZTI3ff0[];
+extern  VTBL_ENTRY _ZTV3ff0[];
+Class_Descriptor cd_ff0 = {  "ff0", // class name
+  bases_ff0, 2,
+  &(vtc_ff0[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff0),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff0),6, //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  gg0  : ee0 , ff0 {
+  int g;
+   gg0(); // _ZN3gg0C1Ev
+  virtual void  foo(); // _ZN3gg03fooEv
+  ~gg0(); // tgen
+};
+//SIG(1 gg0) C1{ BC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg0 ::gg0(){ note_ctor("gg0", this);}
+void  gg0 ::foo(){vfunc_called(this, "_ZN3gg03fooEv");}
+gg0 ::~gg0(){ note_dtor("gg0", this);} // tgen
+
+static void Test_gg0()
+{
+  extern Class_Descriptor cd_gg0;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg0, buf);
+    gg0 *dp, &lv = *(dp=new (buf) gg0());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg0)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg0)");
+    check_base_class_offset(lv, (aa0*)(ee0*), 0, "gg0");
+    check_base_class_offset(lv, (bb0*)(ee0*), ABISELECT(16,8), "gg0");
+    check_base_class_offset(lv, (ee0*), 0, "gg0");
+    check_base_class_offset(lv, (cc0*)(ff0*), ABISELECT(32,20), "gg0");
+    check_base_class_offset(lv, (dd0*)(ff0*), ABISELECT(48,28), "gg0");
+    check_base_class_offset(lv, (ff0*), ABISELECT(32,20), "gg0");
+    check_field_offset(lv, g, ABISELECT(64,40), "gg0.g");
+    test_class_info(&lv, &cd_gg0);
+    dp->~gg0();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg0(Test_gg0, "gg0", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN3gg0C1Ev();
+extern void _ZN3gg0D1Ev();
+Name_Map name_map_gg0[] = {
+  NSPAIR(_ZN3gg0C1Ev),
+  NSPAIR(_ZN3gg0D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa0;
+extern VTBL_ENTRY _ZTI3aa0[];
+extern  VTBL_ENTRY _ZTV3aa0[];
+extern Class_Descriptor cd_bb0;
+extern VTBL_ENTRY _ZTI3bb0[];
+extern  VTBL_ENTRY _ZTV3bb0[];
+extern Class_Descriptor cd_ee0;
+extern VTBL_ENTRY _ZTI3ee0[];
+extern  VTBL_ENTRY _ZTV3ee0[];
+extern Class_Descriptor cd_cc0;
+extern VTBL_ENTRY _ZTI3cc0[];
+extern  VTBL_ENTRY _ZTV3cc0[];
+extern Class_Descriptor cd_dd0;
+extern VTBL_ENTRY _ZTI3dd0[];
+extern  VTBL_ENTRY _ZTV3dd0[];
+extern Class_Descriptor cd_ff0;
+extern VTBL_ENTRY _ZTI3ff0[];
+extern  VTBL_ENTRY _ZTV3ff0[];
+static Base_Class bases_gg0[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa0,    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_bb0,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee0,    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},
+  {&cd_cc0,    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
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd0,    ABISELECT(48,28), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff0,    ABISELECT(32,20), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg0[];
+extern void _ZN3gg03fooEv();
+extern void ABISELECT(_ZThn16_N3gg03fooEv,_ZThn8_N3gg03fooEv)();
+extern void ABISELECT(_ZThn32_N3gg03fooEv,_ZThn20_N3gg03fooEv)();
+extern void ABISELECT(_ZThn48_N3gg03fooEv,_ZThn28_N3gg03fooEv)();
+static  VTBL_ENTRY vtc_gg0[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg0[0]),
+  (VTBL_ENTRY)&_ZN3gg03fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3gg0[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg03fooEv,_ZThn8_N3gg03fooEv),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI3gg0[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn32_N3gg03fooEv,_ZThn20_N3gg03fooEv),
+  ABISELECT(-48,-28),
+  (VTBL_ENTRY)&(_ZTI3gg0[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn48_N3gg03fooEv,_ZThn28_N3gg03fooEv),
+};
+extern VTBL_ENTRY _ZTI3gg0[];
+extern  VTBL_ENTRY _ZTV3gg0[];
+Class_Descriptor cd_gg0 = {  "gg0", // class name
+  bases_gg0, 6,
+  &(vtc_gg0[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI3gg0),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg0),12, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  6, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa1  {
+  int a;
+   aa1(); // _ZN3aa1C1Ev
+  virtual void  foo(); // _ZN3aa13fooEv
+  ~aa1(); // tgen
+};
+//SIG(-1 aa1) C1{ v1 Fi}
+
+
+ aa1 ::aa1(){ note_ctor("aa1", this);}
+void  aa1 ::foo(){vfunc_called(this, "_ZN3aa13fooEv");}
+aa1 ::~aa1(){ note_dtor("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  bb1  {
+  int b;
+   bb1(); // _ZN3bb1C1Ev
+  virtual void  foo(); // _ZN3bb13fooEv
+  ~bb1(); // tgen
+};
+//SIG(-1 bb1) C1{ v1 Fi}
+
+
+ bb1 ::bb1(){ note_ctor("bb1", this);}
+void  bb1 ::foo(){vfunc_called(this, "_ZN3bb13fooEv");}
+bb1 ::~bb1(){ note_dtor("bb1", this);} // tgen
+
+static void Test_bb1()
+{
+  extern Class_Descriptor cd_bb1;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb1, buf);
+    bb1 *dp, &lv = *(dp=new (buf) bb1());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb1)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb1)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb1.b");
+    test_class_info(&lv, &cd_bb1);
+    dp->~bb1();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb1(Test_bb1, "bb1", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb1C1Ev();
+extern void _ZN3bb1D1Ev();
+Name_Map name_map_bb1[] = {
+  NSPAIR(_ZN3bb1C1Ev),
+  NSPAIR(_ZN3bb1D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb1[];
+extern void _ZN3bb13fooEv();
+static  VTBL_ENTRY vtc_bb1[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb1[0]),
+  (VTBL_ENTRY)&_ZN3bb13fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb1[];
+extern  VTBL_ENTRY _ZTV3bb1[];
+Class_Descriptor cd_bb1 = {  "bb1", // class name
+  0,0,//no base classes
+  &(vtc_bb1[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb1),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb1),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  cc1  {
+  int c;
+   cc1(); // _ZN3cc1C1Ev
+  virtual void  foo(); // _ZN3cc13fooEv
+  ~cc1(); // tgen
+};
+//SIG(-1 cc1) C1{ v1 Fi}
+
+
+ cc1 ::cc1(){ note_ctor("cc1", this);}
+void  cc1 ::foo(){vfunc_called(this, "_ZN3cc13fooEv");}
+cc1 ::~cc1(){ note_dtor("cc1", this);} // tgen
+
+static void Test_cc1()
+{
+  extern Class_Descriptor cd_cc1;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc1, buf);
+    cc1 *dp, &lv = *(dp=new (buf) cc1());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc1)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc1)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc1.c");
+    test_class_info(&lv, &cd_cc1);
+    dp->~cc1();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc1(Test_cc1, "cc1", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc1C1Ev();
+extern void _ZN3cc1D1Ev();
+Name_Map name_map_cc1[] = {
+  NSPAIR(_ZN3cc1C1Ev),
+  NSPAIR(_ZN3cc1D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc1[];
+extern void _ZN3cc13fooEv();
+static  VTBL_ENTRY vtc_cc1[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc1[0]),
+  (VTBL_ENTRY)&_ZN3cc13fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc1[];
+extern  VTBL_ENTRY _ZTV3cc1[];
+Class_Descriptor cd_cc1 = {  "cc1", // class name
+  0,0,//no base classes
+  &(vtc_cc1[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc1),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc1),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  dd1  {
+  int d;
+   dd1(); // _ZN3dd1C1Ev
+  virtual void  foo(); // _ZN3dd13fooEv
+  ~dd1(); // tgen
+};
+//SIG(-1 dd1) C1{ v1 Fi}
+
+
+ dd1 ::dd1(){ note_ctor("dd1", this);}
+void  dd1 ::foo(){vfunc_called(this, "_ZN3dd13fooEv");}
+dd1 ::~dd1(){ note_dtor("dd1", this);} // tgen
+
+static void Test_dd1()
+{
+  extern Class_Descriptor cd_dd1;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd1, buf);
+    dd1 *dp, &lv = *(dp=new (buf) dd1());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd1)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd1)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd1.d");
+    test_class_info(&lv, &cd_dd1);
+    dp->~dd1();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd1(Test_dd1, "dd1", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd1C1Ev();
+extern void _ZN3dd1D1Ev();
+Name_Map name_map_dd1[] = {
+  NSPAIR(_ZN3dd1C1Ev),
+  NSPAIR(_ZN3dd1D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd1[];
+extern void _ZN3dd13fooEv();
+static  VTBL_ENTRY vtc_dd1[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd1[0]),
+  (VTBL_ENTRY)&_ZN3dd13fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd1[];
+extern  VTBL_ENTRY _ZTV3dd1[];
+Class_Descriptor cd_dd1 = {  "dd1", // class name
+  0,0,//no base classes
+  &(vtc_dd1[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd1),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd1),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  ee1  : virtual aa1 , bb1 {
+  int e;
+   ee1(const ABISELECT(__tsi64,int) *const *); // _ZN3ee1C2Ev
+  virtual void  foo(); // _ZN3ee13fooEv
+  ~ee1(); // tgen
+  ee1(); // tgen
+};
+//SIG(-1 ee1) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee1 ::ee1(const ABISELECT(__tsi64,int) *const *){}
+void  ee1 ::foo(){vfunc_called(this, "_ZN3ee13fooEv");}
+ee1 ::~ee1(){ note_dtor("ee1", this);} // tgen
+ee1 ::ee1(){ note_ctor("ee1", this);} // tgen
+
+static void Test_ee1()
+{
+  extern Class_Descriptor cd_ee1;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee1, buf);
+    ee1 *dp, &lv = *(dp=new (buf) ee1());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee1)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee1)");
+    check_base_class_offset(lv, (aa1*), ABISELECT(16,12), "ee1");
+    check_base_class_offset(lv, (bb1*), 0, "ee1");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee1.e");
+    test_class_info(&lv, &cd_ee1);
+    dp->~ee1();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee1(Test_ee1, "ee1", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ee1C1Ev();
+extern void _ZN3ee1D1Ev();
+Name_Map name_map_ee1[] = {
+  NSPAIR(_ZN3ee1C1Ev),
+  NSPAIR(_ZN3ee1D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa1;
+extern VTBL_ENTRY _ZTI3aa1[];
+extern  VTBL_ENTRY _ZTV3aa1[];
+extern Class_Descriptor cd_bb1;
+extern VTBL_ENTRY _ZTI3bb1[];
+extern  VTBL_ENTRY _ZTV3bb1[];
+static Base_Class bases_ee1[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa1,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb1,    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 _ZTI3ee1[];
+extern void _ZN3ee13fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ee13fooEv,_ZTv0_n12_N3ee13fooEv)();
+extern void ABISELECT(_ZThn16_N3ee13fooEv,_ZThn12_N3ee13fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee1[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee1[0]),
+  (VTBL_ENTRY)&_ZN3ee13fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ee1[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee13fooEv,_ZTv0_n12_N3ee13fooEv),
+};
+extern VTBL_ENTRY _ZTV3ee1[];
+static  VTT_ENTRY vtt_ee1[] = {
+  {&(_ZTV3ee1[3]),  3,8},
+  {&(_ZTV3ee1[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ee1[];
+extern  VTBL_ENTRY _ZTV3ee1[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee1[];
+static VTBL_ENTRY alt_thunk_names1[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee13fooEv,_ZTv0_n12_N3ee13fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ee13fooEv,_ZThn12_N3ee13fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee1 = {  "ee1", // class name
+  bases_ee1, 2,
+  &(vtc_ee1[0]), // expected_vtbl_contents
+  &(vtt_ee1[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ee1),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee1),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ee1),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names1,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff1  : cc1 , dd1 {
+  int f;
+   ff1(); // _ZN3ff1C1Ev
+  virtual void  foo(); // _ZN3ff13fooEv
+  ~ff1(); // tgen
+};
+//SIG(-1 ff1) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff1 ::ff1(){ note_ctor("ff1", this);}
+void  ff1 ::foo(){vfunc_called(this, "_ZN3ff13fooEv");}
+ff1 ::~ff1(){ note_dtor("ff1", this);} // tgen
+
+static void Test_ff1()
+{
+  extern Class_Descriptor cd_ff1;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff1, buf);
+    ff1 *dp, &lv = *(dp=new (buf) ff1());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff1)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff1)");
+    check_base_class_offset(lv, (cc1*), 0, "ff1");
+    check_base_class_offset(lv, (dd1*), ABISELECT(16,8), "ff1");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff1.f");
+    test_class_info(&lv, &cd_ff1);
+    dp->~ff1();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff1(Test_ff1, "ff1", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff1C1Ev();
+extern void _ZN3ff1D1Ev();
+Name_Map name_map_ff1[] = {
+  NSPAIR(_ZN3ff1C1Ev),
+  NSPAIR(_ZN3ff1D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc1;
+extern VTBL_ENTRY _ZTI3cc1[];
+extern  VTBL_ENTRY _ZTV3cc1[];
+extern Class_Descriptor cd_dd1;
+extern VTBL_ENTRY _ZTI3dd1[];
+extern  VTBL_ENTRY _ZTV3dd1[];
+static Base_Class bases_ff1[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc1,    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},
+  {&cd_dd1,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI3ff1[];
+extern void _ZN3ff13fooEv();
+extern void ABISELECT(_ZThn16_N3ff13fooEv,_ZThn8_N3ff13fooEv)();
+static  VTBL_ENTRY vtc_ff1[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff1[0]),
+  (VTBL_ENTRY)&_ZN3ff13fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3ff1[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3ff13fooEv,_ZThn8_N3ff13fooEv),
+};
+extern VTBL_ENTRY _ZTI3ff1[];
+extern  VTBL_ENTRY _ZTV3ff1[];
+Class_Descriptor cd_ff1 = {  "ff1", // class name
+  bases_ff1, 2,
+  &(vtc_ff1[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff1),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff1),6, //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  gg1  : ee1 , ff1 {
+  int g;
+   gg1(const ABISELECT(__tsi64,int) *const *); // _ZN3gg1C2Ev
+  virtual void  foo(); // _ZN3gg13fooEv
+  ~gg1(); // tgen
+  gg1(); // tgen
+};
+//SIG(1 gg1) C1{ BC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg1 ::gg1(const ABISELECT(__tsi64,int) *const *){}
+void  gg1 ::foo(){vfunc_called(this, "_ZN3gg13fooEv");}
+gg1 ::~gg1(){ note_dtor("gg1", this);} // tgen
+gg1 ::gg1(){ note_ctor("gg1", this);} // tgen
+
+static void Test_gg1()
+{
+  extern Class_Descriptor cd_gg1;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg1, buf);
+    gg1 *dp, &lv = *(dp=new (buf) gg1());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg1)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg1)");
+    check_base_class_offset(lv, (aa1*)(ee1*), ABISELECT(56,36), "gg1");
+    check_base_class_offset(lv, (bb1*)(ee1*), 0, "gg1");
+    check_base_class_offset(lv, (ee1*), 0, "gg1");
+    check_base_class_offset(lv, (cc1*)(ff1*), ABISELECT(16,12), "gg1");
+    check_base_class_offset(lv, (dd1*)(ff1*), ABISELECT(32,20), "gg1");
+    check_base_class_offset(lv, (ff1*), ABISELECT(16,12), "gg1");
+    check_field_offset(lv, g, ABISELECT(48,32), "gg1.g");
+    test_class_info(&lv, &cd_gg1);
+    dp->~gg1();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg1(Test_gg1, "gg1", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN3gg1C1Ev();
+extern void _ZN3gg1D1Ev();
+Name_Map name_map_gg1[] = {
+  NSPAIR(_ZN3gg1C1Ev),
+  NSPAIR(_ZN3gg1D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa1;
+extern VTBL_ENTRY _ZTI3aa1[];
+extern  VTBL_ENTRY _ZTV3aa1[];
+extern Class_Descriptor cd_bb1;
+extern VTBL_ENTRY _ZTI3bb1[];
+extern  VTBL_ENTRY _ZTV3bb1[];
+extern Class_Descriptor cd_ee1;
+extern VTBL_ENTRY _ZTI3ee1[];
+extern  VTBL_ENTRY _ZTV3ee1[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee1[];
+extern Class_Descriptor cd_cc1;
+extern VTBL_ENTRY _ZTI3cc1[];
+extern  VTBL_ENTRY _ZTV3cc1[];
+extern Class_Descriptor cd_dd1;
+extern VTBL_ENTRY _ZTI3dd1[];
+extern  VTBL_ENTRY _ZTV3dd1[];
+extern Class_Descriptor cd_ff1;
+extern VTBL_ENTRY _ZTI3ff1[];
+extern  VTBL_ENTRY _ZTV3ff1[];
+static Base_Class bases_gg1[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa1,    ABISELECT(56,36), //bcp->offset
+    10, //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_bb1,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee1,    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},
+  {&cd_cc1,    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
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd1,    ABISELECT(32,20), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff1,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg1[];
+extern void _ZN3gg13fooEv();
+extern void ABISELECT(_ZThn16_N3gg13fooEv,_ZThn12_N3gg13fooEv)();
+extern void ABISELECT(_ZThn32_N3gg13fooEv,_ZThn20_N3gg13fooEv)();
+extern void ABISELECT(_ZTv0_n24_N3gg13fooEv,_ZTv0_n12_N3gg13fooEv)();
+extern void ABISELECT(_ZThn56_N3gg13fooEv,_ZThn36_N3gg13fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg1[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg1[0]),
+  (VTBL_ENTRY)&_ZN3gg13fooEv,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3gg1[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg13fooEv,_ZThn12_N3gg13fooEv),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI3gg1[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn32_N3gg13fooEv,_ZThn20_N3gg13fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI3gg1[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg13fooEv,_ZTv0_n12_N3gg13fooEv),
+};
+extern VTBL_ENTRY _ZTV3gg1[];
+extern void _ZN3ee13fooEv();
+static  VTBL_ENTRY _tg__ZTV3ee1__3gg1[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee1[0]),
+  (VTBL_ENTRY)&_ZN3ee13fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ee13fooEv,_ZTv0_n12_N3ee13fooEv)();
+extern void ABISELECT(_ZThn56_N3ee13fooEv,_ZThn36_N3ee13fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3aa1__3ee1__3gg1[] = {
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI3ee1[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee13fooEv,_ZTv0_n12_N3ee13fooEv),
+};
+static  VTT_ENTRY vtt_gg1[] = {
+  {&(_ZTV3gg1[3]),  3,14},
+  {&(_tg__ZTV3ee1__3gg1[3]),  3,4},
+  {&(_tg__ZTV3aa1__3ee1__3gg1[3]),  3,4},
+  {&(_ZTV3gg1[13]),  13,14},
+};
+extern VTBL_ENTRY _ZTI3gg1[];
+extern  VTBL_ENTRY _ZTV3gg1[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3gg1[];
+static VTBL_ENTRY alt_thunk_names2[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee13fooEv,_ZTv0_n12_N3ee13fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3ee13fooEv,_ZThn36_N3ee13fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3gg13fooEv,_ZTv0_n12_N3gg13fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3gg13fooEv,_ZThn36_N3gg13fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg1 = {  "gg1", // class name
+  bases_gg1, 6,
+  &(vtc_gg1[0]), // expected_vtbl_contents
+  &(vtt_gg1[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI3gg1),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg1),14, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3gg1),4, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names2,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa2  {
+  int a;
+   aa2(); // _ZN3aa2C1Ev
+  virtual void  foo(); // _ZN3aa23fooEv
+  ~aa2(); // tgen
+};
+//SIG(-1 aa2) C1{ v1 Fi}
+
+
+ aa2 ::aa2(){ note_ctor("aa2", this);}
+void  aa2 ::foo(){vfunc_called(this, "_ZN3aa23fooEv");}
+aa2 ::~aa2(){ note_dtor("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();
+static  VTBL_ENTRY vtc_aa2[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa2[0]),
+  (VTBL_ENTRY)&_ZN3aa23fooEv,
+};
+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),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  bb2  {
+  int b;
+   bb2(); // _ZN3bb2C1Ev
+  virtual void  foo(); // _ZN3bb23fooEv
+  ~bb2(); // tgen
+};
+//SIG(-1 bb2) C1{ v1 Fi}
+
+
+ bb2 ::bb2(){ note_ctor("bb2", this);}
+void  bb2 ::foo(){vfunc_called(this, "_ZN3bb23fooEv");}
+bb2 ::~bb2(){ note_dtor("bb2", this);} // tgen
+
+static void Test_bb2()
+{
+  extern Class_Descriptor cd_bb2;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb2, buf);
+    bb2 *dp, &lv = *(dp=new (buf) bb2());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb2)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb2)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb2.b");
+    test_class_info(&lv, &cd_bb2);
+    dp->~bb2();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb2(Test_bb2, "bb2", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb2C1Ev();
+extern void _ZN3bb2D1Ev();
+Name_Map name_map_bb2[] = {
+  NSPAIR(_ZN3bb2C1Ev),
+  NSPAIR(_ZN3bb2D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb2[];
+extern void _ZN3bb23fooEv();
+static  VTBL_ENTRY vtc_bb2[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb2[0]),
+  (VTBL_ENTRY)&_ZN3bb23fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb2[];
+extern  VTBL_ENTRY _ZTV3bb2[];
+Class_Descriptor cd_bb2 = {  "bb2", // class name
+  0,0,//no base classes
+  &(vtc_bb2[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb2),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb2),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  cc2  {
+  int c;
+   cc2(); // _ZN3cc2C1Ev
+  virtual void  foo(); // _ZN3cc23fooEv
+  ~cc2(); // tgen
+};
+//SIG(-1 cc2) C1{ v1 Fi}
+
+
+ cc2 ::cc2(){ note_ctor("cc2", this);}
+void  cc2 ::foo(){vfunc_called(this, "_ZN3cc23fooEv");}
+cc2 ::~cc2(){ note_dtor("cc2", this);} // tgen
+
+static void Test_cc2()
+{
+  extern Class_Descriptor cd_cc2;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc2, buf);
+    cc2 *dp, &lv = *(dp=new (buf) cc2());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc2)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc2)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc2.c");
+    test_class_info(&lv, &cd_cc2);
+    dp->~cc2();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc2(Test_cc2, "cc2", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc2C1Ev();
+extern void _ZN3cc2D1Ev();
+Name_Map name_map_cc2[] = {
+  NSPAIR(_ZN3cc2C1Ev),
+  NSPAIR(_ZN3cc2D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc2[];
+extern void _ZN3cc23fooEv();
+static  VTBL_ENTRY vtc_cc2[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc2[0]),
+  (VTBL_ENTRY)&_ZN3cc23fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc2[];
+extern  VTBL_ENTRY _ZTV3cc2[];
+Class_Descriptor cd_cc2 = {  "cc2", // class name
+  0,0,//no base classes
+  &(vtc_cc2[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc2),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc2),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  dd2  {
+  int d;
+   dd2(); // _ZN3dd2C1Ev
+  virtual void  foo(); // _ZN3dd23fooEv
+  ~dd2(); // tgen
+};
+//SIG(-1 dd2) C1{ v1 Fi}
+
+
+ dd2 ::dd2(){ note_ctor("dd2", this);}
+void  dd2 ::foo(){vfunc_called(this, "_ZN3dd23fooEv");}
+dd2 ::~dd2(){ note_dtor("dd2", this);} // tgen
+
+static void Test_dd2()
+{
+  extern Class_Descriptor cd_dd2;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd2, buf);
+    dd2 *dp, &lv = *(dp=new (buf) dd2());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd2)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd2)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd2.d");
+    test_class_info(&lv, &cd_dd2);
+    dp->~dd2();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd2(Test_dd2, "dd2", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd2C1Ev();
+extern void _ZN3dd2D1Ev();
+Name_Map name_map_dd2[] = {
+  NSPAIR(_ZN3dd2C1Ev),
+  NSPAIR(_ZN3dd2D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd2[];
+extern void _ZN3dd23fooEv();
+static  VTBL_ENTRY vtc_dd2[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd2[0]),
+  (VTBL_ENTRY)&_ZN3dd23fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd2[];
+extern  VTBL_ENTRY _ZTV3dd2[];
+Class_Descriptor cd_dd2 = {  "dd2", // class name
+  0,0,//no base classes
+  &(vtc_dd2[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd2),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd2),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  ee2  : aa2 , virtual bb2 {
+  int e;
+   ee2(const ABISELECT(__tsi64,int) *const *); // _ZN3ee2C2Ev
+  virtual void  foo(); // _ZN3ee23fooEv
+  ~ee2(); // tgen
+  ee2(); // tgen
+};
+//SIG(-1 ee2) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee2 ::ee2(const ABISELECT(__tsi64,int) *const *){}
+void  ee2 ::foo(){vfunc_called(this, "_ZN3ee23fooEv");}
+ee2 ::~ee2(){ note_dtor("ee2", this);} // tgen
+ee2 ::ee2(){ note_ctor("ee2", this);} // tgen
+
+static void Test_ee2()
+{
+  extern Class_Descriptor cd_ee2;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee2, buf);
+    ee2 *dp, &lv = *(dp=new (buf) ee2());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee2)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee2)");
+    check_base_class_offset(lv, (aa2*), 0, "ee2");
+    check_base_class_offset(lv, (bb2*), ABISELECT(16,12), "ee2");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee2.e");
+    test_class_info(&lv, &cd_ee2);
+    dp->~ee2();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee2(Test_ee2, "ee2", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ee2C1Ev();
+extern void _ZN3ee2D1Ev();
+Name_Map name_map_ee2[] = {
+  NSPAIR(_ZN3ee2C1Ev),
+  NSPAIR(_ZN3ee2D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa2;
+extern VTBL_ENTRY _ZTI3aa2[];
+extern  VTBL_ENTRY _ZTV3aa2[];
+extern Class_Descriptor cd_bb2;
+extern VTBL_ENTRY _ZTI3bb2[];
+extern  VTBL_ENTRY _ZTV3bb2[];
+static Base_Class bases_ee2[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa2,    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},
+  {&cd_bb2,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3ee2[];
+extern void _ZN3ee23fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ee23fooEv,_ZTv0_n12_N3ee23fooEv)();
+extern void ABISELECT(_ZThn16_N3ee23fooEv,_ZThn12_N3ee23fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee2[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee2[0]),
+  (VTBL_ENTRY)&_ZN3ee23fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ee2[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee23fooEv,_ZTv0_n12_N3ee23fooEv),
+};
+extern VTBL_ENTRY _ZTV3ee2[];
+static  VTT_ENTRY vtt_ee2[] = {
+  {&(_ZTV3ee2[3]),  3,8},
+  {&(_ZTV3ee2[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ee2[];
+extern  VTBL_ENTRY _ZTV3ee2[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee2[];
+static VTBL_ENTRY alt_thunk_names3[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee23fooEv,_ZTv0_n12_N3ee23fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ee23fooEv,_ZThn12_N3ee23fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee2 = {  "ee2", // class name
+  bases_ee2, 2,
+  &(vtc_ee2[0]), // expected_vtbl_contents
+  &(vtt_ee2[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ee2),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee2),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ee2),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names3,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff2  : cc2 , dd2 {
+  int f;
+   ff2(); // _ZN3ff2C1Ev
+  virtual void  foo(); // _ZN3ff23fooEv
+  ~ff2(); // tgen
+};
+//SIG(-1 ff2) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff2 ::ff2(){ note_ctor("ff2", this);}
+void  ff2 ::foo(){vfunc_called(this, "_ZN3ff23fooEv");}
+ff2 ::~ff2(){ note_dtor("ff2", this);} // tgen
+
+static void Test_ff2()
+{
+  extern Class_Descriptor cd_ff2;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff2, buf);
+    ff2 *dp, &lv = *(dp=new (buf) ff2());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff2)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff2)");
+    check_base_class_offset(lv, (cc2*), 0, "ff2");
+    check_base_class_offset(lv, (dd2*), ABISELECT(16,8), "ff2");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff2.f");
+    test_class_info(&lv, &cd_ff2);
+    dp->~ff2();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff2(Test_ff2, "ff2", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff2C1Ev();
+extern void _ZN3ff2D1Ev();
+Name_Map name_map_ff2[] = {
+  NSPAIR(_ZN3ff2C1Ev),
+  NSPAIR(_ZN3ff2D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc2;
+extern VTBL_ENTRY _ZTI3cc2[];
+extern  VTBL_ENTRY _ZTV3cc2[];
+extern Class_Descriptor cd_dd2;
+extern VTBL_ENTRY _ZTI3dd2[];
+extern  VTBL_ENTRY _ZTV3dd2[];
+static Base_Class bases_ff2[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc2,    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},
+  {&cd_dd2,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI3ff2[];
+extern void _ZN3ff23fooEv();
+extern void ABISELECT(_ZThn16_N3ff23fooEv,_ZThn8_N3ff23fooEv)();
+static  VTBL_ENTRY vtc_ff2[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff2[0]),
+  (VTBL_ENTRY)&_ZN3ff23fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3ff2[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3ff23fooEv,_ZThn8_N3ff23fooEv),
+};
+extern VTBL_ENTRY _ZTI3ff2[];
+extern  VTBL_ENTRY _ZTV3ff2[];
+Class_Descriptor cd_ff2 = {  "ff2", // class name
+  bases_ff2, 2,
+  &(vtc_ff2[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff2),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff2),6, //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  gg2  : ee2 , ff2 {
+  int g;
+   gg2(const ABISELECT(__tsi64,int) *const *); // _ZN3gg2C2Ev
+  virtual void  foo(); // _ZN3gg23fooEv
+  ~gg2(); // tgen
+  gg2(); // tgen
+};
+//SIG(1 gg2) C1{ BC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg2 ::gg2(const ABISELECT(__tsi64,int) *const *){}
+void  gg2 ::foo(){vfunc_called(this, "_ZN3gg23fooEv");}
+gg2 ::~gg2(){ note_dtor("gg2", this);} // tgen
+gg2 ::gg2(){ note_ctor("gg2", this);} // tgen
+
+static void Test_gg2()
+{
+  extern Class_Descriptor cd_gg2;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg2, buf);
+    gg2 *dp, &lv = *(dp=new (buf) gg2());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg2)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg2)");
+    check_base_class_offset(lv, (aa2*)(ee2*), 0, "gg2");
+    check_base_class_offset(lv, (bb2*)(ee2*), ABISELECT(56,36), "gg2");
+    check_base_class_offset(lv, (ee2*), 0, "gg2");
+    check_base_class_offset(lv, (cc2*)(ff2*), ABISELECT(16,12), "gg2");
+    check_base_class_offset(lv, (dd2*)(ff2*), ABISELECT(32,20), "gg2");
+    check_base_class_offset(lv, (ff2*), ABISELECT(16,12), "gg2");
+    check_field_offset(lv, g, ABISELECT(48,32), "gg2.g");
+    test_class_info(&lv, &cd_gg2);
+    dp->~gg2();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg2(Test_gg2, "gg2", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN3gg2C1Ev();
+extern void _ZN3gg2D1Ev();
+Name_Map name_map_gg2[] = {
+  NSPAIR(_ZN3gg2C1Ev),
+  NSPAIR(_ZN3gg2D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa2;
+extern VTBL_ENTRY _ZTI3aa2[];
+extern  VTBL_ENTRY _ZTV3aa2[];
+extern Class_Descriptor cd_bb2;
+extern VTBL_ENTRY _ZTI3bb2[];
+extern  VTBL_ENTRY _ZTV3bb2[];
+extern Class_Descriptor cd_ee2;
+extern VTBL_ENTRY _ZTI3ee2[];
+extern  VTBL_ENTRY _ZTV3ee2[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee2[];
+extern Class_Descriptor cd_cc2;
+extern VTBL_ENTRY _ZTI3cc2[];
+extern  VTBL_ENTRY _ZTV3cc2[];
+extern Class_Descriptor cd_dd2;
+extern VTBL_ENTRY _ZTI3dd2[];
+extern  VTBL_ENTRY _ZTV3dd2[];
+extern Class_Descriptor cd_ff2;
+extern VTBL_ENTRY _ZTI3ff2[];
+extern  VTBL_ENTRY _ZTV3ff2[];
+static Base_Class bases_gg2[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa2,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb2,    ABISELECT(56,36), //bcp->offset
+    10, //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_ee2,    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},
+  {&cd_cc2,    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
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd2,    ABISELECT(32,20), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff2,    ABISELECT(16,12), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg2[];
+extern void _ZN3gg23fooEv();
+extern void ABISELECT(_ZThn16_N3gg23fooEv,_ZThn12_N3gg23fooEv)();
+extern void ABISELECT(_ZThn32_N3gg23fooEv,_ZThn20_N3gg23fooEv)();
+extern void ABISELECT(_ZTv0_n24_N3gg23fooEv,_ZTv0_n12_N3gg23fooEv)();
+extern void ABISELECT(_ZThn56_N3gg23fooEv,_ZThn36_N3gg23fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg2[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg2[0]),
+  (VTBL_ENTRY)&_ZN3gg23fooEv,
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3gg2[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg23fooEv,_ZThn12_N3gg23fooEv),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI3gg2[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn32_N3gg23fooEv,_ZThn20_N3gg23fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI3gg2[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg23fooEv,_ZTv0_n12_N3gg23fooEv),
+};
+extern VTBL_ENTRY _ZTV3gg2[];
+extern void _ZN3ee23fooEv();
+static  VTBL_ENTRY _tg__ZTV3ee2__3gg2[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee2[0]),
+  (VTBL_ENTRY)&_ZN3ee23fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ee23fooEv,_ZTv0_n12_N3ee23fooEv)();
+extern void ABISELECT(_ZThn56_N3ee23fooEv,_ZThn36_N3ee23fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3bb2__3ee2__3gg2[] = {
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI3ee2[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee23fooEv,_ZTv0_n12_N3ee23fooEv),
+};
+static  VTT_ENTRY vtt_gg2[] = {
+  {&(_ZTV3gg2[3]),  3,14},
+  {&(_tg__ZTV3ee2__3gg2[3]),  3,4},
+  {&(_tg__ZTV3bb2__3ee2__3gg2[3]),  3,4},
+  {&(_ZTV3gg2[13]),  13,14},
+};
+extern VTBL_ENTRY _ZTI3gg2[];
+extern  VTBL_ENTRY _ZTV3gg2[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3gg2[];
+static VTBL_ENTRY alt_thunk_names4[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee23fooEv,_ZTv0_n12_N3ee23fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3ee23fooEv,_ZThn36_N3ee23fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3gg23fooEv,_ZTv0_n12_N3gg23fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3gg23fooEv,_ZThn36_N3gg23fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg2 = {  "gg2", // class name
+  bases_gg2, 6,
+  &(vtc_gg2[0]), // expected_vtbl_contents
+  &(vtt_gg2[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI3gg2),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg2),14, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3gg2),4, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names4,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa3  {
+  int a;
+   aa3(); // _ZN3aa3C1Ev
+  virtual void  foo(); // _ZN3aa33fooEv
+  ~aa3(); // tgen
+};
+//SIG(-1 aa3) C1{ v1 Fi}
+
+
+ aa3 ::aa3(){ note_ctor("aa3", this);}
+void  aa3 ::foo(){vfunc_called(this, "_ZN3aa33fooEv");}
+aa3 ::~aa3(){ note_dtor("aa3", this);} // tgen
+
+static void Test_aa3()
+{
+  extern Class_Descriptor cd_aa3;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa3, buf);
+    aa3 *dp, &lv = *(dp=new (buf) aa3());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa3)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa3)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa3.a");
+    test_class_info(&lv, &cd_aa3);
+    dp->~aa3();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa3(Test_aa3, "aa3", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa3C1Ev();
+extern void _ZN3aa3D1Ev();
+Name_Map name_map_aa3[] = {
+  NSPAIR(_ZN3aa3C1Ev),
+  NSPAIR(_ZN3aa3D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa3[];
+extern void _ZN3aa33fooEv();
+static  VTBL_ENTRY vtc_aa3[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa3[0]),
+  (VTBL_ENTRY)&_ZN3aa33fooEv,
+};
+extern VTBL_ENTRY _ZTI3aa3[];
+extern  VTBL_ENTRY _ZTV3aa3[];
+Class_Descriptor cd_aa3 = {  "aa3", // class name
+  0,0,//no base classes
+  &(vtc_aa3[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa3),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa3),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  bb3  {
+  int b;
+   bb3(); // _ZN3bb3C1Ev
+  virtual void  foo(); // _ZN3bb33fooEv
+  ~bb3(); // tgen
+};
+//SIG(-1 bb3) C1{ v1 Fi}
+
+
+ bb3 ::bb3(){ note_ctor("bb3", this);}
+void  bb3 ::foo(){vfunc_called(this, "_ZN3bb33fooEv");}
+bb3 ::~bb3(){ note_dtor("bb3", this);} // tgen
+
+static void Test_bb3()
+{
+  extern Class_Descriptor cd_bb3;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb3, buf);
+    bb3 *dp, &lv = *(dp=new (buf) bb3());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb3)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb3)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb3.b");
+    test_class_info(&lv, &cd_bb3);
+    dp->~bb3();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb3(Test_bb3, "bb3", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb3C1Ev();
+extern void _ZN3bb3D1Ev();
+Name_Map name_map_bb3[] = {
+  NSPAIR(_ZN3bb3C1Ev),
+  NSPAIR(_ZN3bb3D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb3[];
+extern void _ZN3bb33fooEv();
+static  VTBL_ENTRY vtc_bb3[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb3[0]),
+  (VTBL_ENTRY)&_ZN3bb33fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb3[];
+extern  VTBL_ENTRY _ZTV3bb3[];
+Class_Descriptor cd_bb3 = {  "bb3", // class name
+  0,0,//no base classes
+  &(vtc_bb3[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb3),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb3),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  cc3  {
+  int c;
+   cc3(); // _ZN3cc3C1Ev
+  virtual void  foo(); // _ZN3cc33fooEv
+  ~cc3(); // tgen
+};
+//SIG(-1 cc3) C1{ v1 Fi}
+
+
+ cc3 ::cc3(){ note_ctor("cc3", this);}
+void  cc3 ::foo(){vfunc_called(this, "_ZN3cc33fooEv");}
+cc3 ::~cc3(){ note_dtor("cc3", this);} // tgen
+
+static void Test_cc3()
+{
+  extern Class_Descriptor cd_cc3;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc3, buf);
+    cc3 *dp, &lv = *(dp=new (buf) cc3());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc3)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc3)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc3.c");
+    test_class_info(&lv, &cd_cc3);
+    dp->~cc3();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc3(Test_cc3, "cc3", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc3C1Ev();
+extern void _ZN3cc3D1Ev();
+Name_Map name_map_cc3[] = {
+  NSPAIR(_ZN3cc3C1Ev),
+  NSPAIR(_ZN3cc3D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc3[];
+extern void _ZN3cc33fooEv();
+static  VTBL_ENTRY vtc_cc3[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc3[0]),
+  (VTBL_ENTRY)&_ZN3cc33fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc3[];
+extern  VTBL_ENTRY _ZTV3cc3[];
+Class_Descriptor cd_cc3 = {  "cc3", // class name
+  0,0,//no base classes
+  &(vtc_cc3[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc3),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc3),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  dd3  {
+  int d;
+   dd3(); // _ZN3dd3C1Ev
+  virtual void  foo(); // _ZN3dd33fooEv
+  ~dd3(); // tgen
+};
+//SIG(-1 dd3) C1{ v1 Fi}
+
+
+ dd3 ::dd3(){ note_ctor("dd3", this);}
+void  dd3 ::foo(){vfunc_called(this, "_ZN3dd33fooEv");}
+dd3 ::~dd3(){ note_dtor("dd3", this);} // tgen
+
+static void Test_dd3()
+{
+  extern Class_Descriptor cd_dd3;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd3, buf);
+    dd3 *dp, &lv = *(dp=new (buf) dd3());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd3)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd3)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd3.d");
+    test_class_info(&lv, &cd_dd3);
+    dp->~dd3();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd3(Test_dd3, "dd3", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd3C1Ev();
+extern void _ZN3dd3D1Ev();
+Name_Map name_map_dd3[] = {
+  NSPAIR(_ZN3dd3C1Ev),
+  NSPAIR(_ZN3dd3D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd3[];
+extern void _ZN3dd33fooEv();
+static  VTBL_ENTRY vtc_dd3[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd3[0]),
+  (VTBL_ENTRY)&_ZN3dd33fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd3[];
+extern  VTBL_ENTRY _ZTV3dd3[];
+Class_Descriptor cd_dd3 = {  "dd3", // class name
+  0,0,//no base classes
+  &(vtc_dd3[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd3),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd3),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  ee3  : virtual aa3 , virtual bb3 {
+  int e;
+   ee3(const ABISELECT(__tsi64,int) *const *); // _ZN3ee3C2Ev
+  virtual void  foo(); // _ZN3ee33fooEv
+  ~ee3(); // tgen
+  ee3(); // tgen
+};
+//SIG(-1 ee3) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee3 ::ee3(const ABISELECT(__tsi64,int) *const *){}
+void  ee3 ::foo(){vfunc_called(this, "_ZN3ee33fooEv");}
+ee3 ::~ee3(){ note_dtor("ee3", this);} // tgen
+ee3 ::ee3(){ note_ctor("ee3", this);} // tgen
+
+static void Test_ee3()
+{
+  extern Class_Descriptor cd_ee3;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee3, buf);
+    ee3 *dp, &lv = *(dp=new (buf) ee3());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee3)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee3)");
+    check_base_class_offset(lv, (aa3*), ABISELECT(16,8), "ee3");
+    check_base_class_offset(lv, (bb3*), ABISELECT(32,16), "ee3");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee3.e");
+    test_class_info(&lv, &cd_ee3);
+    dp->~ee3();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee3(Test_ee3, "ee3", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN3ee3C1Ev();
+extern void _ZN3ee3D1Ev();
+Name_Map name_map_ee3[] = {
+  NSPAIR(_ZN3ee3C1Ev),
+  NSPAIR(_ZN3ee3D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa3;
+extern VTBL_ENTRY _ZTI3aa3[];
+extern  VTBL_ENTRY _ZTV3aa3[];
+extern Class_Descriptor cd_bb3;
+extern VTBL_ENTRY _ZTI3bb3[];
+extern  VTBL_ENTRY _ZTV3bb3[];
+static Base_Class bases_ee3[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa3,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb3,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3ee3[];
+extern void _ZN3ee33fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv)();
+extern void ABISELECT(_ZThn16_N3ee33fooEv,_ZThn8_N3ee33fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv)();
+extern void ABISELECT(_ZThn32_N3ee33fooEv,_ZThn16_N3ee33fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee3[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee3[0]),
+  (VTBL_ENTRY)&_ZN3ee33fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3ee3[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI3ee3[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv),
+};
+extern VTBL_ENTRY _ZTV3ee3[];
+static  VTT_ENTRY vtt_ee3[] = {
+  {&(_ZTV3ee3[4]),  4,13},
+  {&(_ZTV3ee3[8]),  8,13},
+  {&(_ZTV3ee3[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI3ee3[];
+extern  VTBL_ENTRY _ZTV3ee3[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee3[];
+static VTBL_ENTRY alt_thunk_names5[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N3ee33fooEv,_ZThn16_N3ee33fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ee33fooEv,_ZThn8_N3ee33fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee3 = {  "ee3", // class name
+  bases_ee3, 2,
+  &(vtc_ee3[0]), // expected_vtbl_contents
+  &(vtt_ee3[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI3ee3),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee3),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ee3),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names5,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff3  : cc3 , dd3 {
+  int f;
+   ff3(); // _ZN3ff3C1Ev
+  virtual void  foo(); // _ZN3ff33fooEv
+  ~ff3(); // tgen
+};
+//SIG(-1 ff3) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff3 ::ff3(){ note_ctor("ff3", this);}
+void  ff3 ::foo(){vfunc_called(this, "_ZN3ff33fooEv");}
+ff3 ::~ff3(){ note_dtor("ff3", this);} // tgen
+
+static void Test_ff3()
+{
+  extern Class_Descriptor cd_ff3;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff3, buf);
+    ff3 *dp, &lv = *(dp=new (buf) ff3());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff3)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff3)");
+    check_base_class_offset(lv, (cc3*), 0, "ff3");
+    check_base_class_offset(lv, (dd3*), ABISELECT(16,8), "ff3");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff3.f");
+    test_class_info(&lv, &cd_ff3);
+    dp->~ff3();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff3(Test_ff3, "ff3", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff3C1Ev();
+extern void _ZN3ff3D1Ev();
+Name_Map name_map_ff3[] = {
+  NSPAIR(_ZN3ff3C1Ev),
+  NSPAIR(_ZN3ff3D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc3;
+extern VTBL_ENTRY _ZTI3cc3[];
+extern  VTBL_ENTRY _ZTV3cc3[];
+extern Class_Descriptor cd_dd3;
+extern VTBL_ENTRY _ZTI3dd3[];
+extern  VTBL_ENTRY _ZTV3dd3[];
+static Base_Class bases_ff3[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc3,    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},
+  {&cd_dd3,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI3ff3[];
+extern void _ZN3ff33fooEv();
+extern void ABISELECT(_ZThn16_N3ff33fooEv,_ZThn8_N3ff33fooEv)();
+static  VTBL_ENTRY vtc_ff3[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff3[0]),
+  (VTBL_ENTRY)&_ZN3ff33fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3ff3[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3ff33fooEv,_ZThn8_N3ff33fooEv),
+};
+extern VTBL_ENTRY _ZTI3ff3[];
+extern  VTBL_ENTRY _ZTV3ff3[];
+Class_Descriptor cd_ff3 = {  "ff3", // class name
+  bases_ff3, 2,
+  &(vtc_ff3[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff3),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff3),6, //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  gg3  : ee3 , ff3 {
+  int g;
+   gg3(const ABISELECT(__tsi64,int) *const *); // _ZN3gg3C2Ev
+  virtual void  foo(); // _ZN3gg33fooEv
+  ~gg3(); // tgen
+  gg3(); // tgen
+};
+//SIG(1 gg3) C1{ BC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg3 ::gg3(const ABISELECT(__tsi64,int) *const *){}
+void  gg3 ::foo(){vfunc_called(this, "_ZN3gg33fooEv");}
+gg3 ::~gg3(){ note_dtor("gg3", this);} // tgen
+gg3 ::gg3(){ note_ctor("gg3", this);} // tgen
+
+static void Test_gg3()
+{
+  extern Class_Descriptor cd_gg3;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(12,13)];
+    init_test(&cd_gg3, buf);
+    gg3 *dp, &lv = *(dp=new (buf) gg3());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(88,48), "sizeof(gg3)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg3)");
+    check_base_class_offset(lv, (aa3*)(ee3*), ABISELECT(56,32), "gg3");
+    check_base_class_offset(lv, (bb3*)(ee3*), ABISELECT(72,40), "gg3");
+    check_base_class_offset(lv, (ee3*), 0, "gg3");
+    check_base_class_offset(lv, (cc3*)(ff3*), ABISELECT(16,8), "gg3");
+    check_base_class_offset(lv, (dd3*)(ff3*), ABISELECT(32,16), "gg3");
+    check_base_class_offset(lv, (ff3*), ABISELECT(16,8), "gg3");
+    check_field_offset(lv, g, ABISELECT(48,28), "gg3.g");
+    test_class_info(&lv, &cd_gg3);
+    dp->~gg3();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg3(Test_gg3, "gg3", ABISELECT(88,48));
+
+#else // __cplusplus
+
+extern void _ZN3gg3C1Ev();
+extern void _ZN3gg3D1Ev();
+Name_Map name_map_gg3[] = {
+  NSPAIR(_ZN3gg3C1Ev),
+  NSPAIR(_ZN3gg3D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa3;
+extern VTBL_ENTRY _ZTI3aa3[];
+extern  VTBL_ENTRY _ZTV3aa3[];
+extern Class_Descriptor cd_bb3;
+extern VTBL_ENTRY _ZTI3bb3[];
+extern  VTBL_ENTRY _ZTV3bb3[];
+extern Class_Descriptor cd_ee3;
+extern VTBL_ENTRY _ZTI3ee3[];
+extern  VTBL_ENTRY _ZTV3ee3[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee3[];
+extern Class_Descriptor cd_cc3;
+extern VTBL_ENTRY _ZTI3cc3[];
+extern  VTBL_ENTRY _ZTV3cc3[];
+extern Class_Descriptor cd_dd3;
+extern VTBL_ENTRY _ZTI3dd3[];
+extern  VTBL_ENTRY _ZTV3dd3[];
+extern Class_Descriptor cd_ff3;
+extern VTBL_ENTRY _ZTI3ff3[];
+extern  VTBL_ENTRY _ZTV3ff3[];
+static Base_Class bases_gg3[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa3,    ABISELECT(56,32), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb3,    ABISELECT(72,40), //bcp->offset
+    15, //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
+    2, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee3,    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},
+  {&cd_cc3,    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
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd3,    ABISELECT(32,16), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff3,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg3[];
+extern void _ZN3gg33fooEv();
+extern void ABISELECT(_ZThn16_N3gg33fooEv,_ZThn8_N3gg33fooEv)();
+extern void ABISELECT(_ZThn32_N3gg33fooEv,_ZThn16_N3gg33fooEv)();
+extern void ABISELECT(_ZTv0_n24_N3gg33fooEv,_ZTv0_n12_N3gg33fooEv)();
+extern void ABISELECT(_ZThn56_N3gg33fooEv,_ZThn32_N3gg33fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N3gg33fooEv,_ZTv0_n12_N3gg33fooEv)();
+extern void ABISELECT(_ZThn72_N3gg33fooEv,_ZThn40_N3gg33fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg3[] = {
+  ABISELECT(72,40),
+  ABISELECT(56,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg3[0]),
+  (VTBL_ENTRY)&_ZN3gg33fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3gg3[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg33fooEv,_ZThn8_N3gg33fooEv),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI3gg3[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn32_N3gg33fooEv,_ZThn16_N3gg33fooEv),
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI3gg3[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg33fooEv,_ZTv0_n12_N3gg33fooEv),
+  ABISELECT(-72,-40),
+  ABISELECT(-72,-40),
+  (VTBL_ENTRY)&(_ZTI3gg3[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg33fooEv,_ZTv0_n12_N3gg33fooEv),
+};
+extern VTBL_ENTRY _ZTV3gg3[];
+extern void _ZN3ee33fooEv();
+static  VTBL_ENTRY _tg__ZTV3ee3__3gg3[] = {
+  ABISELECT(72,40),
+  ABISELECT(56,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee3[0]),
+  (VTBL_ENTRY)&_ZN3ee33fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv)();
+extern void ABISELECT(_ZThn56_N3ee33fooEv,_ZThn32_N3ee33fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3aa3__3ee3__3gg3[] = {
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI3ee3[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv)();
+extern void ABISELECT(_ZThn72_N3ee33fooEv,_ZThn40_N3ee33fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3bb3__3ee3__3gg3[] = {
+  ABISELECT(-72,-40),
+  ABISELECT(-72,-40),
+  (VTBL_ENTRY)&(_ZTI3ee3[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv),
+};
+static  VTT_ENTRY vtt_gg3[] = {
+  {&(_ZTV3gg3[4]),  4,19},
+  {&(_tg__ZTV3ee3__3gg3[4]),  4,5},
+  {&(_tg__ZTV3aa3__3ee3__3gg3[3]),  3,4},
+  {&(_tg__ZTV3bb3__3ee3__3gg3[3]),  3,4},
+  {&(_ZTV3gg3[14]),  14,19},
+  {&(_ZTV3gg3[18]),  18,19},
+};
+extern VTBL_ENTRY _ZTI3gg3[];
+extern  VTBL_ENTRY _ZTV3gg3[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3gg3[];
+static VTBL_ENTRY alt_thunk_names6[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee33fooEv,_ZTv0_n12_N3ee33fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn72_N3ee33fooEv,_ZThn40_N3ee33fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3ee33fooEv,_ZThn32_N3ee33fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3gg33fooEv,_ZTv0_n12_N3gg33fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn72_N3gg33fooEv,_ZThn40_N3gg33fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3gg33fooEv,_ZThn32_N3gg33fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg3 = {  "gg3", // class name
+  bases_gg3, 6,
+  &(vtc_gg3[0]), // expected_vtbl_contents
+  &(vtt_gg3[0]), // expected_vtt_contents
+  ABISELECT(88,48), // object size
+  NSPAIRA(_ZTI3gg3),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg3),19, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3gg3),6, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names6,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa4  {
+  int a;
+   aa4(); // _ZN3aa4C1Ev
+  virtual void  foo(); // _ZN3aa43fooEv
+  ~aa4(); // tgen
+};
+//SIG(-1 aa4) C1{ v1 Fi}
+
+
+ aa4 ::aa4(){ note_ctor("aa4", this);}
+void  aa4 ::foo(){vfunc_called(this, "_ZN3aa43fooEv");}
+aa4 ::~aa4(){ note_dtor("aa4", this);} // tgen
+
+static void Test_aa4()
+{
+  extern Class_Descriptor cd_aa4;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa4, buf);
+    aa4 *dp, &lv = *(dp=new (buf) aa4());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa4)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa4)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa4.a");
+    test_class_info(&lv, &cd_aa4);
+    dp->~aa4();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa4(Test_aa4, "aa4", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa4C1Ev();
+extern void _ZN3aa4D1Ev();
+Name_Map name_map_aa4[] = {
+  NSPAIR(_ZN3aa4C1Ev),
+  NSPAIR(_ZN3aa4D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa4[];
+extern void _ZN3aa43fooEv();
+static  VTBL_ENTRY vtc_aa4[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa4[0]),
+  (VTBL_ENTRY)&_ZN3aa43fooEv,
+};
+extern VTBL_ENTRY _ZTI3aa4[];
+extern  VTBL_ENTRY _ZTV3aa4[];
+Class_Descriptor cd_aa4 = {  "aa4", // class name
+  0,0,//no base classes
+  &(vtc_aa4[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa4),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa4),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  bb4  {
+  int b;
+   bb4(); // _ZN3bb4C1Ev
+  virtual void  foo(); // _ZN3bb43fooEv
+  ~bb4(); // tgen
+};
+//SIG(-1 bb4) C1{ v1 Fi}
+
+
+ bb4 ::bb4(){ note_ctor("bb4", this);}
+void  bb4 ::foo(){vfunc_called(this, "_ZN3bb43fooEv");}
+bb4 ::~bb4(){ note_dtor("bb4", this);} // tgen
+
+static void Test_bb4()
+{
+  extern Class_Descriptor cd_bb4;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb4, buf);
+    bb4 *dp, &lv = *(dp=new (buf) bb4());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb4)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb4)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb4.b");
+    test_class_info(&lv, &cd_bb4);
+    dp->~bb4();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb4(Test_bb4, "bb4", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb4C1Ev();
+extern void _ZN3bb4D1Ev();
+Name_Map name_map_bb4[] = {
+  NSPAIR(_ZN3bb4C1Ev),
+  NSPAIR(_ZN3bb4D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb4[];
+extern void _ZN3bb43fooEv();
+static  VTBL_ENTRY vtc_bb4[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb4[0]),
+  (VTBL_ENTRY)&_ZN3bb43fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb4[];
+extern  VTBL_ENTRY _ZTV3bb4[];
+Class_Descriptor cd_bb4 = {  "bb4", // class name
+  0,0,//no base classes
+  &(vtc_bb4[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb4),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb4),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  cc4  {
+  int c;
+   cc4(); // _ZN3cc4C1Ev
+  virtual void  foo(); // _ZN3cc43fooEv
+  ~cc4(); // tgen
+};
+//SIG(-1 cc4) C1{ v1 Fi}
+
+
+ cc4 ::cc4(){ note_ctor("cc4", this);}
+void  cc4 ::foo(){vfunc_called(this, "_ZN3cc43fooEv");}
+cc4 ::~cc4(){ note_dtor("cc4", this);} // tgen
+
+static void Test_cc4()
+{
+  extern Class_Descriptor cd_cc4;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc4, buf);
+    cc4 *dp, &lv = *(dp=new (buf) cc4());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc4)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc4)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc4.c");
+    test_class_info(&lv, &cd_cc4);
+    dp->~cc4();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc4(Test_cc4, "cc4", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc4C1Ev();
+extern void _ZN3cc4D1Ev();
+Name_Map name_map_cc4[] = {
+  NSPAIR(_ZN3cc4C1Ev),
+  NSPAIR(_ZN3cc4D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc4[];
+extern void _ZN3cc43fooEv();
+static  VTBL_ENTRY vtc_cc4[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc4[0]),
+  (VTBL_ENTRY)&_ZN3cc43fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc4[];
+extern  VTBL_ENTRY _ZTV3cc4[];
+Class_Descriptor cd_cc4 = {  "cc4", // class name
+  0,0,//no base classes
+  &(vtc_cc4[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc4),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc4),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  dd4  {
+  int d;
+   dd4(); // _ZN3dd4C1Ev
+  virtual void  foo(); // _ZN3dd43fooEv
+  ~dd4(); // tgen
+};
+//SIG(-1 dd4) C1{ v1 Fi}
+
+
+ dd4 ::dd4(){ note_ctor("dd4", this);}
+void  dd4 ::foo(){vfunc_called(this, "_ZN3dd43fooEv");}
+dd4 ::~dd4(){ note_dtor("dd4", this);} // tgen
+
+static void Test_dd4()
+{
+  extern Class_Descriptor cd_dd4;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd4, buf);
+    dd4 *dp, &lv = *(dp=new (buf) dd4());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd4)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd4)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd4.d");
+    test_class_info(&lv, &cd_dd4);
+    dp->~dd4();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd4(Test_dd4, "dd4", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd4C1Ev();
+extern void _ZN3dd4D1Ev();
+Name_Map name_map_dd4[] = {
+  NSPAIR(_ZN3dd4C1Ev),
+  NSPAIR(_ZN3dd4D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd4[];
+extern void _ZN3dd43fooEv();
+static  VTBL_ENTRY vtc_dd4[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd4[0]),
+  (VTBL_ENTRY)&_ZN3dd43fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd4[];
+extern  VTBL_ENTRY _ZTV3dd4[];
+Class_Descriptor cd_dd4 = {  "dd4", // class name
+  0,0,//no base classes
+  &(vtc_dd4[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd4),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd4),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  ee4  : aa4 , bb4 {
+  int e;
+   ee4(); // _ZN3ee4C1Ev
+  virtual void  foo(); // _ZN3ee43fooEv
+  ~ee4(); // tgen
+};
+//SIG(-1 ee4) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee4 ::ee4(){ note_ctor("ee4", this);}
+void  ee4 ::foo(){vfunc_called(this, "_ZN3ee43fooEv");}
+ee4 ::~ee4(){ note_dtor("ee4", this);} // tgen
+
+static void Test_ee4()
+{
+  extern Class_Descriptor cd_ee4;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee4, buf);
+    ee4 *dp, &lv = *(dp=new (buf) ee4());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee4)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee4)");
+    check_base_class_offset(lv, (aa4*), 0, "ee4");
+    check_base_class_offset(lv, (bb4*), ABISELECT(16,8), "ee4");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee4.e");
+    test_class_info(&lv, &cd_ee4);
+    dp->~ee4();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee4(Test_ee4, "ee4", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ee4C1Ev();
+extern void _ZN3ee4D1Ev();
+Name_Map name_map_ee4[] = {
+  NSPAIR(_ZN3ee4C1Ev),
+  NSPAIR(_ZN3ee4D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa4;
+extern VTBL_ENTRY _ZTI3aa4[];
+extern  VTBL_ENTRY _ZTV3aa4[];
+extern Class_Descriptor cd_bb4;
+extern VTBL_ENTRY _ZTI3bb4[];
+extern  VTBL_ENTRY _ZTV3bb4[];
+static Base_Class bases_ee4[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa4,    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},
+  {&cd_bb4,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI3ee4[];
+extern void _ZN3ee43fooEv();
+extern void ABISELECT(_ZThn16_N3ee43fooEv,_ZThn8_N3ee43fooEv)();
+static  VTBL_ENTRY vtc_ee4[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee4[0]),
+  (VTBL_ENTRY)&_ZN3ee43fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3ee4[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3ee43fooEv,_ZThn8_N3ee43fooEv),
+};
+extern VTBL_ENTRY _ZTI3ee4[];
+extern  VTBL_ENTRY _ZTV3ee4[];
+Class_Descriptor cd_ee4 = {  "ee4", // class name
+  bases_ee4, 2,
+  &(vtc_ee4[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ee4),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee4),6, //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  ff4  : virtual cc4 , dd4 {
+  int f;
+   ff4(const ABISELECT(__tsi64,int) *const *); // _ZN3ff4C2Ev
+  virtual void  foo(); // _ZN3ff43fooEv
+  ~ff4(); // tgen
+  ff4(); // tgen
+};
+//SIG(-1 ff4) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff4 ::ff4(const ABISELECT(__tsi64,int) *const *){}
+void  ff4 ::foo(){vfunc_called(this, "_ZN3ff43fooEv");}
+ff4 ::~ff4(){ note_dtor("ff4", this);} // tgen
+ff4 ::ff4(){ note_ctor("ff4", this);} // tgen
+
+static void Test_ff4()
+{
+  extern Class_Descriptor cd_ff4;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff4, buf);
+    ff4 *dp, &lv = *(dp=new (buf) ff4());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff4)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff4)");
+    check_base_class_offset(lv, (cc4*), ABISELECT(16,12), "ff4");
+    check_base_class_offset(lv, (dd4*), 0, "ff4");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff4.f");
+    test_class_info(&lv, &cd_ff4);
+    dp->~ff4();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff4(Test_ff4, "ff4", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff4C1Ev();
+extern void _ZN3ff4D1Ev();
+Name_Map name_map_ff4[] = {
+  NSPAIR(_ZN3ff4C1Ev),
+  NSPAIR(_ZN3ff4D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc4;
+extern VTBL_ENTRY _ZTI3cc4[];
+extern  VTBL_ENTRY _ZTV3cc4[];
+extern Class_Descriptor cd_dd4;
+extern VTBL_ENTRY _ZTI3dd4[];
+extern  VTBL_ENTRY _ZTV3dd4[];
+static Base_Class bases_ff4[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc4,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd4,    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 _ZTI3ff4[];
+extern void _ZN3ff43fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ff43fooEv,_ZTv0_n12_N3ff43fooEv)();
+extern void ABISELECT(_ZThn16_N3ff43fooEv,_ZThn12_N3ff43fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff4[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff4[0]),
+  (VTBL_ENTRY)&_ZN3ff43fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ff4[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff43fooEv,_ZTv0_n12_N3ff43fooEv),
+};
+extern VTBL_ENTRY _ZTV3ff4[];
+static  VTT_ENTRY vtt_ff4[] = {
+  {&(_ZTV3ff4[3]),  3,8},
+  {&(_ZTV3ff4[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ff4[];
+extern  VTBL_ENTRY _ZTV3ff4[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff4[];
+static VTBL_ENTRY alt_thunk_names7[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff43fooEv,_ZTv0_n12_N3ff43fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ff43fooEv,_ZThn12_N3ff43fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff4 = {  "ff4", // class name
+  bases_ff4, 2,
+  &(vtc_ff4[0]), // expected_vtbl_contents
+  &(vtt_ff4[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff4),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff4),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ff4),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names7,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg4  : ee4 , ff4 {
+  int g;
+   gg4(const ABISELECT(__tsi64,int) *const *); // _ZN3gg4C2Ev
+  virtual void  foo(); // _ZN3gg43fooEv
+  ~gg4(); // tgen
+  gg4(); // tgen
+};
+//SIG(1 gg4) C1{ BC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg4 ::gg4(const ABISELECT(__tsi64,int) *const *){}
+void  gg4 ::foo(){vfunc_called(this, "_ZN3gg43fooEv");}
+gg4 ::~gg4(){ note_dtor("gg4", this);} // tgen
+gg4 ::gg4(){ note_ctor("gg4", this);} // tgen
+
+static void Test_gg4()
+{
+  extern Class_Descriptor cd_gg4;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg4, buf);
+    gg4 *dp, &lv = *(dp=new (buf) gg4());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg4)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg4)");
+    check_base_class_offset(lv, (aa4*)(ee4*), 0, "gg4");
+    check_base_class_offset(lv, (bb4*)(ee4*), ABISELECT(16,8), "gg4");
+    check_base_class_offset(lv, (ee4*), 0, "gg4");
+    check_base_class_offset(lv, (cc4*)(ff4*), ABISELECT(56,36), "gg4");
+    check_base_class_offset(lv, (dd4*)(ff4*), ABISELECT(32,20), "gg4");
+    check_base_class_offset(lv, (ff4*), ABISELECT(32,20), "gg4");
+    check_field_offset(lv, g, ABISELECT(48,32), "gg4.g");
+    test_class_info(&lv, &cd_gg4);
+    dp->~gg4();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg4(Test_gg4, "gg4", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN3gg4C1Ev();
+extern void _ZN3gg4D1Ev();
+Name_Map name_map_gg4[] = {
+  NSPAIR(_ZN3gg4C1Ev),
+  NSPAIR(_ZN3gg4D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa4;
+extern VTBL_ENTRY _ZTI3aa4[];
+extern  VTBL_ENTRY _ZTV3aa4[];
+extern Class_Descriptor cd_bb4;
+extern VTBL_ENTRY _ZTI3bb4[];
+extern  VTBL_ENTRY _ZTV3bb4[];
+extern Class_Descriptor cd_ee4;
+extern VTBL_ENTRY _ZTI3ee4[];
+extern  VTBL_ENTRY _ZTV3ee4[];
+extern Class_Descriptor cd_cc4;
+extern VTBL_ENTRY _ZTI3cc4[];
+extern  VTBL_ENTRY _ZTV3cc4[];
+extern Class_Descriptor cd_dd4;
+extern VTBL_ENTRY _ZTI3dd4[];
+extern  VTBL_ENTRY _ZTV3dd4[];
+extern Class_Descriptor cd_ff4;
+extern VTBL_ENTRY _ZTI3ff4[];
+extern  VTBL_ENTRY _ZTV3ff4[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff4[];
+static Base_Class bases_gg4[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa4,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb4,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_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
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee4,    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
+    4, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc4,    ABISELECT(56,36), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd4,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff4,    ABISELECT(32,20), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg4[];
+extern void _ZN3gg43fooEv();
+extern void ABISELECT(_ZThn16_N3gg43fooEv,_ZThn8_N3gg43fooEv)();
+extern void ABISELECT(_ZThn32_N3gg43fooEv,_ZThn20_N3gg43fooEv)();
+extern void ABISELECT(_ZTv0_n24_N3gg43fooEv,_ZTv0_n12_N3gg43fooEv)();
+extern void ABISELECT(_ZThn56_N3gg43fooEv,_ZThn36_N3gg43fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg4[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg4[0]),
+  (VTBL_ENTRY)&_ZN3gg43fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3gg4[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg43fooEv,_ZThn8_N3gg43fooEv),
+  ABISELECT(24,16),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI3gg4[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn32_N3gg43fooEv,_ZThn20_N3gg43fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI3gg4[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg43fooEv,_ZTv0_n12_N3gg43fooEv),
+};
+extern VTBL_ENTRY _ZTV3gg4[];
+extern void _ZN3ff43fooEv();
+static  VTBL_ENTRY _tg__ZTV3ff4__3gg4[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff4[0]),
+  (VTBL_ENTRY)&_ZN3ff43fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ff43fooEv,_ZTv0_n12_N3ff43fooEv)();
+extern void ABISELECT(_ZThn24_N3ff43fooEv,_ZThn16_N3ff43fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3cc4__3ff4__3gg4[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI3ff4[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff43fooEv,_ZTv0_n12_N3ff43fooEv),
+};
+static  VTT_ENTRY vtt_gg4[] = {
+  {&(_ZTV3gg4[3]),  3,15},
+  {&(_tg__ZTV3ff4__3gg4[3]),  3,4},
+  {&(_tg__ZTV3cc4__3ff4__3gg4[3]),  3,4},
+  {&(_ZTV3gg4[10]),  10,15},
+  {&(_ZTV3gg4[14]),  14,15},
+};
+extern VTBL_ENTRY _ZTI3gg4[];
+extern  VTBL_ENTRY _ZTV3gg4[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3gg4[];
+static VTBL_ENTRY alt_thunk_names8[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff43fooEv,_ZTv0_n12_N3ff43fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N3ff43fooEv,_ZThn16_N3ff43fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3gg43fooEv,_ZTv0_n12_N3gg43fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3gg43fooEv,_ZThn36_N3gg43fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg4 = {  "gg4", // class name
+  bases_gg4, 6,
+  &(vtc_gg4[0]), // expected_vtbl_contents
+  &(vtt_gg4[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI3gg4),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg4),15, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3gg4),5, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names8,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa5  {
+  int a;
+   aa5(); // _ZN3aa5C1Ev
+  virtual void  foo(); // _ZN3aa53fooEv
+  ~aa5(); // tgen
+};
+//SIG(-1 aa5) C1{ v1 Fi}
+
+
+ aa5 ::aa5(){ note_ctor("aa5", this);}
+void  aa5 ::foo(){vfunc_called(this, "_ZN3aa53fooEv");}
+aa5 ::~aa5(){ note_dtor("aa5", this);} // tgen
+
+static void Test_aa5()
+{
+  extern Class_Descriptor cd_aa5;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa5, buf);
+    aa5 *dp, &lv = *(dp=new (buf) aa5());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa5)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa5)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa5.a");
+    test_class_info(&lv, &cd_aa5);
+    dp->~aa5();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa5(Test_aa5, "aa5", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa5C1Ev();
+extern void _ZN3aa5D1Ev();
+Name_Map name_map_aa5[] = {
+  NSPAIR(_ZN3aa5C1Ev),
+  NSPAIR(_ZN3aa5D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa5[];
+extern void _ZN3aa53fooEv();
+static  VTBL_ENTRY vtc_aa5[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa5[0]),
+  (VTBL_ENTRY)&_ZN3aa53fooEv,
+};
+extern VTBL_ENTRY _ZTI3aa5[];
+extern  VTBL_ENTRY _ZTV3aa5[];
+Class_Descriptor cd_aa5 = {  "aa5", // class name
+  0,0,//no base classes
+  &(vtc_aa5[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa5),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa5),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  bb5  {
+  int b;
+   bb5(); // _ZN3bb5C1Ev
+  virtual void  foo(); // _ZN3bb53fooEv
+  ~bb5(); // tgen
+};
+//SIG(-1 bb5) C1{ v1 Fi}
+
+
+ bb5 ::bb5(){ note_ctor("bb5", this);}
+void  bb5 ::foo(){vfunc_called(this, "_ZN3bb53fooEv");}
+bb5 ::~bb5(){ note_dtor("bb5", this);} // tgen
+
+static void Test_bb5()
+{
+  extern Class_Descriptor cd_bb5;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb5, buf);
+    bb5 *dp, &lv = *(dp=new (buf) bb5());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb5)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb5)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb5.b");
+    test_class_info(&lv, &cd_bb5);
+    dp->~bb5();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb5(Test_bb5, "bb5", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb5C1Ev();
+extern void _ZN3bb5D1Ev();
+Name_Map name_map_bb5[] = {
+  NSPAIR(_ZN3bb5C1Ev),
+  NSPAIR(_ZN3bb5D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb5[];
+extern void _ZN3bb53fooEv();
+static  VTBL_ENTRY vtc_bb5[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb5[0]),
+  (VTBL_ENTRY)&_ZN3bb53fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb5[];
+extern  VTBL_ENTRY _ZTV3bb5[];
+Class_Descriptor cd_bb5 = {  "bb5", // class name
+  0,0,//no base classes
+  &(vtc_bb5[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb5),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb5),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  cc5  {
+  int c;
+   cc5(); // _ZN3cc5C1Ev
+  virtual void  foo(); // _ZN3cc53fooEv
+  ~cc5(); // tgen
+};
+//SIG(-1 cc5) C1{ v1 Fi}
+
+
+ cc5 ::cc5(){ note_ctor("cc5", this);}
+void  cc5 ::foo(){vfunc_called(this, "_ZN3cc53fooEv");}
+cc5 ::~cc5(){ note_dtor("cc5", this);} // tgen
+
+static void Test_cc5()
+{
+  extern Class_Descriptor cd_cc5;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc5, buf);
+    cc5 *dp, &lv = *(dp=new (buf) cc5());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc5)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc5)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc5.c");
+    test_class_info(&lv, &cd_cc5);
+    dp->~cc5();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc5(Test_cc5, "cc5", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc5C1Ev();
+extern void _ZN3cc5D1Ev();
+Name_Map name_map_cc5[] = {
+  NSPAIR(_ZN3cc5C1Ev),
+  NSPAIR(_ZN3cc5D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc5[];
+extern void _ZN3cc53fooEv();
+static  VTBL_ENTRY vtc_cc5[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc5[0]),
+  (VTBL_ENTRY)&_ZN3cc53fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc5[];
+extern  VTBL_ENTRY _ZTV3cc5[];
+Class_Descriptor cd_cc5 = {  "cc5", // class name
+  0,0,//no base classes
+  &(vtc_cc5[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc5),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc5),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  dd5  {
+  int d;
+   dd5(); // _ZN3dd5C1Ev
+  virtual void  foo(); // _ZN3dd53fooEv
+  ~dd5(); // tgen
+};
+//SIG(-1 dd5) C1{ v1 Fi}
+
+
+ dd5 ::dd5(){ note_ctor("dd5", this);}
+void  dd5 ::foo(){vfunc_called(this, "_ZN3dd53fooEv");}
+dd5 ::~dd5(){ note_dtor("dd5", this);} // tgen
+
+static void Test_dd5()
+{
+  extern Class_Descriptor cd_dd5;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd5, buf);
+    dd5 *dp, &lv = *(dp=new (buf) dd5());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd5)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd5)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd5.d");
+    test_class_info(&lv, &cd_dd5);
+    dp->~dd5();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd5(Test_dd5, "dd5", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd5C1Ev();
+extern void _ZN3dd5D1Ev();
+Name_Map name_map_dd5[] = {
+  NSPAIR(_ZN3dd5C1Ev),
+  NSPAIR(_ZN3dd5D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd5[];
+extern void _ZN3dd53fooEv();
+static  VTBL_ENTRY vtc_dd5[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd5[0]),
+  (VTBL_ENTRY)&_ZN3dd53fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd5[];
+extern  VTBL_ENTRY _ZTV3dd5[];
+Class_Descriptor cd_dd5 = {  "dd5", // class name
+  0,0,//no base classes
+  &(vtc_dd5[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd5),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd5),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  ee5  : virtual aa5 , bb5 {
+  int e;
+   ee5(const ABISELECT(__tsi64,int) *const *); // _ZN3ee5C2Ev
+  virtual void  foo(); // _ZN3ee53fooEv
+  ~ee5(); // tgen
+  ee5(); // tgen
+};
+//SIG(-1 ee5) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee5 ::ee5(const ABISELECT(__tsi64,int) *const *){}
+void  ee5 ::foo(){vfunc_called(this, "_ZN3ee53fooEv");}
+ee5 ::~ee5(){ note_dtor("ee5", this);} // tgen
+ee5 ::ee5(){ note_ctor("ee5", this);} // tgen
+
+static void Test_ee5()
+{
+  extern Class_Descriptor cd_ee5;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee5, buf);
+    ee5 *dp, &lv = *(dp=new (buf) ee5());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee5)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee5)");
+    check_base_class_offset(lv, (aa5*), ABISELECT(16,12), "ee5");
+    check_base_class_offset(lv, (bb5*), 0, "ee5");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee5.e");
+    test_class_info(&lv, &cd_ee5);
+    dp->~ee5();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee5(Test_ee5, "ee5", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ee5C1Ev();
+extern void _ZN3ee5D1Ev();
+Name_Map name_map_ee5[] = {
+  NSPAIR(_ZN3ee5C1Ev),
+  NSPAIR(_ZN3ee5D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa5;
+extern VTBL_ENTRY _ZTI3aa5[];
+extern  VTBL_ENTRY _ZTV3aa5[];
+extern Class_Descriptor cd_bb5;
+extern VTBL_ENTRY _ZTI3bb5[];
+extern  VTBL_ENTRY _ZTV3bb5[];
+static Base_Class bases_ee5[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa5,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb5,    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 _ZTI3ee5[];
+extern void _ZN3ee53fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ee53fooEv,_ZTv0_n12_N3ee53fooEv)();
+extern void ABISELECT(_ZThn16_N3ee53fooEv,_ZThn12_N3ee53fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee5[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee5[0]),
+  (VTBL_ENTRY)&_ZN3ee53fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ee5[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee53fooEv,_ZTv0_n12_N3ee53fooEv),
+};
+extern VTBL_ENTRY _ZTV3ee5[];
+static  VTT_ENTRY vtt_ee5[] = {
+  {&(_ZTV3ee5[3]),  3,8},
+  {&(_ZTV3ee5[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ee5[];
+extern  VTBL_ENTRY _ZTV3ee5[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee5[];
+static VTBL_ENTRY alt_thunk_names9[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee53fooEv,_ZTv0_n12_N3ee53fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ee53fooEv,_ZThn12_N3ee53fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee5 = {  "ee5", // class name
+  bases_ee5, 2,
+  &(vtc_ee5[0]), // expected_vtbl_contents
+  &(vtt_ee5[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ee5),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee5),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ee5),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  ff5  : virtual cc5 , dd5 {
+  int f;
+   ff5(const ABISELECT(__tsi64,int) *const *); // _ZN3ff5C2Ev
+  virtual void  foo(); // _ZN3ff53fooEv
+  ~ff5(); // tgen
+  ff5(); // tgen
+};
+//SIG(-1 ff5) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff5 ::ff5(const ABISELECT(__tsi64,int) *const *){}
+void  ff5 ::foo(){vfunc_called(this, "_ZN3ff53fooEv");}
+ff5 ::~ff5(){ note_dtor("ff5", this);} // tgen
+ff5 ::ff5(){ note_ctor("ff5", this);} // tgen
+
+static void Test_ff5()
+{
+  extern Class_Descriptor cd_ff5;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff5, buf);
+    ff5 *dp, &lv = *(dp=new (buf) ff5());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff5)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff5)");
+    check_base_class_offset(lv, (cc5*), ABISELECT(16,12), "ff5");
+    check_base_class_offset(lv, (dd5*), 0, "ff5");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff5.f");
+    test_class_info(&lv, &cd_ff5);
+    dp->~ff5();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff5(Test_ff5, "ff5", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff5C1Ev();
+extern void _ZN3ff5D1Ev();
+Name_Map name_map_ff5[] = {
+  NSPAIR(_ZN3ff5C1Ev),
+  NSPAIR(_ZN3ff5D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc5;
+extern VTBL_ENTRY _ZTI3cc5[];
+extern  VTBL_ENTRY _ZTV3cc5[];
+extern Class_Descriptor cd_dd5;
+extern VTBL_ENTRY _ZTI3dd5[];
+extern  VTBL_ENTRY _ZTV3dd5[];
+static Base_Class bases_ff5[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc5,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd5,    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 _ZTI3ff5[];
+extern void _ZN3ff53fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ff53fooEv,_ZTv0_n12_N3ff53fooEv)();
+extern void ABISELECT(_ZThn16_N3ff53fooEv,_ZThn12_N3ff53fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff5[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff5[0]),
+  (VTBL_ENTRY)&_ZN3ff53fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ff5[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff53fooEv,_ZTv0_n12_N3ff53fooEv),
+};
+extern VTBL_ENTRY _ZTV3ff5[];
+static  VTT_ENTRY vtt_ff5[] = {
+  {&(_ZTV3ff5[3]),  3,8},
+  {&(_ZTV3ff5[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ff5[];
+extern  VTBL_ENTRY _ZTV3ff5[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff5[];
+static VTBL_ENTRY alt_thunk_names10[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff53fooEv,_ZTv0_n12_N3ff53fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ff53fooEv,_ZThn12_N3ff53fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff5 = {  "ff5", // class name
+  bases_ff5, 2,
+  &(vtc_ff5[0]), // expected_vtbl_contents
+  &(vtt_ff5[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff5),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff5),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ff5),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names10,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg5  : ee5 , ff5 {
+  int g;
+   gg5(const ABISELECT(__tsi64,int) *const *); // _ZN3gg5C2Ev
+  virtual void  foo(); // _ZN3gg53fooEv
+  ~gg5(); // tgen
+  gg5(); // tgen
+};
+//SIG(1 gg5) C1{ BC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg5 ::gg5(const ABISELECT(__tsi64,int) *const *){}
+void  gg5 ::foo(){vfunc_called(this, "_ZN3gg53fooEv");}
+gg5 ::~gg5(){ note_dtor("gg5", this);} // tgen
+gg5 ::gg5(){ note_ctor("gg5", this);} // tgen
+
+static void Test_gg5()
+{
+  extern Class_Descriptor cd_gg5;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg5, buf);
+    gg5 *dp, &lv = *(dp=new (buf) gg5());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg5)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg5)");
+    check_base_class_offset(lv, (aa5*)(ee5*), ABISELECT(40,28), "gg5");
+    check_base_class_offset(lv, (bb5*)(ee5*), 0, "gg5");
+    check_base_class_offset(lv, (ee5*), 0, "gg5");
+    check_base_class_offset(lv, (cc5*)(ff5*), ABISELECT(56,36), "gg5");
+    check_base_class_offset(lv, (dd5*)(ff5*), ABISELECT(16,12), "gg5");
+    check_base_class_offset(lv, (ff5*), ABISELECT(16,12), "gg5");
+    check_field_offset(lv, g, ABISELECT(32,24), "gg5.g");
+    test_class_info(&lv, &cd_gg5);
+    dp->~gg5();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg5(Test_gg5, "gg5", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN3gg5C1Ev();
+extern void _ZN3gg5D1Ev();
+Name_Map name_map_gg5[] = {
+  NSPAIR(_ZN3gg5C1Ev),
+  NSPAIR(_ZN3gg5D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa5;
+extern VTBL_ENTRY _ZTI3aa5[];
+extern  VTBL_ENTRY _ZTV3aa5[];
+extern Class_Descriptor cd_bb5;
+extern VTBL_ENTRY _ZTI3bb5[];
+extern  VTBL_ENTRY _ZTV3bb5[];
+extern Class_Descriptor cd_ee5;
+extern VTBL_ENTRY _ZTI3ee5[];
+extern  VTBL_ENTRY _ZTV3ee5[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee5[];
+extern Class_Descriptor cd_cc5;
+extern VTBL_ENTRY _ZTI3cc5[];
+extern  VTBL_ENTRY _ZTV3cc5[];
+extern Class_Descriptor cd_dd5;
+extern VTBL_ENTRY _ZTI3dd5[];
+extern  VTBL_ENTRY _ZTV3dd5[];
+extern Class_Descriptor cd_ff5;
+extern VTBL_ENTRY _ZTI3ff5[];
+extern  VTBL_ENTRY _ZTV3ff5[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff5[];
+static Base_Class bases_gg5[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa5,    ABISELECT(40,28), //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_bb5,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee5,    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
+    4, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc5,    ABISELECT(56,36), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd5,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff5,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg5[];
+extern void _ZN3gg53fooEv();
+extern void ABISELECT(_ZThn16_N3gg53fooEv,_ZThn12_N3gg53fooEv)();
+extern void ABISELECT(_ZTv0_n24_N3gg53fooEv,_ZTv0_n12_N3gg53fooEv)();
+extern void ABISELECT(_ZThn40_N3gg53fooEv,_ZThn28_N3gg53fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N3gg53fooEv,_ZTv0_n12_N3gg53fooEv)();
+extern void ABISELECT(_ZThn56_N3gg53fooEv,_ZThn36_N3gg53fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg5[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,28),
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg5[0]),
+  (VTBL_ENTRY)&_ZN3gg53fooEv,
+  ABISELECT(40,24),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3gg5[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg53fooEv,_ZThn12_N3gg53fooEv),
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI3gg5[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg53fooEv,_ZTv0_n12_N3gg53fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI3gg5[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg53fooEv,_ZTv0_n12_N3gg53fooEv),
+};
+extern VTBL_ENTRY _ZTV3gg5[];
+extern void _ZN3ee53fooEv();
+static  VTBL_ENTRY _tg__ZTV3ee5__3gg5[] = {
+  ABISELECT(40,28),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee5[0]),
+  (VTBL_ENTRY)&_ZN3ee53fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ee53fooEv,_ZTv0_n12_N3ee53fooEv)();
+extern void ABISELECT(_ZThn40_N3ee53fooEv,_ZThn28_N3ee53fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3aa5__3ee5__3gg5[] = {
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI3ee5[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee53fooEv,_ZTv0_n12_N3ee53fooEv),
+};
+extern void _ZN3ff53fooEv();
+static  VTBL_ENTRY _tg__ZTV3ff5__3gg5[] = {
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff5[0]),
+  (VTBL_ENTRY)&_ZN3ff53fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ff53fooEv,_ZTv0_n12_N3ff53fooEv)();
+extern void ABISELECT(_ZThn40_N3ff53fooEv,_ZThn24_N3ff53fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3cc5__3ff5__3gg5[] = {
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI3ff5[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff53fooEv,_ZTv0_n12_N3ff53fooEv),
+};
+static  VTT_ENTRY vtt_gg5[] = {
+  {&(_ZTV3gg5[4]),  4,17},
+  {&(_tg__ZTV3ee5__3gg5[3]),  3,4},
+  {&(_tg__ZTV3aa5__3ee5__3gg5[3]),  3,4},
+  {&(_tg__ZTV3ff5__3gg5[3]),  3,4},
+  {&(_tg__ZTV3cc5__3ff5__3gg5[3]),  3,4},
+  {&(_ZTV3gg5[12]),  12,17},
+  {&(_ZTV3gg5[8]),  8,17},
+  {&(_ZTV3gg5[16]),  16,17},
+};
+extern VTBL_ENTRY _ZTI3gg5[];
+extern  VTBL_ENTRY _ZTV3gg5[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3gg5[];
+static VTBL_ENTRY alt_thunk_names11[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff53fooEv,_ZTv0_n12_N3ff53fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3ff53fooEv,_ZThn24_N3ff53fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee53fooEv,_ZTv0_n12_N3ee53fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3ee53fooEv,_ZThn28_N3ee53fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3gg53fooEv,_ZTv0_n12_N3gg53fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3gg53fooEv,_ZThn36_N3gg53fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3gg53fooEv,_ZThn28_N3gg53fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg5 = {  "gg5", // class name
+  bases_gg5, 6,
+  &(vtc_gg5[0]), // expected_vtbl_contents
+  &(vtt_gg5[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI3gg5),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg5),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3gg5),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names11,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa6  {
+  int a;
+   aa6(); // _ZN3aa6C1Ev
+  virtual void  foo(); // _ZN3aa63fooEv
+  ~aa6(); // tgen
+};
+//SIG(-1 aa6) C1{ v1 Fi}
+
+
+ aa6 ::aa6(){ note_ctor("aa6", this);}
+void  aa6 ::foo(){vfunc_called(this, "_ZN3aa63fooEv");}
+aa6 ::~aa6(){ note_dtor("aa6", this);} // tgen
+
+static void Test_aa6()
+{
+  extern Class_Descriptor cd_aa6;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa6, buf);
+    aa6 *dp, &lv = *(dp=new (buf) aa6());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa6)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa6)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa6.a");
+    test_class_info(&lv, &cd_aa6);
+    dp->~aa6();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa6(Test_aa6, "aa6", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa6C1Ev();
+extern void _ZN3aa6D1Ev();
+Name_Map name_map_aa6[] = {
+  NSPAIR(_ZN3aa6C1Ev),
+  NSPAIR(_ZN3aa6D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa6[];
+extern void _ZN3aa63fooEv();
+static  VTBL_ENTRY vtc_aa6[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa6[0]),
+  (VTBL_ENTRY)&_ZN3aa63fooEv,
+};
+extern VTBL_ENTRY _ZTI3aa6[];
+extern  VTBL_ENTRY _ZTV3aa6[];
+Class_Descriptor cd_aa6 = {  "aa6", // class name
+  0,0,//no base classes
+  &(vtc_aa6[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa6),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa6),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  bb6  {
+  int b;
+   bb6(); // _ZN3bb6C1Ev
+  virtual void  foo(); // _ZN3bb63fooEv
+  ~bb6(); // tgen
+};
+//SIG(-1 bb6) C1{ v1 Fi}
+
+
+ bb6 ::bb6(){ note_ctor("bb6", this);}
+void  bb6 ::foo(){vfunc_called(this, "_ZN3bb63fooEv");}
+bb6 ::~bb6(){ note_dtor("bb6", this);} // tgen
+
+static void Test_bb6()
+{
+  extern Class_Descriptor cd_bb6;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb6, buf);
+    bb6 *dp, &lv = *(dp=new (buf) bb6());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb6)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb6)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb6.b");
+    test_class_info(&lv, &cd_bb6);
+    dp->~bb6();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb6(Test_bb6, "bb6", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb6C1Ev();
+extern void _ZN3bb6D1Ev();
+Name_Map name_map_bb6[] = {
+  NSPAIR(_ZN3bb6C1Ev),
+  NSPAIR(_ZN3bb6D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb6[];
+extern void _ZN3bb63fooEv();
+static  VTBL_ENTRY vtc_bb6[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb6[0]),
+  (VTBL_ENTRY)&_ZN3bb63fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb6[];
+extern  VTBL_ENTRY _ZTV3bb6[];
+Class_Descriptor cd_bb6 = {  "bb6", // class name
+  0,0,//no base classes
+  &(vtc_bb6[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb6),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb6),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  cc6  {
+  int c;
+   cc6(); // _ZN3cc6C1Ev
+  virtual void  foo(); // _ZN3cc63fooEv
+  ~cc6(); // tgen
+};
+//SIG(-1 cc6) C1{ v1 Fi}
+
+
+ cc6 ::cc6(){ note_ctor("cc6", this);}
+void  cc6 ::foo(){vfunc_called(this, "_ZN3cc63fooEv");}
+cc6 ::~cc6(){ note_dtor("cc6", this);} // tgen
+
+static void Test_cc6()
+{
+  extern Class_Descriptor cd_cc6;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc6, buf);
+    cc6 *dp, &lv = *(dp=new (buf) cc6());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc6)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc6)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc6.c");
+    test_class_info(&lv, &cd_cc6);
+    dp->~cc6();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc6(Test_cc6, "cc6", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc6C1Ev();
+extern void _ZN3cc6D1Ev();
+Name_Map name_map_cc6[] = {
+  NSPAIR(_ZN3cc6C1Ev),
+  NSPAIR(_ZN3cc6D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc6[];
+extern void _ZN3cc63fooEv();
+static  VTBL_ENTRY vtc_cc6[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc6[0]),
+  (VTBL_ENTRY)&_ZN3cc63fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc6[];
+extern  VTBL_ENTRY _ZTV3cc6[];
+Class_Descriptor cd_cc6 = {  "cc6", // class name
+  0,0,//no base classes
+  &(vtc_cc6[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc6),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc6),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  dd6  {
+  int d;
+   dd6(); // _ZN3dd6C1Ev
+  virtual void  foo(); // _ZN3dd63fooEv
+  ~dd6(); // tgen
+};
+//SIG(-1 dd6) C1{ v1 Fi}
+
+
+ dd6 ::dd6(){ note_ctor("dd6", this);}
+void  dd6 ::foo(){vfunc_called(this, "_ZN3dd63fooEv");}
+dd6 ::~dd6(){ note_dtor("dd6", this);} // tgen
+
+static void Test_dd6()
+{
+  extern Class_Descriptor cd_dd6;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd6, buf);
+    dd6 *dp, &lv = *(dp=new (buf) dd6());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd6)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd6)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd6.d");
+    test_class_info(&lv, &cd_dd6);
+    dp->~dd6();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd6(Test_dd6, "dd6", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd6C1Ev();
+extern void _ZN3dd6D1Ev();
+Name_Map name_map_dd6[] = {
+  NSPAIR(_ZN3dd6C1Ev),
+  NSPAIR(_ZN3dd6D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd6[];
+extern void _ZN3dd63fooEv();
+static  VTBL_ENTRY vtc_dd6[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd6[0]),
+  (VTBL_ENTRY)&_ZN3dd63fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd6[];
+extern  VTBL_ENTRY _ZTV3dd6[];
+Class_Descriptor cd_dd6 = {  "dd6", // class name
+  0,0,//no base classes
+  &(vtc_dd6[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd6),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd6),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  ee6  : aa6 , virtual bb6 {
+  int e;
+   ee6(const ABISELECT(__tsi64,int) *const *); // _ZN3ee6C2Ev
+  virtual void  foo(); // _ZN3ee63fooEv
+  ~ee6(); // tgen
+  ee6(); // tgen
+};
+//SIG(-1 ee6) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee6 ::ee6(const ABISELECT(__tsi64,int) *const *){}
+void  ee6 ::foo(){vfunc_called(this, "_ZN3ee63fooEv");}
+ee6 ::~ee6(){ note_dtor("ee6", this);} // tgen
+ee6 ::ee6(){ note_ctor("ee6", this);} // tgen
+
+static void Test_ee6()
+{
+  extern Class_Descriptor cd_ee6;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee6, buf);
+    ee6 *dp, &lv = *(dp=new (buf) ee6());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee6)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee6)");
+    check_base_class_offset(lv, (aa6*), 0, "ee6");
+    check_base_class_offset(lv, (bb6*), ABISELECT(16,12), "ee6");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee6.e");
+    test_class_info(&lv, &cd_ee6);
+    dp->~ee6();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee6(Test_ee6, "ee6", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ee6C1Ev();
+extern void _ZN3ee6D1Ev();
+Name_Map name_map_ee6[] = {
+  NSPAIR(_ZN3ee6C1Ev),
+  NSPAIR(_ZN3ee6D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa6;
+extern VTBL_ENTRY _ZTI3aa6[];
+extern  VTBL_ENTRY _ZTV3aa6[];
+extern Class_Descriptor cd_bb6;
+extern VTBL_ENTRY _ZTI3bb6[];
+extern  VTBL_ENTRY _ZTV3bb6[];
+static Base_Class bases_ee6[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa6,    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},
+  {&cd_bb6,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3ee6[];
+extern void _ZN3ee63fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ee63fooEv,_ZTv0_n12_N3ee63fooEv)();
+extern void ABISELECT(_ZThn16_N3ee63fooEv,_ZThn12_N3ee63fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee6[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee6[0]),
+  (VTBL_ENTRY)&_ZN3ee63fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ee6[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee63fooEv,_ZTv0_n12_N3ee63fooEv),
+};
+extern VTBL_ENTRY _ZTV3ee6[];
+static  VTT_ENTRY vtt_ee6[] = {
+  {&(_ZTV3ee6[3]),  3,8},
+  {&(_ZTV3ee6[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ee6[];
+extern  VTBL_ENTRY _ZTV3ee6[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee6[];
+static VTBL_ENTRY alt_thunk_names12[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee63fooEv,_ZTv0_n12_N3ee63fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ee63fooEv,_ZThn12_N3ee63fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee6 = {  "ee6", // class name
+  bases_ee6, 2,
+  &(vtc_ee6[0]), // expected_vtbl_contents
+  &(vtt_ee6[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ee6),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee6),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ee6),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names12,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff6  : virtual cc6 , dd6 {
+  int f;
+   ff6(const ABISELECT(__tsi64,int) *const *); // _ZN3ff6C2Ev
+  virtual void  foo(); // _ZN3ff63fooEv
+  ~ff6(); // tgen
+  ff6(); // tgen
+};
+//SIG(-1 ff6) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff6 ::ff6(const ABISELECT(__tsi64,int) *const *){}
+void  ff6 ::foo(){vfunc_called(this, "_ZN3ff63fooEv");}
+ff6 ::~ff6(){ note_dtor("ff6", this);} // tgen
+ff6 ::ff6(){ note_ctor("ff6", this);} // tgen
+
+static void Test_ff6()
+{
+  extern Class_Descriptor cd_ff6;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff6, buf);
+    ff6 *dp, &lv = *(dp=new (buf) ff6());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff6)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff6)");
+    check_base_class_offset(lv, (cc6*), ABISELECT(16,12), "ff6");
+    check_base_class_offset(lv, (dd6*), 0, "ff6");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff6.f");
+    test_class_info(&lv, &cd_ff6);
+    dp->~ff6();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff6(Test_ff6, "ff6", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff6C1Ev();
+extern void _ZN3ff6D1Ev();
+Name_Map name_map_ff6[] = {
+  NSPAIR(_ZN3ff6C1Ev),
+  NSPAIR(_ZN3ff6D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc6;
+extern VTBL_ENTRY _ZTI3cc6[];
+extern  VTBL_ENTRY _ZTV3cc6[];
+extern Class_Descriptor cd_dd6;
+extern VTBL_ENTRY _ZTI3dd6[];
+extern  VTBL_ENTRY _ZTV3dd6[];
+static Base_Class bases_ff6[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc6,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd6,    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 _ZTI3ff6[];
+extern void _ZN3ff63fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ff63fooEv,_ZTv0_n12_N3ff63fooEv)();
+extern void ABISELECT(_ZThn16_N3ff63fooEv,_ZThn12_N3ff63fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff6[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff6[0]),
+  (VTBL_ENTRY)&_ZN3ff63fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ff6[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff63fooEv,_ZTv0_n12_N3ff63fooEv),
+};
+extern VTBL_ENTRY _ZTV3ff6[];
+static  VTT_ENTRY vtt_ff6[] = {
+  {&(_ZTV3ff6[3]),  3,8},
+  {&(_ZTV3ff6[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ff6[];
+extern  VTBL_ENTRY _ZTV3ff6[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff6[];
+static VTBL_ENTRY alt_thunk_names13[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff63fooEv,_ZTv0_n12_N3ff63fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ff63fooEv,_ZThn12_N3ff63fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff6 = {  "ff6", // class name
+  bases_ff6, 2,
+  &(vtc_ff6[0]), // expected_vtbl_contents
+  &(vtt_ff6[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff6),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff6),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ff6),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names13,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg6  : ee6 , ff6 {
+  int g;
+   gg6(const ABISELECT(__tsi64,int) *const *); // _ZN3gg6C2Ev
+  virtual void  foo(); // _ZN3gg63fooEv
+  ~gg6(); // tgen
+  gg6(); // tgen
+};
+//SIG(1 gg6) C1{ BC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg6 ::gg6(const ABISELECT(__tsi64,int) *const *){}
+void  gg6 ::foo(){vfunc_called(this, "_ZN3gg63fooEv");}
+gg6 ::~gg6(){ note_dtor("gg6", this);} // tgen
+gg6 ::gg6(){ note_ctor("gg6", this);} // tgen
+
+static void Test_gg6()
+{
+  extern Class_Descriptor cd_gg6;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg6, buf);
+    gg6 *dp, &lv = *(dp=new (buf) gg6());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg6)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg6)");
+    check_base_class_offset(lv, (aa6*)(ee6*), 0, "gg6");
+    check_base_class_offset(lv, (bb6*)(ee6*), ABISELECT(40,28), "gg6");
+    check_base_class_offset(lv, (ee6*), 0, "gg6");
+    check_base_class_offset(lv, (cc6*)(ff6*), ABISELECT(56,36), "gg6");
+    check_base_class_offset(lv, (dd6*)(ff6*), ABISELECT(16,12), "gg6");
+    check_base_class_offset(lv, (ff6*), ABISELECT(16,12), "gg6");
+    check_field_offset(lv, g, ABISELECT(32,24), "gg6.g");
+    test_class_info(&lv, &cd_gg6);
+    dp->~gg6();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg6(Test_gg6, "gg6", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN3gg6C1Ev();
+extern void _ZN3gg6D1Ev();
+Name_Map name_map_gg6[] = {
+  NSPAIR(_ZN3gg6C1Ev),
+  NSPAIR(_ZN3gg6D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa6;
+extern VTBL_ENTRY _ZTI3aa6[];
+extern  VTBL_ENTRY _ZTV3aa6[];
+extern Class_Descriptor cd_bb6;
+extern VTBL_ENTRY _ZTI3bb6[];
+extern  VTBL_ENTRY _ZTV3bb6[];
+extern Class_Descriptor cd_ee6;
+extern VTBL_ENTRY _ZTI3ee6[];
+extern  VTBL_ENTRY _ZTV3ee6[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee6[];
+extern Class_Descriptor cd_cc6;
+extern VTBL_ENTRY _ZTI3cc6[];
+extern  VTBL_ENTRY _ZTV3cc6[];
+extern Class_Descriptor cd_dd6;
+extern VTBL_ENTRY _ZTI3dd6[];
+extern  VTBL_ENTRY _ZTV3dd6[];
+extern Class_Descriptor cd_ff6;
+extern VTBL_ENTRY _ZTI3ff6[];
+extern  VTBL_ENTRY _ZTV3ff6[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff6[];
+static Base_Class bases_gg6[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa6,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb6,    ABISELECT(40,28), //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_ee6,    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
+    4, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc6,    ABISELECT(56,36), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd6,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff6,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg6[];
+extern void _ZN3gg63fooEv();
+extern void ABISELECT(_ZThn16_N3gg63fooEv,_ZThn12_N3gg63fooEv)();
+extern void ABISELECT(_ZTv0_n24_N3gg63fooEv,_ZTv0_n12_N3gg63fooEv)();
+extern void ABISELECT(_ZThn40_N3gg63fooEv,_ZThn28_N3gg63fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N3gg63fooEv,_ZTv0_n12_N3gg63fooEv)();
+extern void ABISELECT(_ZThn56_N3gg63fooEv,_ZThn36_N3gg63fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg6[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,28),
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg6[0]),
+  (VTBL_ENTRY)&_ZN3gg63fooEv,
+  ABISELECT(40,24),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3gg6[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg63fooEv,_ZThn12_N3gg63fooEv),
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI3gg6[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg63fooEv,_ZTv0_n12_N3gg63fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI3gg6[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg63fooEv,_ZTv0_n12_N3gg63fooEv),
+};
+extern VTBL_ENTRY _ZTV3gg6[];
+extern void _ZN3ee63fooEv();
+static  VTBL_ENTRY _tg__ZTV3ee6__3gg6[] = {
+  ABISELECT(40,28),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee6[0]),
+  (VTBL_ENTRY)&_ZN3ee63fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ee63fooEv,_ZTv0_n12_N3ee63fooEv)();
+extern void ABISELECT(_ZThn40_N3ee63fooEv,_ZThn28_N3ee63fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3bb6__3ee6__3gg6[] = {
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI3ee6[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee63fooEv,_ZTv0_n12_N3ee63fooEv),
+};
+extern void _ZN3ff63fooEv();
+static  VTBL_ENTRY _tg__ZTV3ff6__3gg6[] = {
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff6[0]),
+  (VTBL_ENTRY)&_ZN3ff63fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ff63fooEv,_ZTv0_n12_N3ff63fooEv)();
+extern void ABISELECT(_ZThn40_N3ff63fooEv,_ZThn24_N3ff63fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3cc6__3ff6__3gg6[] = {
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI3ff6[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff63fooEv,_ZTv0_n12_N3ff63fooEv),
+};
+static  VTT_ENTRY vtt_gg6[] = {
+  {&(_ZTV3gg6[4]),  4,17},
+  {&(_tg__ZTV3ee6__3gg6[3]),  3,4},
+  {&(_tg__ZTV3bb6__3ee6__3gg6[3]),  3,4},
+  {&(_tg__ZTV3ff6__3gg6[3]),  3,4},
+  {&(_tg__ZTV3cc6__3ff6__3gg6[3]),  3,4},
+  {&(_ZTV3gg6[12]),  12,17},
+  {&(_ZTV3gg6[8]),  8,17},
+  {&(_ZTV3gg6[16]),  16,17},
+};
+extern VTBL_ENTRY _ZTI3gg6[];
+extern  VTBL_ENTRY _ZTV3gg6[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3gg6[];
+static VTBL_ENTRY alt_thunk_names14[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff63fooEv,_ZTv0_n12_N3ff63fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3ff63fooEv,_ZThn24_N3ff63fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee63fooEv,_ZTv0_n12_N3ee63fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3ee63fooEv,_ZThn28_N3ee63fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3gg63fooEv,_ZTv0_n12_N3gg63fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3gg63fooEv,_ZThn36_N3gg63fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3gg63fooEv,_ZThn28_N3gg63fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg6 = {  "gg6", // class name
+  bases_gg6, 6,
+  &(vtc_gg6[0]), // expected_vtbl_contents
+  &(vtt_gg6[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI3gg6),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg6),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3gg6),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names14,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa7  {
+  int a;
+   aa7(); // _ZN3aa7C1Ev
+  virtual void  foo(); // _ZN3aa73fooEv
+  ~aa7(); // tgen
+};
+//SIG(-1 aa7) C1{ v1 Fi}
+
+
+ aa7 ::aa7(){ note_ctor("aa7", this);}
+void  aa7 ::foo(){vfunc_called(this, "_ZN3aa73fooEv");}
+aa7 ::~aa7(){ note_dtor("aa7", this);} // tgen
+
+static void Test_aa7()
+{
+  extern Class_Descriptor cd_aa7;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa7, buf);
+    aa7 *dp, &lv = *(dp=new (buf) aa7());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa7)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa7)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa7.a");
+    test_class_info(&lv, &cd_aa7);
+    dp->~aa7();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa7(Test_aa7, "aa7", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa7C1Ev();
+extern void _ZN3aa7D1Ev();
+Name_Map name_map_aa7[] = {
+  NSPAIR(_ZN3aa7C1Ev),
+  NSPAIR(_ZN3aa7D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa7[];
+extern void _ZN3aa73fooEv();
+static  VTBL_ENTRY vtc_aa7[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa7[0]),
+  (VTBL_ENTRY)&_ZN3aa73fooEv,
+};
+extern VTBL_ENTRY _ZTI3aa7[];
+extern  VTBL_ENTRY _ZTV3aa7[];
+Class_Descriptor cd_aa7 = {  "aa7", // class name
+  0,0,//no base classes
+  &(vtc_aa7[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa7),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa7),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  bb7  {
+  int b;
+   bb7(); // _ZN3bb7C1Ev
+  virtual void  foo(); // _ZN3bb73fooEv
+  ~bb7(); // tgen
+};
+//SIG(-1 bb7) C1{ v1 Fi}
+
+
+ bb7 ::bb7(){ note_ctor("bb7", this);}
+void  bb7 ::foo(){vfunc_called(this, "_ZN3bb73fooEv");}
+bb7 ::~bb7(){ note_dtor("bb7", this);} // tgen
+
+static void Test_bb7()
+{
+  extern Class_Descriptor cd_bb7;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb7, buf);
+    bb7 *dp, &lv = *(dp=new (buf) bb7());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb7)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb7)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb7.b");
+    test_class_info(&lv, &cd_bb7);
+    dp->~bb7();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb7(Test_bb7, "bb7", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb7C1Ev();
+extern void _ZN3bb7D1Ev();
+Name_Map name_map_bb7[] = {
+  NSPAIR(_ZN3bb7C1Ev),
+  NSPAIR(_ZN3bb7D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb7[];
+extern void _ZN3bb73fooEv();
+static  VTBL_ENTRY vtc_bb7[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb7[0]),
+  (VTBL_ENTRY)&_ZN3bb73fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb7[];
+extern  VTBL_ENTRY _ZTV3bb7[];
+Class_Descriptor cd_bb7 = {  "bb7", // class name
+  0,0,//no base classes
+  &(vtc_bb7[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb7),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb7),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  cc7  {
+  int c;
+   cc7(); // _ZN3cc7C1Ev
+  virtual void  foo(); // _ZN3cc73fooEv
+  ~cc7(); // tgen
+};
+//SIG(-1 cc7) C1{ v1 Fi}
+
+
+ cc7 ::cc7(){ note_ctor("cc7", this);}
+void  cc7 ::foo(){vfunc_called(this, "_ZN3cc73fooEv");}
+cc7 ::~cc7(){ note_dtor("cc7", this);} // tgen
+
+static void Test_cc7()
+{
+  extern Class_Descriptor cd_cc7;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc7, buf);
+    cc7 *dp, &lv = *(dp=new (buf) cc7());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc7)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc7)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc7.c");
+    test_class_info(&lv, &cd_cc7);
+    dp->~cc7();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc7(Test_cc7, "cc7", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc7C1Ev();
+extern void _ZN3cc7D1Ev();
+Name_Map name_map_cc7[] = {
+  NSPAIR(_ZN3cc7C1Ev),
+  NSPAIR(_ZN3cc7D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc7[];
+extern void _ZN3cc73fooEv();
+static  VTBL_ENTRY vtc_cc7[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc7[0]),
+  (VTBL_ENTRY)&_ZN3cc73fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc7[];
+extern  VTBL_ENTRY _ZTV3cc7[];
+Class_Descriptor cd_cc7 = {  "cc7", // class name
+  0,0,//no base classes
+  &(vtc_cc7[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc7),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc7),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  dd7  {
+  int d;
+   dd7(); // _ZN3dd7C1Ev
+  virtual void  foo(); // _ZN3dd73fooEv
+  ~dd7(); // tgen
+};
+//SIG(-1 dd7) C1{ v1 Fi}
+
+
+ dd7 ::dd7(){ note_ctor("dd7", this);}
+void  dd7 ::foo(){vfunc_called(this, "_ZN3dd73fooEv");}
+dd7 ::~dd7(){ note_dtor("dd7", this);} // tgen
+
+static void Test_dd7()
+{
+  extern Class_Descriptor cd_dd7;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd7, buf);
+    dd7 *dp, &lv = *(dp=new (buf) dd7());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd7)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd7)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd7.d");
+    test_class_info(&lv, &cd_dd7);
+    dp->~dd7();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd7(Test_dd7, "dd7", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd7C1Ev();
+extern void _ZN3dd7D1Ev();
+Name_Map name_map_dd7[] = {
+  NSPAIR(_ZN3dd7C1Ev),
+  NSPAIR(_ZN3dd7D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd7[];
+extern void _ZN3dd73fooEv();
+static  VTBL_ENTRY vtc_dd7[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd7[0]),
+  (VTBL_ENTRY)&_ZN3dd73fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd7[];
+extern  VTBL_ENTRY _ZTV3dd7[];
+Class_Descriptor cd_dd7 = {  "dd7", // class name
+  0,0,//no base classes
+  &(vtc_dd7[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd7),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd7),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  ee7  : virtual aa7 , virtual bb7 {
+  int e;
+   ee7(const ABISELECT(__tsi64,int) *const *); // _ZN3ee7C2Ev
+  virtual void  foo(); // _ZN3ee73fooEv
+  ~ee7(); // tgen
+  ee7(); // tgen
+};
+//SIG(-1 ee7) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee7 ::ee7(const ABISELECT(__tsi64,int) *const *){}
+void  ee7 ::foo(){vfunc_called(this, "_ZN3ee73fooEv");}
+ee7 ::~ee7(){ note_dtor("ee7", this);} // tgen
+ee7 ::ee7(){ note_ctor("ee7", this);} // tgen
+
+static void Test_ee7()
+{
+  extern Class_Descriptor cd_ee7;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee7, buf);
+    ee7 *dp, &lv = *(dp=new (buf) ee7());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee7)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee7)");
+    check_base_class_offset(lv, (aa7*), ABISELECT(16,8), "ee7");
+    check_base_class_offset(lv, (bb7*), ABISELECT(32,16), "ee7");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee7.e");
+    test_class_info(&lv, &cd_ee7);
+    dp->~ee7();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee7(Test_ee7, "ee7", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN3ee7C1Ev();
+extern void _ZN3ee7D1Ev();
+Name_Map name_map_ee7[] = {
+  NSPAIR(_ZN3ee7C1Ev),
+  NSPAIR(_ZN3ee7D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa7;
+extern VTBL_ENTRY _ZTI3aa7[];
+extern  VTBL_ENTRY _ZTV3aa7[];
+extern Class_Descriptor cd_bb7;
+extern VTBL_ENTRY _ZTI3bb7[];
+extern  VTBL_ENTRY _ZTV3bb7[];
+static Base_Class bases_ee7[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa7,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb7,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3ee7[];
+extern void _ZN3ee73fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv)();
+extern void ABISELECT(_ZThn16_N3ee73fooEv,_ZThn8_N3ee73fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv)();
+extern void ABISELECT(_ZThn32_N3ee73fooEv,_ZThn16_N3ee73fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee7[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee7[0]),
+  (VTBL_ENTRY)&_ZN3ee73fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3ee7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI3ee7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv),
+};
+extern VTBL_ENTRY _ZTV3ee7[];
+static  VTT_ENTRY vtt_ee7[] = {
+  {&(_ZTV3ee7[4]),  4,13},
+  {&(_ZTV3ee7[8]),  8,13},
+  {&(_ZTV3ee7[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI3ee7[];
+extern  VTBL_ENTRY _ZTV3ee7[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee7[];
+static VTBL_ENTRY alt_thunk_names15[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N3ee73fooEv,_ZThn16_N3ee73fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ee73fooEv,_ZThn8_N3ee73fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee7 = {  "ee7", // class name
+  bases_ee7, 2,
+  &(vtc_ee7[0]), // expected_vtbl_contents
+  &(vtt_ee7[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI3ee7),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee7),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ee7),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names15,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff7  : virtual cc7 , dd7 {
+  int f;
+   ff7(const ABISELECT(__tsi64,int) *const *); // _ZN3ff7C2Ev
+  virtual void  foo(); // _ZN3ff73fooEv
+  ~ff7(); // tgen
+  ff7(); // tgen
+};
+//SIG(-1 ff7) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff7 ::ff7(const ABISELECT(__tsi64,int) *const *){}
+void  ff7 ::foo(){vfunc_called(this, "_ZN3ff73fooEv");}
+ff7 ::~ff7(){ note_dtor("ff7", this);} // tgen
+ff7 ::ff7(){ note_ctor("ff7", this);} // tgen
+
+static void Test_ff7()
+{
+  extern Class_Descriptor cd_ff7;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff7, buf);
+    ff7 *dp, &lv = *(dp=new (buf) ff7());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff7)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff7)");
+    check_base_class_offset(lv, (cc7*), ABISELECT(16,12), "ff7");
+    check_base_class_offset(lv, (dd7*), 0, "ff7");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff7.f");
+    test_class_info(&lv, &cd_ff7);
+    dp->~ff7();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff7(Test_ff7, "ff7", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff7C1Ev();
+extern void _ZN3ff7D1Ev();
+Name_Map name_map_ff7[] = {
+  NSPAIR(_ZN3ff7C1Ev),
+  NSPAIR(_ZN3ff7D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc7;
+extern VTBL_ENTRY _ZTI3cc7[];
+extern  VTBL_ENTRY _ZTV3cc7[];
+extern Class_Descriptor cd_dd7;
+extern VTBL_ENTRY _ZTI3dd7[];
+extern  VTBL_ENTRY _ZTV3dd7[];
+static Base_Class bases_ff7[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc7,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd7,    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 _ZTI3ff7[];
+extern void _ZN3ff73fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ff73fooEv,_ZTv0_n12_N3ff73fooEv)();
+extern void ABISELECT(_ZThn16_N3ff73fooEv,_ZThn12_N3ff73fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff7[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff7[0]),
+  (VTBL_ENTRY)&_ZN3ff73fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ff7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff73fooEv,_ZTv0_n12_N3ff73fooEv),
+};
+extern VTBL_ENTRY _ZTV3ff7[];
+static  VTT_ENTRY vtt_ff7[] = {
+  {&(_ZTV3ff7[3]),  3,8},
+  {&(_ZTV3ff7[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ff7[];
+extern  VTBL_ENTRY _ZTV3ff7[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff7[];
+static VTBL_ENTRY alt_thunk_names16[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff73fooEv,_ZTv0_n12_N3ff73fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ff73fooEv,_ZThn12_N3ff73fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff7 = {  "ff7", // class name
+  bases_ff7, 2,
+  &(vtc_ff7[0]), // expected_vtbl_contents
+  &(vtt_ff7[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff7),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff7),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ff7),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names16,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg7  : ee7 , ff7 {
+  int g;
+   gg7(const ABISELECT(__tsi64,int) *const *); // _ZN3gg7C2Ev
+  virtual void  foo(); // _ZN3gg73fooEv
+  ~gg7(); // tgen
+  gg7(); // tgen
+};
+//SIG(1 gg7) C1{ BC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg7 ::gg7(const ABISELECT(__tsi64,int) *const *){}
+void  gg7 ::foo(){vfunc_called(this, "_ZN3gg73fooEv");}
+gg7 ::~gg7(){ note_dtor("gg7", this);} // tgen
+gg7 ::gg7(){ note_ctor("gg7", this);} // tgen
+
+static void Test_gg7()
+{
+  extern Class_Descriptor cd_gg7;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(12,13)];
+    init_test(&cd_gg7, buf);
+    gg7 *dp, &lv = *(dp=new (buf) gg7());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(88,48), "sizeof(gg7)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg7)");
+    check_base_class_offset(lv, (aa7*)(ee7*), ABISELECT(40,24), "gg7");
+    check_base_class_offset(lv, (bb7*)(ee7*), ABISELECT(56,32), "gg7");
+    check_base_class_offset(lv, (ee7*), 0, "gg7");
+    check_base_class_offset(lv, (cc7*)(ff7*), ABISELECT(72,40), "gg7");
+    check_base_class_offset(lv, (dd7*)(ff7*), ABISELECT(16,8), "gg7");
+    check_base_class_offset(lv, (ff7*), ABISELECT(16,8), "gg7");
+    check_field_offset(lv, g, ABISELECT(32,20), "gg7.g");
+    test_class_info(&lv, &cd_gg7);
+    dp->~gg7();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg7(Test_gg7, "gg7", ABISELECT(88,48));
+
+#else // __cplusplus
+
+extern void _ZN3gg7C1Ev();
+extern void _ZN3gg7D1Ev();
+Name_Map name_map_gg7[] = {
+  NSPAIR(_ZN3gg7C1Ev),
+  NSPAIR(_ZN3gg7D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa7;
+extern VTBL_ENTRY _ZTI3aa7[];
+extern  VTBL_ENTRY _ZTV3aa7[];
+extern Class_Descriptor cd_bb7;
+extern VTBL_ENTRY _ZTI3bb7[];
+extern  VTBL_ENTRY _ZTV3bb7[];
+extern Class_Descriptor cd_ee7;
+extern VTBL_ENTRY _ZTI3ee7[];
+extern  VTBL_ENTRY _ZTV3ee7[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee7[];
+extern Class_Descriptor cd_cc7;
+extern VTBL_ENTRY _ZTI3cc7[];
+extern  VTBL_ENTRY _ZTV3cc7[];
+extern Class_Descriptor cd_dd7;
+extern VTBL_ENTRY _ZTI3dd7[];
+extern  VTBL_ENTRY _ZTV3dd7[];
+extern Class_Descriptor cd_ff7;
+extern VTBL_ENTRY _ZTI3ff7[];
+extern  VTBL_ENTRY _ZTV3ff7[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff7[];
+static Base_Class bases_gg7[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa7,    ABISELECT(40,24), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb7,    ABISELECT(56,32), //bcp->offset
+    14, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee7,    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
+    4, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc7,    ABISELECT(72,40), //bcp->offset
+    18, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    10, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd7,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff7,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    9, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg7[];
+extern void _ZN3gg73fooEv();
+extern void ABISELECT(_ZThn16_N3gg73fooEv,_ZThn8_N3gg73fooEv)();
+extern void ABISELECT(_ZTv0_n24_N3gg73fooEv,_ZTv0_n12_N3gg73fooEv)();
+extern void ABISELECT(_ZThn40_N3gg73fooEv,_ZThn24_N3gg73fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N3gg73fooEv,_ZTv0_n12_N3gg73fooEv)();
+extern void ABISELECT(_ZThn56_N3gg73fooEv,_ZThn32_N3gg73fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N3gg73fooEv,_ZTv0_n12_N3gg73fooEv)();
+extern void ABISELECT(_ZThn72_N3gg73fooEv,_ZThn40_N3gg73fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg7[] = {
+  ABISELECT(72,40),
+  ABISELECT(56,32),
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg7[0]),
+  (VTBL_ENTRY)&_ZN3gg73fooEv,
+  ABISELECT(56,32),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3gg7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg73fooEv,_ZThn8_N3gg73fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI3gg7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg73fooEv,_ZTv0_n12_N3gg73fooEv),
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI3gg7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg73fooEv,_ZTv0_n12_N3gg73fooEv),
+  ABISELECT(-72,-40),
+  ABISELECT(-72,-40),
+  (VTBL_ENTRY)&(_ZTI3gg7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg73fooEv,_ZTv0_n12_N3gg73fooEv),
+};
+extern VTBL_ENTRY _ZTV3gg7[];
+extern void _ZN3ee73fooEv();
+static  VTBL_ENTRY _tg__ZTV3ee7__3gg7[] = {
+  ABISELECT(56,32),
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee7[0]),
+  (VTBL_ENTRY)&_ZN3ee73fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv)();
+extern void ABISELECT(_ZThn40_N3ee73fooEv,_ZThn24_N3ee73fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3aa7__3ee7__3gg7[] = {
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI3ee7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv)();
+extern void ABISELECT(_ZThn56_N3ee73fooEv,_ZThn32_N3ee73fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3bb7__3ee7__3gg7[] = {
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI3ee7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv),
+};
+extern void _ZN3ff73fooEv();
+static  VTBL_ENTRY _tg__ZTV3ff7__3gg7[] = {
+  ABISELECT(56,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff7[0]),
+  (VTBL_ENTRY)&_ZN3ff73fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ff73fooEv,_ZTv0_n12_N3ff73fooEv)();
+extern void ABISELECT(_ZThn56_N3ff73fooEv,_ZThn32_N3ff73fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3cc7__3ff7__3gg7[] = {
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI3ff7[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff73fooEv,_ZTv0_n12_N3ff73fooEv),
+};
+static  VTT_ENTRY vtt_gg7[] = {
+  {&(_ZTV3gg7[5]),  5,22},
+  {&(_tg__ZTV3ee7__3gg7[4]),  4,5},
+  {&(_tg__ZTV3aa7__3ee7__3gg7[3]),  3,4},
+  {&(_tg__ZTV3bb7__3ee7__3gg7[3]),  3,4},
+  {&(_tg__ZTV3ff7__3gg7[3]),  3,4},
+  {&(_tg__ZTV3cc7__3ff7__3gg7[3]),  3,4},
+  {&(_ZTV3gg7[13]),  13,22},
+  {&(_ZTV3gg7[17]),  17,22},
+  {&(_ZTV3gg7[9]),  9,22},
+  {&(_ZTV3gg7[21]),  21,22},
+};
+extern VTBL_ENTRY _ZTI3gg7[];
+extern  VTBL_ENTRY _ZTV3gg7[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3gg7[];
+static VTBL_ENTRY alt_thunk_names17[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff73fooEv,_ZTv0_n12_N3ff73fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3ff73fooEv,_ZThn32_N3ff73fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee73fooEv,_ZTv0_n12_N3ee73fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3ee73fooEv,_ZThn32_N3ee73fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3ee73fooEv,_ZThn24_N3ee73fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3gg73fooEv,_ZTv0_n12_N3gg73fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn72_N3gg73fooEv,_ZThn40_N3gg73fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3gg73fooEv,_ZThn32_N3gg73fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3gg73fooEv,_ZThn24_N3gg73fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg7 = {  "gg7", // class name
+  bases_gg7, 6,
+  &(vtc_gg7[0]), // expected_vtbl_contents
+  &(vtt_gg7[0]), // expected_vtt_contents
+  ABISELECT(88,48), // object size
+  NSPAIRA(_ZTI3gg7),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg7),22, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3gg7),10, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names17,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa8  {
+  int a;
+   aa8(); // _ZN3aa8C1Ev
+  virtual void  foo(); // _ZN3aa83fooEv
+  ~aa8(); // tgen
+};
+//SIG(-1 aa8) C1{ v1 Fi}
+
+
+ aa8 ::aa8(){ note_ctor("aa8", this);}
+void  aa8 ::foo(){vfunc_called(this, "_ZN3aa83fooEv");}
+aa8 ::~aa8(){ note_dtor("aa8", this);} // tgen
+
+static void Test_aa8()
+{
+  extern Class_Descriptor cd_aa8;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa8, buf);
+    aa8 *dp, &lv = *(dp=new (buf) aa8());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa8)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa8)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa8.a");
+    test_class_info(&lv, &cd_aa8);
+    dp->~aa8();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa8(Test_aa8, "aa8", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa8C1Ev();
+extern void _ZN3aa8D1Ev();
+Name_Map name_map_aa8[] = {
+  NSPAIR(_ZN3aa8C1Ev),
+  NSPAIR(_ZN3aa8D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa8[];
+extern void _ZN3aa83fooEv();
+static  VTBL_ENTRY vtc_aa8[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa8[0]),
+  (VTBL_ENTRY)&_ZN3aa83fooEv,
+};
+extern VTBL_ENTRY _ZTI3aa8[];
+extern  VTBL_ENTRY _ZTV3aa8[];
+Class_Descriptor cd_aa8 = {  "aa8", // class name
+  0,0,//no base classes
+  &(vtc_aa8[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa8),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa8),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  bb8  {
+  int b;
+   bb8(); // _ZN3bb8C1Ev
+  virtual void  foo(); // _ZN3bb83fooEv
+  ~bb8(); // tgen
+};
+//SIG(-1 bb8) C1{ v1 Fi}
+
+
+ bb8 ::bb8(){ note_ctor("bb8", this);}
+void  bb8 ::foo(){vfunc_called(this, "_ZN3bb83fooEv");}
+bb8 ::~bb8(){ note_dtor("bb8", this);} // tgen
+
+static void Test_bb8()
+{
+  extern Class_Descriptor cd_bb8;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb8, buf);
+    bb8 *dp, &lv = *(dp=new (buf) bb8());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb8)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb8)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb8.b");
+    test_class_info(&lv, &cd_bb8);
+    dp->~bb8();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb8(Test_bb8, "bb8", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb8C1Ev();
+extern void _ZN3bb8D1Ev();
+Name_Map name_map_bb8[] = {
+  NSPAIR(_ZN3bb8C1Ev),
+  NSPAIR(_ZN3bb8D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb8[];
+extern void _ZN3bb83fooEv();
+static  VTBL_ENTRY vtc_bb8[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb8[0]),
+  (VTBL_ENTRY)&_ZN3bb83fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb8[];
+extern  VTBL_ENTRY _ZTV3bb8[];
+Class_Descriptor cd_bb8 = {  "bb8", // class name
+  0,0,//no base classes
+  &(vtc_bb8[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb8),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb8),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  cc8  {
+  int c;
+   cc8(); // _ZN3cc8C1Ev
+  virtual void  foo(); // _ZN3cc83fooEv
+  ~cc8(); // tgen
+};
+//SIG(-1 cc8) C1{ v1 Fi}
+
+
+ cc8 ::cc8(){ note_ctor("cc8", this);}
+void  cc8 ::foo(){vfunc_called(this, "_ZN3cc83fooEv");}
+cc8 ::~cc8(){ note_dtor("cc8", this);} // tgen
+
+static void Test_cc8()
+{
+  extern Class_Descriptor cd_cc8;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc8, buf);
+    cc8 *dp, &lv = *(dp=new (buf) cc8());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc8)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc8)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc8.c");
+    test_class_info(&lv, &cd_cc8);
+    dp->~cc8();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc8(Test_cc8, "cc8", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc8C1Ev();
+extern void _ZN3cc8D1Ev();
+Name_Map name_map_cc8[] = {
+  NSPAIR(_ZN3cc8C1Ev),
+  NSPAIR(_ZN3cc8D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc8[];
+extern void _ZN3cc83fooEv();
+static  VTBL_ENTRY vtc_cc8[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc8[0]),
+  (VTBL_ENTRY)&_ZN3cc83fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc8[];
+extern  VTBL_ENTRY _ZTV3cc8[];
+Class_Descriptor cd_cc8 = {  "cc8", // class name
+  0,0,//no base classes
+  &(vtc_cc8[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc8),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc8),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  dd8  {
+  int d;
+   dd8(); // _ZN3dd8C1Ev
+  virtual void  foo(); // _ZN3dd83fooEv
+  ~dd8(); // tgen
+};
+//SIG(-1 dd8) C1{ v1 Fi}
+
+
+ dd8 ::dd8(){ note_ctor("dd8", this);}
+void  dd8 ::foo(){vfunc_called(this, "_ZN3dd83fooEv");}
+dd8 ::~dd8(){ note_dtor("dd8", this);} // tgen
+
+static void Test_dd8()
+{
+  extern Class_Descriptor cd_dd8;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd8, buf);
+    dd8 *dp, &lv = *(dp=new (buf) dd8());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd8)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd8)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd8.d");
+    test_class_info(&lv, &cd_dd8);
+    dp->~dd8();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd8(Test_dd8, "dd8", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd8C1Ev();
+extern void _ZN3dd8D1Ev();
+Name_Map name_map_dd8[] = {
+  NSPAIR(_ZN3dd8C1Ev),
+  NSPAIR(_ZN3dd8D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd8[];
+extern void _ZN3dd83fooEv();
+static  VTBL_ENTRY vtc_dd8[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd8[0]),
+  (VTBL_ENTRY)&_ZN3dd83fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd8[];
+extern  VTBL_ENTRY _ZTV3dd8[];
+Class_Descriptor cd_dd8 = {  "dd8", // class name
+  0,0,//no base classes
+  &(vtc_dd8[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd8),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd8),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  ee8  : aa8 , bb8 {
+  int e;
+   ee8(); // _ZN3ee8C1Ev
+  virtual void  foo(); // _ZN3ee83fooEv
+  ~ee8(); // tgen
+};
+//SIG(-1 ee8) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee8 ::ee8(){ note_ctor("ee8", this);}
+void  ee8 ::foo(){vfunc_called(this, "_ZN3ee83fooEv");}
+ee8 ::~ee8(){ note_dtor("ee8", this);} // tgen
+
+static void Test_ee8()
+{
+  extern Class_Descriptor cd_ee8;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee8, buf);
+    ee8 *dp, &lv = *(dp=new (buf) ee8());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee8)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee8)");
+    check_base_class_offset(lv, (aa8*), 0, "ee8");
+    check_base_class_offset(lv, (bb8*), ABISELECT(16,8), "ee8");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee8.e");
+    test_class_info(&lv, &cd_ee8);
+    dp->~ee8();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee8(Test_ee8, "ee8", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ee8C1Ev();
+extern void _ZN3ee8D1Ev();
+Name_Map name_map_ee8[] = {
+  NSPAIR(_ZN3ee8C1Ev),
+  NSPAIR(_ZN3ee8D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa8;
+extern VTBL_ENTRY _ZTI3aa8[];
+extern  VTBL_ENTRY _ZTV3aa8[];
+extern Class_Descriptor cd_bb8;
+extern VTBL_ENTRY _ZTI3bb8[];
+extern  VTBL_ENTRY _ZTV3bb8[];
+static Base_Class bases_ee8[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa8,    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},
+  {&cd_bb8,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI3ee8[];
+extern void _ZN3ee83fooEv();
+extern void ABISELECT(_ZThn16_N3ee83fooEv,_ZThn8_N3ee83fooEv)();
+static  VTBL_ENTRY vtc_ee8[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee8[0]),
+  (VTBL_ENTRY)&_ZN3ee83fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3ee8[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3ee83fooEv,_ZThn8_N3ee83fooEv),
+};
+extern VTBL_ENTRY _ZTI3ee8[];
+extern  VTBL_ENTRY _ZTV3ee8[];
+Class_Descriptor cd_ee8 = {  "ee8", // class name
+  bases_ee8, 2,
+  &(vtc_ee8[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ee8),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee8),6, //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  ff8  : cc8 , virtual dd8 {
+  int f;
+   ff8(const ABISELECT(__tsi64,int) *const *); // _ZN3ff8C2Ev
+  virtual void  foo(); // _ZN3ff83fooEv
+  ~ff8(); // tgen
+  ff8(); // tgen
+};
+//SIG(-1 ff8) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff8 ::ff8(const ABISELECT(__tsi64,int) *const *){}
+void  ff8 ::foo(){vfunc_called(this, "_ZN3ff83fooEv");}
+ff8 ::~ff8(){ note_dtor("ff8", this);} // tgen
+ff8 ::ff8(){ note_ctor("ff8", this);} // tgen
+
+static void Test_ff8()
+{
+  extern Class_Descriptor cd_ff8;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff8, buf);
+    ff8 *dp, &lv = *(dp=new (buf) ff8());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff8)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff8)");
+    check_base_class_offset(lv, (cc8*), 0, "ff8");
+    check_base_class_offset(lv, (dd8*), ABISELECT(16,12), "ff8");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff8.f");
+    test_class_info(&lv, &cd_ff8);
+    dp->~ff8();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff8(Test_ff8, "ff8", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff8C1Ev();
+extern void _ZN3ff8D1Ev();
+Name_Map name_map_ff8[] = {
+  NSPAIR(_ZN3ff8C1Ev),
+  NSPAIR(_ZN3ff8D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc8;
+extern VTBL_ENTRY _ZTI3cc8[];
+extern  VTBL_ENTRY _ZTV3cc8[];
+extern Class_Descriptor cd_dd8;
+extern VTBL_ENTRY _ZTI3dd8[];
+extern  VTBL_ENTRY _ZTV3dd8[];
+static Base_Class bases_ff8[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc8,    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},
+  {&cd_dd8,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3ff8[];
+extern void _ZN3ff83fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ff83fooEv,_ZTv0_n12_N3ff83fooEv)();
+extern void ABISELECT(_ZThn16_N3ff83fooEv,_ZThn12_N3ff83fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff8[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff8[0]),
+  (VTBL_ENTRY)&_ZN3ff83fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ff8[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff83fooEv,_ZTv0_n12_N3ff83fooEv),
+};
+extern VTBL_ENTRY _ZTV3ff8[];
+static  VTT_ENTRY vtt_ff8[] = {
+  {&(_ZTV3ff8[3]),  3,8},
+  {&(_ZTV3ff8[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ff8[];
+extern  VTBL_ENTRY _ZTV3ff8[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff8[];
+static VTBL_ENTRY alt_thunk_names18[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff83fooEv,_ZTv0_n12_N3ff83fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ff83fooEv,_ZThn12_N3ff83fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff8 = {  "ff8", // class name
+  bases_ff8, 2,
+  &(vtc_ff8[0]), // expected_vtbl_contents
+  &(vtt_ff8[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff8),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff8),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ff8),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names18,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg8  : ee8 , ff8 {
+  int g;
+   gg8(const ABISELECT(__tsi64,int) *const *); // _ZN3gg8C2Ev
+  virtual void  foo(); // _ZN3gg83fooEv
+  ~gg8(); // tgen
+  gg8(); // tgen
+};
+//SIG(1 gg8) C1{ BC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg8 ::gg8(const ABISELECT(__tsi64,int) *const *){}
+void  gg8 ::foo(){vfunc_called(this, "_ZN3gg83fooEv");}
+gg8 ::~gg8(){ note_dtor("gg8", this);} // tgen
+gg8 ::gg8(){ note_ctor("gg8", this);} // tgen
+
+static void Test_gg8()
+{
+  extern Class_Descriptor cd_gg8;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg8, buf);
+    gg8 *dp, &lv = *(dp=new (buf) gg8());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg8)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg8)");
+    check_base_class_offset(lv, (aa8*)(ee8*), 0, "gg8");
+    check_base_class_offset(lv, (bb8*)(ee8*), ABISELECT(16,8), "gg8");
+    check_base_class_offset(lv, (ee8*), 0, "gg8");
+    check_base_class_offset(lv, (cc8*)(ff8*), ABISELECT(32,20), "gg8");
+    check_base_class_offset(lv, (dd8*)(ff8*), ABISELECT(56,36), "gg8");
+    check_base_class_offset(lv, (ff8*), ABISELECT(32,20), "gg8");
+    check_field_offset(lv, g, ABISELECT(48,32), "gg8.g");
+    test_class_info(&lv, &cd_gg8);
+    dp->~gg8();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg8(Test_gg8, "gg8", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN3gg8C1Ev();
+extern void _ZN3gg8D1Ev();
+Name_Map name_map_gg8[] = {
+  NSPAIR(_ZN3gg8C1Ev),
+  NSPAIR(_ZN3gg8D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa8;
+extern VTBL_ENTRY _ZTI3aa8[];
+extern  VTBL_ENTRY _ZTV3aa8[];
+extern Class_Descriptor cd_bb8;
+extern VTBL_ENTRY _ZTI3bb8[];
+extern  VTBL_ENTRY _ZTV3bb8[];
+extern Class_Descriptor cd_ee8;
+extern VTBL_ENTRY _ZTI3ee8[];
+extern  VTBL_ENTRY _ZTV3ee8[];
+extern Class_Descriptor cd_cc8;
+extern VTBL_ENTRY _ZTI3cc8[];
+extern  VTBL_ENTRY _ZTV3cc8[];
+extern Class_Descriptor cd_dd8;
+extern VTBL_ENTRY _ZTI3dd8[];
+extern  VTBL_ENTRY _ZTV3dd8[];
+extern Class_Descriptor cd_ff8;
+extern VTBL_ENTRY _ZTI3ff8[];
+extern  VTBL_ENTRY _ZTV3ff8[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff8[];
+static Base_Class bases_gg8[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa8,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb8,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_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
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee8,    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
+    4, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc8,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd8,    ABISELECT(56,36), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff8,    ABISELECT(32,20), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg8[];
+extern void _ZN3gg83fooEv();
+extern void ABISELECT(_ZThn16_N3gg83fooEv,_ZThn8_N3gg83fooEv)();
+extern void ABISELECT(_ZThn32_N3gg83fooEv,_ZThn20_N3gg83fooEv)();
+extern void ABISELECT(_ZTv0_n24_N3gg83fooEv,_ZTv0_n12_N3gg83fooEv)();
+extern void ABISELECT(_ZThn56_N3gg83fooEv,_ZThn36_N3gg83fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg8[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg8[0]),
+  (VTBL_ENTRY)&_ZN3gg83fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI3gg8[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg83fooEv,_ZThn8_N3gg83fooEv),
+  ABISELECT(24,16),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI3gg8[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn32_N3gg83fooEv,_ZThn20_N3gg83fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI3gg8[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg83fooEv,_ZTv0_n12_N3gg83fooEv),
+};
+extern VTBL_ENTRY _ZTV3gg8[];
+extern void _ZN3ff83fooEv();
+static  VTBL_ENTRY _tg__ZTV3ff8__3gg8[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff8[0]),
+  (VTBL_ENTRY)&_ZN3ff83fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ff83fooEv,_ZTv0_n12_N3ff83fooEv)();
+extern void ABISELECT(_ZThn24_N3ff83fooEv,_ZThn16_N3ff83fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3dd8__3ff8__3gg8[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI3ff8[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff83fooEv,_ZTv0_n12_N3ff83fooEv),
+};
+static  VTT_ENTRY vtt_gg8[] = {
+  {&(_ZTV3gg8[3]),  3,15},
+  {&(_tg__ZTV3ff8__3gg8[3]),  3,4},
+  {&(_tg__ZTV3dd8__3ff8__3gg8[3]),  3,4},
+  {&(_ZTV3gg8[10]),  10,15},
+  {&(_ZTV3gg8[14]),  14,15},
+};
+extern VTBL_ENTRY _ZTI3gg8[];
+extern  VTBL_ENTRY _ZTV3gg8[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3gg8[];
+static VTBL_ENTRY alt_thunk_names19[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff83fooEv,_ZTv0_n12_N3ff83fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N3ff83fooEv,_ZThn16_N3ff83fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3gg83fooEv,_ZTv0_n12_N3gg83fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3gg83fooEv,_ZThn36_N3gg83fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg8 = {  "gg8", // class name
+  bases_gg8, 6,
+  &(vtc_gg8[0]), // expected_vtbl_contents
+  &(vtt_gg8[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI3gg8),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg8),15, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3gg8),5, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names19,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa9  {
+  int a;
+   aa9(); // _ZN3aa9C1Ev
+  virtual void  foo(); // _ZN3aa93fooEv
+  ~aa9(); // tgen
+};
+//SIG(-1 aa9) C1{ v1 Fi}
+
+
+ aa9 ::aa9(){ note_ctor("aa9", this);}
+void  aa9 ::foo(){vfunc_called(this, "_ZN3aa93fooEv");}
+aa9 ::~aa9(){ note_dtor("aa9", this);} // tgen
+
+static void Test_aa9()
+{
+  extern Class_Descriptor cd_aa9;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa9, buf);
+    aa9 *dp, &lv = *(dp=new (buf) aa9());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa9)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa9)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa9.a");
+    test_class_info(&lv, &cd_aa9);
+    dp->~aa9();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa9(Test_aa9, "aa9", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3aa9C1Ev();
+extern void _ZN3aa9D1Ev();
+Name_Map name_map_aa9[] = {
+  NSPAIR(_ZN3aa9C1Ev),
+  NSPAIR(_ZN3aa9D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3aa9[];
+extern void _ZN3aa93fooEv();
+static  VTBL_ENTRY vtc_aa9[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3aa9[0]),
+  (VTBL_ENTRY)&_ZN3aa93fooEv,
+};
+extern VTBL_ENTRY _ZTI3aa9[];
+extern  VTBL_ENTRY _ZTV3aa9[];
+Class_Descriptor cd_aa9 = {  "aa9", // class name
+  0,0,//no base classes
+  &(vtc_aa9[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3aa9),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3aa9),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  bb9  {
+  int b;
+   bb9(); // _ZN3bb9C1Ev
+  virtual void  foo(); // _ZN3bb93fooEv
+  ~bb9(); // tgen
+};
+//SIG(-1 bb9) C1{ v1 Fi}
+
+
+ bb9 ::bb9(){ note_ctor("bb9", this);}
+void  bb9 ::foo(){vfunc_called(this, "_ZN3bb93fooEv");}
+bb9 ::~bb9(){ note_dtor("bb9", this);} // tgen
+
+static void Test_bb9()
+{
+  extern Class_Descriptor cd_bb9;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb9, buf);
+    bb9 *dp, &lv = *(dp=new (buf) bb9());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb9)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb9)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb9.b");
+    test_class_info(&lv, &cd_bb9);
+    dp->~bb9();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb9(Test_bb9, "bb9", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3bb9C1Ev();
+extern void _ZN3bb9D1Ev();
+Name_Map name_map_bb9[] = {
+  NSPAIR(_ZN3bb9C1Ev),
+  NSPAIR(_ZN3bb9D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3bb9[];
+extern void _ZN3bb93fooEv();
+static  VTBL_ENTRY vtc_bb9[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3bb9[0]),
+  (VTBL_ENTRY)&_ZN3bb93fooEv,
+};
+extern VTBL_ENTRY _ZTI3bb9[];
+extern  VTBL_ENTRY _ZTV3bb9[];
+Class_Descriptor cd_bb9 = {  "bb9", // class name
+  0,0,//no base classes
+  &(vtc_bb9[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3bb9),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3bb9),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  cc9  {
+  int c;
+   cc9(); // _ZN3cc9C1Ev
+  virtual void  foo(); // _ZN3cc93fooEv
+  ~cc9(); // tgen
+};
+//SIG(-1 cc9) C1{ v1 Fi}
+
+
+ cc9 ::cc9(){ note_ctor("cc9", this);}
+void  cc9 ::foo(){vfunc_called(this, "_ZN3cc93fooEv");}
+cc9 ::~cc9(){ note_dtor("cc9", this);} // tgen
+
+static void Test_cc9()
+{
+  extern Class_Descriptor cd_cc9;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc9, buf);
+    cc9 *dp, &lv = *(dp=new (buf) cc9());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc9)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc9)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc9.c");
+    test_class_info(&lv, &cd_cc9);
+    dp->~cc9();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc9(Test_cc9, "cc9", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3cc9C1Ev();
+extern void _ZN3cc9D1Ev();
+Name_Map name_map_cc9[] = {
+  NSPAIR(_ZN3cc9C1Ev),
+  NSPAIR(_ZN3cc9D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3cc9[];
+extern void _ZN3cc93fooEv();
+static  VTBL_ENTRY vtc_cc9[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3cc9[0]),
+  (VTBL_ENTRY)&_ZN3cc93fooEv,
+};
+extern VTBL_ENTRY _ZTI3cc9[];
+extern  VTBL_ENTRY _ZTV3cc9[];
+Class_Descriptor cd_cc9 = {  "cc9", // class name
+  0,0,//no base classes
+  &(vtc_cc9[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3cc9),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3cc9),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  dd9  {
+  int d;
+   dd9(); // _ZN3dd9C1Ev
+  virtual void  foo(); // _ZN3dd93fooEv
+  ~dd9(); // tgen
+};
+//SIG(-1 dd9) C1{ v1 Fi}
+
+
+ dd9 ::dd9(){ note_ctor("dd9", this);}
+void  dd9 ::foo(){vfunc_called(this, "_ZN3dd93fooEv");}
+dd9 ::~dd9(){ note_dtor("dd9", this);} // tgen
+
+static void Test_dd9()
+{
+  extern Class_Descriptor cd_dd9;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd9, buf);
+    dd9 *dp, &lv = *(dp=new (buf) dd9());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd9)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd9)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd9.d");
+    test_class_info(&lv, &cd_dd9);
+    dp->~dd9();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd9(Test_dd9, "dd9", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3dd9C1Ev();
+extern void _ZN3dd9D1Ev();
+Name_Map name_map_dd9[] = {
+  NSPAIR(_ZN3dd9C1Ev),
+  NSPAIR(_ZN3dd9D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI3dd9[];
+extern void _ZN3dd93fooEv();
+static  VTBL_ENTRY vtc_dd9[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3dd9[0]),
+  (VTBL_ENTRY)&_ZN3dd93fooEv,
+};
+extern VTBL_ENTRY _ZTI3dd9[];
+extern  VTBL_ENTRY _ZTV3dd9[];
+Class_Descriptor cd_dd9 = {  "dd9", // class name
+  0,0,//no base classes
+  &(vtc_dd9[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3dd9),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV3dd9),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  ee9  : virtual aa9 , bb9 {
+  int e;
+   ee9(const ABISELECT(__tsi64,int) *const *); // _ZN3ee9C2Ev
+  virtual void  foo(); // _ZN3ee93fooEv
+  ~ee9(); // tgen
+  ee9(); // tgen
+};
+//SIG(-1 ee9) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee9 ::ee9(const ABISELECT(__tsi64,int) *const *){}
+void  ee9 ::foo(){vfunc_called(this, "_ZN3ee93fooEv");}
+ee9 ::~ee9(){ note_dtor("ee9", this);} // tgen
+ee9 ::ee9(){ note_ctor("ee9", this);} // tgen
+
+static void Test_ee9()
+{
+  extern Class_Descriptor cd_ee9;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee9, buf);
+    ee9 *dp, &lv = *(dp=new (buf) ee9());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee9)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee9)");
+    check_base_class_offset(lv, (aa9*), ABISELECT(16,12), "ee9");
+    check_base_class_offset(lv, (bb9*), 0, "ee9");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee9.e");
+    test_class_info(&lv, &cd_ee9);
+    dp->~ee9();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee9(Test_ee9, "ee9", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ee9C1Ev();
+extern void _ZN3ee9D1Ev();
+Name_Map name_map_ee9[] = {
+  NSPAIR(_ZN3ee9C1Ev),
+  NSPAIR(_ZN3ee9D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa9;
+extern VTBL_ENTRY _ZTI3aa9[];
+extern  VTBL_ENTRY _ZTV3aa9[];
+extern Class_Descriptor cd_bb9;
+extern VTBL_ENTRY _ZTI3bb9[];
+extern  VTBL_ENTRY _ZTV3bb9[];
+static Base_Class bases_ee9[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa9,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb9,    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 _ZTI3ee9[];
+extern void _ZN3ee93fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ee93fooEv,_ZTv0_n12_N3ee93fooEv)();
+extern void ABISELECT(_ZThn16_N3ee93fooEv,_ZThn12_N3ee93fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee9[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee9[0]),
+  (VTBL_ENTRY)&_ZN3ee93fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ee9[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee93fooEv,_ZTv0_n12_N3ee93fooEv),
+};
+extern VTBL_ENTRY _ZTV3ee9[];
+static  VTT_ENTRY vtt_ee9[] = {
+  {&(_ZTV3ee9[3]),  3,8},
+  {&(_ZTV3ee9[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ee9[];
+extern  VTBL_ENTRY _ZTV3ee9[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee9[];
+static VTBL_ENTRY alt_thunk_names20[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee93fooEv,_ZTv0_n12_N3ee93fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ee93fooEv,_ZThn12_N3ee93fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee9 = {  "ee9", // class name
+  bases_ee9, 2,
+  &(vtc_ee9[0]), // expected_vtbl_contents
+  &(vtt_ee9[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ee9),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ee9),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ee9),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names20,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff9  : cc9 , virtual dd9 {
+  int f;
+   ff9(const ABISELECT(__tsi64,int) *const *); // _ZN3ff9C2Ev
+  virtual void  foo(); // _ZN3ff93fooEv
+  ~ff9(); // tgen
+  ff9(); // tgen
+};
+//SIG(-1 ff9) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff9 ::ff9(const ABISELECT(__tsi64,int) *const *){}
+void  ff9 ::foo(){vfunc_called(this, "_ZN3ff93fooEv");}
+ff9 ::~ff9(){ note_dtor("ff9", this);} // tgen
+ff9 ::ff9(){ note_ctor("ff9", this);} // tgen
+
+static void Test_ff9()
+{
+  extern Class_Descriptor cd_ff9;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff9, buf);
+    ff9 *dp, &lv = *(dp=new (buf) ff9());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff9)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff9)");
+    check_base_class_offset(lv, (cc9*), 0, "ff9");
+    check_base_class_offset(lv, (dd9*), ABISELECT(16,12), "ff9");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff9.f");
+    test_class_info(&lv, &cd_ff9);
+    dp->~ff9();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff9(Test_ff9, "ff9", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN3ff9C1Ev();
+extern void _ZN3ff9D1Ev();
+Name_Map name_map_ff9[] = {
+  NSPAIR(_ZN3ff9C1Ev),
+  NSPAIR(_ZN3ff9D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc9;
+extern VTBL_ENTRY _ZTI3cc9[];
+extern  VTBL_ENTRY _ZTV3cc9[];
+extern Class_Descriptor cd_dd9;
+extern VTBL_ENTRY _ZTI3dd9[];
+extern  VTBL_ENTRY _ZTV3dd9[];
+static Base_Class bases_ff9[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc9,    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},
+  {&cd_dd9,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3ff9[];
+extern void _ZN3ff93fooEv();
+extern void ABISELECT(_ZTv0_n24_N3ff93fooEv,_ZTv0_n12_N3ff93fooEv)();
+extern void ABISELECT(_ZThn16_N3ff93fooEv,_ZThn12_N3ff93fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff9[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff9[0]),
+  (VTBL_ENTRY)&_ZN3ff93fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3ff9[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff93fooEv,_ZTv0_n12_N3ff93fooEv),
+};
+extern VTBL_ENTRY _ZTV3ff9[];
+static  VTT_ENTRY vtt_ff9[] = {
+  {&(_ZTV3ff9[3]),  3,8},
+  {&(_ZTV3ff9[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI3ff9[];
+extern  VTBL_ENTRY _ZTV3ff9[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff9[];
+static VTBL_ENTRY alt_thunk_names21[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff93fooEv,_ZTv0_n12_N3ff93fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N3ff93fooEv,_ZThn12_N3ff93fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff9 = {  "ff9", // class name
+  bases_ff9, 2,
+  &(vtc_ff9[0]), // expected_vtbl_contents
+  &(vtt_ff9[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI3ff9),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3ff9),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3ff9),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names21,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg9  : ee9 , ff9 {
+  int g;
+   gg9(const ABISELECT(__tsi64,int) *const *); // _ZN3gg9C2Ev
+  virtual void  foo(); // _ZN3gg93fooEv
+  ~gg9(); // tgen
+  gg9(); // tgen
+};
+//SIG(1 gg9) C1{ BC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg9 ::gg9(const ABISELECT(__tsi64,int) *const *){}
+void  gg9 ::foo(){vfunc_called(this, "_ZN3gg93fooEv");}
+gg9 ::~gg9(){ note_dtor("gg9", this);} // tgen
+gg9 ::gg9(){ note_ctor("gg9", this);} // tgen
+
+static void Test_gg9()
+{
+  extern Class_Descriptor cd_gg9;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg9, buf);
+    gg9 *dp, &lv = *(dp=new (buf) gg9());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg9)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg9)");
+    check_base_class_offset(lv, (aa9*)(ee9*), ABISELECT(40,28), "gg9");
+    check_base_class_offset(lv, (bb9*)(ee9*), 0, "gg9");
+    check_base_class_offset(lv, (ee9*), 0, "gg9");
+    check_base_class_offset(lv, (cc9*)(ff9*), ABISELECT(16,12), "gg9");
+    check_base_class_offset(lv, (dd9*)(ff9*), ABISELECT(56,36), "gg9");
+    check_base_class_offset(lv, (ff9*), ABISELECT(16,12), "gg9");
+    check_field_offset(lv, g, ABISELECT(32,24), "gg9.g");
+    test_class_info(&lv, &cd_gg9);
+    dp->~gg9();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg9(Test_gg9, "gg9", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN3gg9C1Ev();
+extern void _ZN3gg9D1Ev();
+Name_Map name_map_gg9[] = {
+  NSPAIR(_ZN3gg9C1Ev),
+  NSPAIR(_ZN3gg9D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa9;
+extern VTBL_ENTRY _ZTI3aa9[];
+extern  VTBL_ENTRY _ZTV3aa9[];
+extern Class_Descriptor cd_bb9;
+extern VTBL_ENTRY _ZTI3bb9[];
+extern  VTBL_ENTRY _ZTV3bb9[];
+extern Class_Descriptor cd_ee9;
+extern VTBL_ENTRY _ZTI3ee9[];
+extern  VTBL_ENTRY _ZTV3ee9[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ee9[];
+extern Class_Descriptor cd_cc9;
+extern VTBL_ENTRY _ZTI3cc9[];
+extern  VTBL_ENTRY _ZTV3cc9[];
+extern Class_Descriptor cd_dd9;
+extern VTBL_ENTRY _ZTI3dd9[];
+extern  VTBL_ENTRY _ZTV3dd9[];
+extern Class_Descriptor cd_ff9;
+extern VTBL_ENTRY _ZTI3ff9[];
+extern  VTBL_ENTRY _ZTV3ff9[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3ff9[];
+static Base_Class bases_gg9[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa9,    ABISELECT(40,28), //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_bb9,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee9,    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
+    4, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc9,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd9,    ABISELECT(56,36), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff9,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3gg9[];
+extern void _ZN3gg93fooEv();
+extern void ABISELECT(_ZThn16_N3gg93fooEv,_ZThn12_N3gg93fooEv)();
+extern void ABISELECT(_ZTv0_n24_N3gg93fooEv,_ZTv0_n12_N3gg93fooEv)();
+extern void ABISELECT(_ZThn40_N3gg93fooEv,_ZThn28_N3gg93fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N3gg93fooEv,_ZTv0_n12_N3gg93fooEv)();
+extern void ABISELECT(_ZThn56_N3gg93fooEv,_ZThn36_N3gg93fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg9[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,28),
+  0,
+  (VTBL_ENTRY)&(_ZTI3gg9[0]),
+  (VTBL_ENTRY)&_ZN3gg93fooEv,
+  ABISELECT(40,24),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI3gg9[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N3gg93fooEv,_ZThn12_N3gg93fooEv),
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI3gg9[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg93fooEv,_ZTv0_n12_N3gg93fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI3gg9[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3gg93fooEv,_ZTv0_n12_N3gg93fooEv),
+};
+extern VTBL_ENTRY _ZTV3gg9[];
+extern void _ZN3ee93fooEv();
+static  VTBL_ENTRY _tg__ZTV3ee9__3gg9[] = {
+  ABISELECT(40,28),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ee9[0]),
+  (VTBL_ENTRY)&_ZN3ee93fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ee93fooEv,_ZTv0_n12_N3ee93fooEv)();
+extern void ABISELECT(_ZThn40_N3ee93fooEv,_ZThn28_N3ee93fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3aa9__3ee9__3gg9[] = {
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI3ee9[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ee93fooEv,_ZTv0_n12_N3ee93fooEv),
+};
+extern void _ZN3ff93fooEv();
+static  VTBL_ENTRY _tg__ZTV3ff9__3gg9[] = {
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI3ff9[0]),
+  (VTBL_ENTRY)&_ZN3ff93fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N3ff93fooEv,_ZTv0_n12_N3ff93fooEv)();
+extern void ABISELECT(_ZThn40_N3ff93fooEv,_ZThn24_N3ff93fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV3dd9__3ff9__3gg9[] = {
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI3ff9[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N3ff93fooEv,_ZTv0_n12_N3ff93fooEv),
+};
+static  VTT_ENTRY vtt_gg9[] = {
+  {&(_ZTV3gg9[4]),  4,17},
+  {&(_tg__ZTV3ee9__3gg9[3]),  3,4},
+  {&(_tg__ZTV3aa9__3ee9__3gg9[3]),  3,4},
+  {&(_tg__ZTV3ff9__3gg9[3]),  3,4},
+  {&(_tg__ZTV3dd9__3ff9__3gg9[3]),  3,4},
+  {&(_ZTV3gg9[12]),  12,17},
+  {&(_ZTV3gg9[8]),  8,17},
+  {&(_ZTV3gg9[16]),  16,17},
+};
+extern VTBL_ENTRY _ZTI3gg9[];
+extern  VTBL_ENTRY _ZTV3gg9[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3gg9[];
+static VTBL_ENTRY alt_thunk_names22[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ff93fooEv,_ZTv0_n12_N3ff93fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3ff93fooEv,_ZThn24_N3ff93fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3ee93fooEv,_ZTv0_n12_N3ee93fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3ee93fooEv,_ZThn28_N3ee93fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N3gg93fooEv,_ZTv0_n12_N3gg93fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N3gg93fooEv,_ZThn36_N3gg93fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N3gg93fooEv,_ZThn28_N3gg93fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg9 = {  "gg9", // class name
+  bases_gg9, 6,
+  &(vtc_gg9[0]), // expected_vtbl_contents
+  &(vtt_gg9[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI3gg9),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3gg9),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3gg9),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names22,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa10  {
+  int a;
+   aa10(); // _ZN4aa10C1Ev
+  virtual void  foo(); // _ZN4aa103fooEv
+  ~aa10(); // tgen
+};
+//SIG(-1 aa10) C1{ v1 Fi}
+
+
+ aa10 ::aa10(){ note_ctor("aa10", this);}
+void  aa10 ::foo(){vfunc_called(this, "_ZN4aa103fooEv");}
+aa10 ::~aa10(){ note_dtor("aa10", this);} // tgen
+
+static void Test_aa10()
+{
+  extern Class_Descriptor cd_aa10;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa10, buf);
+    aa10 *dp, &lv = *(dp=new (buf) aa10());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa10)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa10)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa10.a");
+    test_class_info(&lv, &cd_aa10);
+    dp->~aa10();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa10(Test_aa10, "aa10", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa10C1Ev();
+extern void _ZN4aa10D1Ev();
+Name_Map name_map_aa10[] = {
+  NSPAIR(_ZN4aa10C1Ev),
+  NSPAIR(_ZN4aa10D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa10[];
+extern void _ZN4aa103fooEv();
+static  VTBL_ENTRY vtc_aa10[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa10[0]),
+  (VTBL_ENTRY)&_ZN4aa103fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa10[];
+extern  VTBL_ENTRY _ZTV4aa10[];
+Class_Descriptor cd_aa10 = {  "aa10", // class name
+  0,0,//no base classes
+  &(vtc_aa10[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa10),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa10),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  bb10  {
+  int b;
+   bb10(); // _ZN4bb10C1Ev
+  virtual void  foo(); // _ZN4bb103fooEv
+  ~bb10(); // tgen
+};
+//SIG(-1 bb10) C1{ v1 Fi}
+
+
+ bb10 ::bb10(){ note_ctor("bb10", this);}
+void  bb10 ::foo(){vfunc_called(this, "_ZN4bb103fooEv");}
+bb10 ::~bb10(){ note_dtor("bb10", this);} // tgen
+
+static void Test_bb10()
+{
+  extern Class_Descriptor cd_bb10;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb10, buf);
+    bb10 *dp, &lv = *(dp=new (buf) bb10());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb10)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb10)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb10.b");
+    test_class_info(&lv, &cd_bb10);
+    dp->~bb10();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb10(Test_bb10, "bb10", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb10C1Ev();
+extern void _ZN4bb10D1Ev();
+Name_Map name_map_bb10[] = {
+  NSPAIR(_ZN4bb10C1Ev),
+  NSPAIR(_ZN4bb10D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb10[];
+extern void _ZN4bb103fooEv();
+static  VTBL_ENTRY vtc_bb10[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb10[0]),
+  (VTBL_ENTRY)&_ZN4bb103fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb10[];
+extern  VTBL_ENTRY _ZTV4bb10[];
+Class_Descriptor cd_bb10 = {  "bb10", // class name
+  0,0,//no base classes
+  &(vtc_bb10[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb10),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb10),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  cc10  {
+  int c;
+   cc10(); // _ZN4cc10C1Ev
+  virtual void  foo(); // _ZN4cc103fooEv
+  ~cc10(); // tgen
+};
+//SIG(-1 cc10) C1{ v1 Fi}
+
+
+ cc10 ::cc10(){ note_ctor("cc10", this);}
+void  cc10 ::foo(){vfunc_called(this, "_ZN4cc103fooEv");}
+cc10 ::~cc10(){ note_dtor("cc10", this);} // tgen
+
+static void Test_cc10()
+{
+  extern Class_Descriptor cd_cc10;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc10, buf);
+    cc10 *dp, &lv = *(dp=new (buf) cc10());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc10)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc10)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc10.c");
+    test_class_info(&lv, &cd_cc10);
+    dp->~cc10();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc10(Test_cc10, "cc10", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc10C1Ev();
+extern void _ZN4cc10D1Ev();
+Name_Map name_map_cc10[] = {
+  NSPAIR(_ZN4cc10C1Ev),
+  NSPAIR(_ZN4cc10D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc10[];
+extern void _ZN4cc103fooEv();
+static  VTBL_ENTRY vtc_cc10[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc10[0]),
+  (VTBL_ENTRY)&_ZN4cc103fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc10[];
+extern  VTBL_ENTRY _ZTV4cc10[];
+Class_Descriptor cd_cc10 = {  "cc10", // class name
+  0,0,//no base classes
+  &(vtc_cc10[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc10),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc10),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  dd10  {
+  int d;
+   dd10(); // _ZN4dd10C1Ev
+  virtual void  foo(); // _ZN4dd103fooEv
+  ~dd10(); // tgen
+};
+//SIG(-1 dd10) C1{ v1 Fi}
+
+
+ dd10 ::dd10(){ note_ctor("dd10", this);}
+void  dd10 ::foo(){vfunc_called(this, "_ZN4dd103fooEv");}
+dd10 ::~dd10(){ note_dtor("dd10", this);} // tgen
+
+static void Test_dd10()
+{
+  extern Class_Descriptor cd_dd10;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd10, buf);
+    dd10 *dp, &lv = *(dp=new (buf) dd10());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd10)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd10)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd10.d");
+    test_class_info(&lv, &cd_dd10);
+    dp->~dd10();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd10(Test_dd10, "dd10", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd10C1Ev();
+extern void _ZN4dd10D1Ev();
+Name_Map name_map_dd10[] = {
+  NSPAIR(_ZN4dd10C1Ev),
+  NSPAIR(_ZN4dd10D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd10[];
+extern void _ZN4dd103fooEv();
+static  VTBL_ENTRY vtc_dd10[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd10[0]),
+  (VTBL_ENTRY)&_ZN4dd103fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd10[];
+extern  VTBL_ENTRY _ZTV4dd10[];
+Class_Descriptor cd_dd10 = {  "dd10", // class name
+  0,0,//no base classes
+  &(vtc_dd10[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd10),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd10),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  ee10  : aa10 , virtual bb10 {
+  int e;
+   ee10(const ABISELECT(__tsi64,int) *const *); // _ZN4ee10C2Ev
+  virtual void  foo(); // _ZN4ee103fooEv
+  ~ee10(); // tgen
+  ee10(); // tgen
+};
+//SIG(-1 ee10) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee10 ::ee10(const ABISELECT(__tsi64,int) *const *){}
+void  ee10 ::foo(){vfunc_called(this, "_ZN4ee103fooEv");}
+ee10 ::~ee10(){ note_dtor("ee10", this);} // tgen
+ee10 ::ee10(){ note_ctor("ee10", this);} // tgen
+
+static void Test_ee10()
+{
+  extern Class_Descriptor cd_ee10;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee10, buf);
+    ee10 *dp, &lv = *(dp=new (buf) ee10());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee10)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee10)");
+    check_base_class_offset(lv, (aa10*), 0, "ee10");
+    check_base_class_offset(lv, (bb10*), ABISELECT(16,12), "ee10");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee10.e");
+    test_class_info(&lv, &cd_ee10);
+    dp->~ee10();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee10(Test_ee10, "ee10", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee10C1Ev();
+extern void _ZN4ee10D1Ev();
+Name_Map name_map_ee10[] = {
+  NSPAIR(_ZN4ee10C1Ev),
+  NSPAIR(_ZN4ee10D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa10;
+extern VTBL_ENTRY _ZTI4aa10[];
+extern  VTBL_ENTRY _ZTV4aa10[];
+extern Class_Descriptor cd_bb10;
+extern VTBL_ENTRY _ZTI4bb10[];
+extern  VTBL_ENTRY _ZTV4bb10[];
+static Base_Class bases_ee10[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa10,    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},
+  {&cd_bb10,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee10[];
+extern void _ZN4ee103fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee103fooEv,_ZTv0_n12_N4ee103fooEv)();
+extern void ABISELECT(_ZThn16_N4ee103fooEv,_ZThn12_N4ee103fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee10[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee10[0]),
+  (VTBL_ENTRY)&_ZN4ee103fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee10[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee103fooEv,_ZTv0_n12_N4ee103fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee10[];
+static  VTT_ENTRY vtt_ee10[] = {
+  {&(_ZTV4ee10[3]),  3,8},
+  {&(_ZTV4ee10[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee10[];
+extern  VTBL_ENTRY _ZTV4ee10[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee10[];
+static VTBL_ENTRY alt_thunk_names23[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee103fooEv,_ZTv0_n12_N4ee103fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee103fooEv,_ZThn12_N4ee103fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee10 = {  "ee10", // class name
+  bases_ee10, 2,
+  &(vtc_ee10[0]), // expected_vtbl_contents
+  &(vtt_ee10[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee10),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee10),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee10),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names23,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff10  : cc10 , virtual dd10 {
+  int f;
+   ff10(const ABISELECT(__tsi64,int) *const *); // _ZN4ff10C2Ev
+  virtual void  foo(); // _ZN4ff103fooEv
+  ~ff10(); // tgen
+  ff10(); // tgen
+};
+//SIG(-1 ff10) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff10 ::ff10(const ABISELECT(__tsi64,int) *const *){}
+void  ff10 ::foo(){vfunc_called(this, "_ZN4ff103fooEv");}
+ff10 ::~ff10(){ note_dtor("ff10", this);} // tgen
+ff10 ::ff10(){ note_ctor("ff10", this);} // tgen
+
+static void Test_ff10()
+{
+  extern Class_Descriptor cd_ff10;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff10, buf);
+    ff10 *dp, &lv = *(dp=new (buf) ff10());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff10)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff10)");
+    check_base_class_offset(lv, (cc10*), 0, "ff10");
+    check_base_class_offset(lv, (dd10*), ABISELECT(16,12), "ff10");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff10.f");
+    test_class_info(&lv, &cd_ff10);
+    dp->~ff10();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff10(Test_ff10, "ff10", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff10C1Ev();
+extern void _ZN4ff10D1Ev();
+Name_Map name_map_ff10[] = {
+  NSPAIR(_ZN4ff10C1Ev),
+  NSPAIR(_ZN4ff10D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc10;
+extern VTBL_ENTRY _ZTI4cc10[];
+extern  VTBL_ENTRY _ZTV4cc10[];
+extern Class_Descriptor cd_dd10;
+extern VTBL_ENTRY _ZTI4dd10[];
+extern  VTBL_ENTRY _ZTV4dd10[];
+static Base_Class bases_ff10[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc10,    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},
+  {&cd_dd10,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff10[];
+extern void _ZN4ff103fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff103fooEv,_ZTv0_n12_N4ff103fooEv)();
+extern void ABISELECT(_ZThn16_N4ff103fooEv,_ZThn12_N4ff103fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff10[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff10[0]),
+  (VTBL_ENTRY)&_ZN4ff103fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff10[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff103fooEv,_ZTv0_n12_N4ff103fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff10[];
+static  VTT_ENTRY vtt_ff10[] = {
+  {&(_ZTV4ff10[3]),  3,8},
+  {&(_ZTV4ff10[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff10[];
+extern  VTBL_ENTRY _ZTV4ff10[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff10[];
+static VTBL_ENTRY alt_thunk_names24[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff103fooEv,_ZTv0_n12_N4ff103fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff103fooEv,_ZThn12_N4ff103fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff10 = {  "ff10", // class name
+  bases_ff10, 2,
+  &(vtc_ff10[0]), // expected_vtbl_contents
+  &(vtt_ff10[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff10),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff10),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff10),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names24,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg10  : ee10 , ff10 {
+  int g;
+   gg10(const ABISELECT(__tsi64,int) *const *); // _ZN4gg10C2Ev
+  virtual void  foo(); // _ZN4gg103fooEv
+  ~gg10(); // tgen
+  gg10(); // tgen
+};
+//SIG(1 gg10) C1{ BC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg10 ::gg10(const ABISELECT(__tsi64,int) *const *){}
+void  gg10 ::foo(){vfunc_called(this, "_ZN4gg103fooEv");}
+gg10 ::~gg10(){ note_dtor("gg10", this);} // tgen
+gg10 ::gg10(){ note_ctor("gg10", this);} // tgen
+
+static void Test_gg10()
+{
+  extern Class_Descriptor cd_gg10;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg10, buf);
+    gg10 *dp, &lv = *(dp=new (buf) gg10());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg10)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg10)");
+    check_base_class_offset(lv, (aa10*)(ee10*), 0, "gg10");
+    check_base_class_offset(lv, (bb10*)(ee10*), ABISELECT(40,28), "gg10");
+    check_base_class_offset(lv, (ee10*), 0, "gg10");
+    check_base_class_offset(lv, (cc10*)(ff10*), ABISELECT(16,12), "gg10");
+    check_base_class_offset(lv, (dd10*)(ff10*), ABISELECT(56,36), "gg10");
+    check_base_class_offset(lv, (ff10*), ABISELECT(16,12), "gg10");
+    check_field_offset(lv, g, ABISELECT(32,24), "gg10.g");
+    test_class_info(&lv, &cd_gg10);
+    dp->~gg10();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg10(Test_gg10, "gg10", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg10C1Ev();
+extern void _ZN4gg10D1Ev();
+Name_Map name_map_gg10[] = {
+  NSPAIR(_ZN4gg10C1Ev),
+  NSPAIR(_ZN4gg10D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa10;
+extern VTBL_ENTRY _ZTI4aa10[];
+extern  VTBL_ENTRY _ZTV4aa10[];
+extern Class_Descriptor cd_bb10;
+extern VTBL_ENTRY _ZTI4bb10[];
+extern  VTBL_ENTRY _ZTV4bb10[];
+extern Class_Descriptor cd_ee10;
+extern VTBL_ENTRY _ZTI4ee10[];
+extern  VTBL_ENTRY _ZTV4ee10[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee10[];
+extern Class_Descriptor cd_cc10;
+extern VTBL_ENTRY _ZTI4cc10[];
+extern  VTBL_ENTRY _ZTV4cc10[];
+extern Class_Descriptor cd_dd10;
+extern VTBL_ENTRY _ZTI4dd10[];
+extern  VTBL_ENTRY _ZTV4dd10[];
+extern Class_Descriptor cd_ff10;
+extern VTBL_ENTRY _ZTI4ff10[];
+extern  VTBL_ENTRY _ZTV4ff10[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff10[];
+static Base_Class bases_gg10[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa10,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb10,    ABISELECT(40,28), //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_ee10,    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
+    4, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc10,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd10,    ABISELECT(56,36), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff10,    ABISELECT(16,12), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg10[];
+extern void _ZN4gg103fooEv();
+extern void ABISELECT(_ZThn16_N4gg103fooEv,_ZThn12_N4gg103fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg103fooEv,_ZTv0_n12_N4gg103fooEv)();
+extern void ABISELECT(_ZThn40_N4gg103fooEv,_ZThn28_N4gg103fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg103fooEv,_ZTv0_n12_N4gg103fooEv)();
+extern void ABISELECT(_ZThn56_N4gg103fooEv,_ZThn36_N4gg103fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg10[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,28),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg10[0]),
+  (VTBL_ENTRY)&_ZN4gg103fooEv,
+  ABISELECT(40,24),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4gg10[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg103fooEv,_ZThn12_N4gg103fooEv),
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI4gg10[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg103fooEv,_ZTv0_n12_N4gg103fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg10[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg103fooEv,_ZTv0_n12_N4gg103fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg10[];
+extern void _ZN4ee103fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee10__4gg10[] = {
+  ABISELECT(40,28),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee10[0]),
+  (VTBL_ENTRY)&_ZN4ee103fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee103fooEv,_ZTv0_n12_N4ee103fooEv)();
+extern void ABISELECT(_ZThn40_N4ee103fooEv,_ZThn28_N4ee103fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb10__4ee10__4gg10[] = {
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI4ee10[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee103fooEv,_ZTv0_n12_N4ee103fooEv),
+};
+extern void _ZN4ff103fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff10__4gg10[] = {
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff10[0]),
+  (VTBL_ENTRY)&_ZN4ff103fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff103fooEv,_ZTv0_n12_N4ff103fooEv)();
+extern void ABISELECT(_ZThn40_N4ff103fooEv,_ZThn24_N4ff103fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd10__4ff10__4gg10[] = {
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4ff10[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff103fooEv,_ZTv0_n12_N4ff103fooEv),
+};
+static  VTT_ENTRY vtt_gg10[] = {
+  {&(_ZTV4gg10[4]),  4,17},
+  {&(_tg__ZTV4ee10__4gg10[3]),  3,4},
+  {&(_tg__ZTV4bb10__4ee10__4gg10[3]),  3,4},
+  {&(_tg__ZTV4ff10__4gg10[3]),  3,4},
+  {&(_tg__ZTV4dd10__4ff10__4gg10[3]),  3,4},
+  {&(_ZTV4gg10[12]),  12,17},
+  {&(_ZTV4gg10[8]),  8,17},
+  {&(_ZTV4gg10[16]),  16,17},
+};
+extern VTBL_ENTRY _ZTI4gg10[];
+extern  VTBL_ENTRY _ZTV4gg10[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg10[];
+static VTBL_ENTRY alt_thunk_names25[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff103fooEv,_ZTv0_n12_N4ff103fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4ff103fooEv,_ZThn24_N4ff103fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee103fooEv,_ZTv0_n12_N4ee103fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4ee103fooEv,_ZThn28_N4ee103fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg103fooEv,_ZTv0_n12_N4gg103fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg103fooEv,_ZThn36_N4gg103fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg103fooEv,_ZThn28_N4gg103fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg10 = {  "gg10", // class name
+  bases_gg10, 6,
+  &(vtc_gg10[0]), // expected_vtbl_contents
+  &(vtt_gg10[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg10),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg10),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg10),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names25,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa11  {
+  int a;
+   aa11(); // _ZN4aa11C1Ev
+  virtual void  foo(); // _ZN4aa113fooEv
+  ~aa11(); // tgen
+};
+//SIG(-1 aa11) C1{ v1 Fi}
+
+
+ aa11 ::aa11(){ note_ctor("aa11", this);}
+void  aa11 ::foo(){vfunc_called(this, "_ZN4aa113fooEv");}
+aa11 ::~aa11(){ note_dtor("aa11", this);} // tgen
+
+static void Test_aa11()
+{
+  extern Class_Descriptor cd_aa11;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa11, buf);
+    aa11 *dp, &lv = *(dp=new (buf) aa11());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa11)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa11)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa11.a");
+    test_class_info(&lv, &cd_aa11);
+    dp->~aa11();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa11(Test_aa11, "aa11", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa11C1Ev();
+extern void _ZN4aa11D1Ev();
+Name_Map name_map_aa11[] = {
+  NSPAIR(_ZN4aa11C1Ev),
+  NSPAIR(_ZN4aa11D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa11[];
+extern void _ZN4aa113fooEv();
+static  VTBL_ENTRY vtc_aa11[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa11[0]),
+  (VTBL_ENTRY)&_ZN4aa113fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa11[];
+extern  VTBL_ENTRY _ZTV4aa11[];
+Class_Descriptor cd_aa11 = {  "aa11", // class name
+  0,0,//no base classes
+  &(vtc_aa11[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa11),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa11),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  bb11  {
+  int b;
+   bb11(); // _ZN4bb11C1Ev
+  virtual void  foo(); // _ZN4bb113fooEv
+  ~bb11(); // tgen
+};
+//SIG(-1 bb11) C1{ v1 Fi}
+
+
+ bb11 ::bb11(){ note_ctor("bb11", this);}
+void  bb11 ::foo(){vfunc_called(this, "_ZN4bb113fooEv");}
+bb11 ::~bb11(){ note_dtor("bb11", this);} // tgen
+
+static void Test_bb11()
+{
+  extern Class_Descriptor cd_bb11;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb11, buf);
+    bb11 *dp, &lv = *(dp=new (buf) bb11());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb11)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb11)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb11.b");
+    test_class_info(&lv, &cd_bb11);
+    dp->~bb11();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb11(Test_bb11, "bb11", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb11C1Ev();
+extern void _ZN4bb11D1Ev();
+Name_Map name_map_bb11[] = {
+  NSPAIR(_ZN4bb11C1Ev),
+  NSPAIR(_ZN4bb11D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb11[];
+extern void _ZN4bb113fooEv();
+static  VTBL_ENTRY vtc_bb11[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb11[0]),
+  (VTBL_ENTRY)&_ZN4bb113fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb11[];
+extern  VTBL_ENTRY _ZTV4bb11[];
+Class_Descriptor cd_bb11 = {  "bb11", // class name
+  0,0,//no base classes
+  &(vtc_bb11[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb11),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb11),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  cc11  {
+  int c;
+   cc11(); // _ZN4cc11C1Ev
+  virtual void  foo(); // _ZN4cc113fooEv
+  ~cc11(); // tgen
+};
+//SIG(-1 cc11) C1{ v1 Fi}
+
+
+ cc11 ::cc11(){ note_ctor("cc11", this);}
+void  cc11 ::foo(){vfunc_called(this, "_ZN4cc113fooEv");}
+cc11 ::~cc11(){ note_dtor("cc11", this);} // tgen
+
+static void Test_cc11()
+{
+  extern Class_Descriptor cd_cc11;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc11, buf);
+    cc11 *dp, &lv = *(dp=new (buf) cc11());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc11)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc11)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc11.c");
+    test_class_info(&lv, &cd_cc11);
+    dp->~cc11();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc11(Test_cc11, "cc11", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc11C1Ev();
+extern void _ZN4cc11D1Ev();
+Name_Map name_map_cc11[] = {
+  NSPAIR(_ZN4cc11C1Ev),
+  NSPAIR(_ZN4cc11D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc11[];
+extern void _ZN4cc113fooEv();
+static  VTBL_ENTRY vtc_cc11[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc11[0]),
+  (VTBL_ENTRY)&_ZN4cc113fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc11[];
+extern  VTBL_ENTRY _ZTV4cc11[];
+Class_Descriptor cd_cc11 = {  "cc11", // class name
+  0,0,//no base classes
+  &(vtc_cc11[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc11),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc11),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  dd11  {
+  int d;
+   dd11(); // _ZN4dd11C1Ev
+  virtual void  foo(); // _ZN4dd113fooEv
+  ~dd11(); // tgen
+};
+//SIG(-1 dd11) C1{ v1 Fi}
+
+
+ dd11 ::dd11(){ note_ctor("dd11", this);}
+void  dd11 ::foo(){vfunc_called(this, "_ZN4dd113fooEv");}
+dd11 ::~dd11(){ note_dtor("dd11", this);} // tgen
+
+static void Test_dd11()
+{
+  extern Class_Descriptor cd_dd11;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd11, buf);
+    dd11 *dp, &lv = *(dp=new (buf) dd11());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd11)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd11)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd11.d");
+    test_class_info(&lv, &cd_dd11);
+    dp->~dd11();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd11(Test_dd11, "dd11", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd11C1Ev();
+extern void _ZN4dd11D1Ev();
+Name_Map name_map_dd11[] = {
+  NSPAIR(_ZN4dd11C1Ev),
+  NSPAIR(_ZN4dd11D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd11[];
+extern void _ZN4dd113fooEv();
+static  VTBL_ENTRY vtc_dd11[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd11[0]),
+  (VTBL_ENTRY)&_ZN4dd113fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd11[];
+extern  VTBL_ENTRY _ZTV4dd11[];
+Class_Descriptor cd_dd11 = {  "dd11", // class name
+  0,0,//no base classes
+  &(vtc_dd11[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd11),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd11),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  ee11  : virtual aa11 , virtual bb11 {
+  int e;
+   ee11(const ABISELECT(__tsi64,int) *const *); // _ZN4ee11C2Ev
+  virtual void  foo(); // _ZN4ee113fooEv
+  ~ee11(); // tgen
+  ee11(); // tgen
+};
+//SIG(-1 ee11) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee11 ::ee11(const ABISELECT(__tsi64,int) *const *){}
+void  ee11 ::foo(){vfunc_called(this, "_ZN4ee113fooEv");}
+ee11 ::~ee11(){ note_dtor("ee11", this);} // tgen
+ee11 ::ee11(){ note_ctor("ee11", this);} // tgen
+
+static void Test_ee11()
+{
+  extern Class_Descriptor cd_ee11;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee11, buf);
+    ee11 *dp, &lv = *(dp=new (buf) ee11());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee11)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee11)");
+    check_base_class_offset(lv, (aa11*), ABISELECT(16,8), "ee11");
+    check_base_class_offset(lv, (bb11*), ABISELECT(32,16), "ee11");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee11.e");
+    test_class_info(&lv, &cd_ee11);
+    dp->~ee11();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee11(Test_ee11, "ee11", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ee11C1Ev();
+extern void _ZN4ee11D1Ev();
+Name_Map name_map_ee11[] = {
+  NSPAIR(_ZN4ee11C1Ev),
+  NSPAIR(_ZN4ee11D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa11;
+extern VTBL_ENTRY _ZTI4aa11[];
+extern  VTBL_ENTRY _ZTV4aa11[];
+extern Class_Descriptor cd_bb11;
+extern VTBL_ENTRY _ZTI4bb11[];
+extern  VTBL_ENTRY _ZTV4bb11[];
+static Base_Class bases_ee11[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa11,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb11,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee11[];
+extern void _ZN4ee113fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv)();
+extern void ABISELECT(_ZThn16_N4ee113fooEv,_ZThn8_N4ee113fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv)();
+extern void ABISELECT(_ZThn32_N4ee113fooEv,_ZThn16_N4ee113fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee11[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee11[0]),
+  (VTBL_ENTRY)&_ZN4ee113fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee11[];
+static  VTT_ENTRY vtt_ee11[] = {
+  {&(_ZTV4ee11[4]),  4,13},
+  {&(_ZTV4ee11[8]),  8,13},
+  {&(_ZTV4ee11[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ee11[];
+extern  VTBL_ENTRY _ZTV4ee11[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee11[];
+static VTBL_ENTRY alt_thunk_names26[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee113fooEv,_ZThn16_N4ee113fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee113fooEv,_ZThn8_N4ee113fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee11 = {  "ee11", // class name
+  bases_ee11, 2,
+  &(vtc_ee11[0]), // expected_vtbl_contents
+  &(vtt_ee11[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ee11),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee11),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee11),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names26,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff11  : cc11 , virtual dd11 {
+  int f;
+   ff11(const ABISELECT(__tsi64,int) *const *); // _ZN4ff11C2Ev
+  virtual void  foo(); // _ZN4ff113fooEv
+  ~ff11(); // tgen
+  ff11(); // tgen
+};
+//SIG(-1 ff11) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff11 ::ff11(const ABISELECT(__tsi64,int) *const *){}
+void  ff11 ::foo(){vfunc_called(this, "_ZN4ff113fooEv");}
+ff11 ::~ff11(){ note_dtor("ff11", this);} // tgen
+ff11 ::ff11(){ note_ctor("ff11", this);} // tgen
+
+static void Test_ff11()
+{
+  extern Class_Descriptor cd_ff11;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff11, buf);
+    ff11 *dp, &lv = *(dp=new (buf) ff11());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff11)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff11)");
+    check_base_class_offset(lv, (cc11*), 0, "ff11");
+    check_base_class_offset(lv, (dd11*), ABISELECT(16,12), "ff11");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff11.f");
+    test_class_info(&lv, &cd_ff11);
+    dp->~ff11();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff11(Test_ff11, "ff11", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff11C1Ev();
+extern void _ZN4ff11D1Ev();
+Name_Map name_map_ff11[] = {
+  NSPAIR(_ZN4ff11C1Ev),
+  NSPAIR(_ZN4ff11D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc11;
+extern VTBL_ENTRY _ZTI4cc11[];
+extern  VTBL_ENTRY _ZTV4cc11[];
+extern Class_Descriptor cd_dd11;
+extern VTBL_ENTRY _ZTI4dd11[];
+extern  VTBL_ENTRY _ZTV4dd11[];
+static Base_Class bases_ff11[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc11,    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},
+  {&cd_dd11,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff11[];
+extern void _ZN4ff113fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff113fooEv,_ZTv0_n12_N4ff113fooEv)();
+extern void ABISELECT(_ZThn16_N4ff113fooEv,_ZThn12_N4ff113fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff11[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff11[0]),
+  (VTBL_ENTRY)&_ZN4ff113fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff113fooEv,_ZTv0_n12_N4ff113fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff11[];
+static  VTT_ENTRY vtt_ff11[] = {
+  {&(_ZTV4ff11[3]),  3,8},
+  {&(_ZTV4ff11[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff11[];
+extern  VTBL_ENTRY _ZTV4ff11[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff11[];
+static VTBL_ENTRY alt_thunk_names27[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff113fooEv,_ZTv0_n12_N4ff113fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff113fooEv,_ZThn12_N4ff113fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff11 = {  "ff11", // class name
+  bases_ff11, 2,
+  &(vtc_ff11[0]), // expected_vtbl_contents
+  &(vtt_ff11[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff11),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff11),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff11),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names27,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg11  : ee11 , ff11 {
+  int g;
+   gg11(const ABISELECT(__tsi64,int) *const *); // _ZN4gg11C2Ev
+  virtual void  foo(); // _ZN4gg113fooEv
+  ~gg11(); // tgen
+  gg11(); // tgen
+};
+//SIG(1 gg11) C1{ BC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg11 ::gg11(const ABISELECT(__tsi64,int) *const *){}
+void  gg11 ::foo(){vfunc_called(this, "_ZN4gg113fooEv");}
+gg11 ::~gg11(){ note_dtor("gg11", this);} // tgen
+gg11 ::gg11(){ note_ctor("gg11", this);} // tgen
+
+static void Test_gg11()
+{
+  extern Class_Descriptor cd_gg11;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(12,13)];
+    init_test(&cd_gg11, buf);
+    gg11 *dp, &lv = *(dp=new (buf) gg11());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(88,48), "sizeof(gg11)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg11)");
+    check_base_class_offset(lv, (aa11*)(ee11*), ABISELECT(40,24), "gg11");
+    check_base_class_offset(lv, (bb11*)(ee11*), ABISELECT(56,32), "gg11");
+    check_base_class_offset(lv, (ee11*), 0, "gg11");
+    check_base_class_offset(lv, (cc11*)(ff11*), ABISELECT(16,8), "gg11");
+    check_base_class_offset(lv, (dd11*)(ff11*), ABISELECT(72,40), "gg11");
+    check_base_class_offset(lv, (ff11*), ABISELECT(16,8), "gg11");
+    check_field_offset(lv, g, ABISELECT(32,20), "gg11.g");
+    test_class_info(&lv, &cd_gg11);
+    dp->~gg11();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg11(Test_gg11, "gg11", ABISELECT(88,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg11C1Ev();
+extern void _ZN4gg11D1Ev();
+Name_Map name_map_gg11[] = {
+  NSPAIR(_ZN4gg11C1Ev),
+  NSPAIR(_ZN4gg11D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa11;
+extern VTBL_ENTRY _ZTI4aa11[];
+extern  VTBL_ENTRY _ZTV4aa11[];
+extern Class_Descriptor cd_bb11;
+extern VTBL_ENTRY _ZTI4bb11[];
+extern  VTBL_ENTRY _ZTV4bb11[];
+extern Class_Descriptor cd_ee11;
+extern VTBL_ENTRY _ZTI4ee11[];
+extern  VTBL_ENTRY _ZTV4ee11[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee11[];
+extern Class_Descriptor cd_cc11;
+extern VTBL_ENTRY _ZTI4cc11[];
+extern  VTBL_ENTRY _ZTV4cc11[];
+extern Class_Descriptor cd_dd11;
+extern VTBL_ENTRY _ZTI4dd11[];
+extern  VTBL_ENTRY _ZTV4dd11[];
+extern Class_Descriptor cd_ff11;
+extern VTBL_ENTRY _ZTI4ff11[];
+extern  VTBL_ENTRY _ZTV4ff11[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff11[];
+static Base_Class bases_gg11[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa11,    ABISELECT(40,24), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb11,    ABISELECT(56,32), //bcp->offset
+    14, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee11,    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
+    4, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc11,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd11,    ABISELECT(72,40), //bcp->offset
+    18, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    10, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff11,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    9, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg11[];
+extern void _ZN4gg113fooEv();
+extern void ABISELECT(_ZThn16_N4gg113fooEv,_ZThn8_N4gg113fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg113fooEv,_ZTv0_n12_N4gg113fooEv)();
+extern void ABISELECT(_ZThn40_N4gg113fooEv,_ZThn24_N4gg113fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg113fooEv,_ZTv0_n12_N4gg113fooEv)();
+extern void ABISELECT(_ZThn56_N4gg113fooEv,_ZThn32_N4gg113fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg113fooEv,_ZTv0_n12_N4gg113fooEv)();
+extern void ABISELECT(_ZThn72_N4gg113fooEv,_ZThn40_N4gg113fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg11[] = {
+  ABISELECT(72,40),
+  ABISELECT(56,32),
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg11[0]),
+  (VTBL_ENTRY)&_ZN4gg113fooEv,
+  ABISELECT(56,32),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg113fooEv,_ZThn8_N4gg113fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg113fooEv,_ZTv0_n12_N4gg113fooEv),
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4gg11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg113fooEv,_ZTv0_n12_N4gg113fooEv),
+  ABISELECT(-72,-40),
+  ABISELECT(-72,-40),
+  (VTBL_ENTRY)&(_ZTI4gg11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg113fooEv,_ZTv0_n12_N4gg113fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg11[];
+extern void _ZN4ee113fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee11__4gg11[] = {
+  ABISELECT(56,32),
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee11[0]),
+  (VTBL_ENTRY)&_ZN4ee113fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv)();
+extern void ABISELECT(_ZThn40_N4ee113fooEv,_ZThn24_N4ee113fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa11__4ee11__4gg11[] = {
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4ee11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv)();
+extern void ABISELECT(_ZThn56_N4ee113fooEv,_ZThn32_N4ee113fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb11__4ee11__4gg11[] = {
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4ee11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv),
+};
+extern void _ZN4ff113fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff11__4gg11[] = {
+  ABISELECT(56,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff11[0]),
+  (VTBL_ENTRY)&_ZN4ff113fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff113fooEv,_ZTv0_n12_N4ff113fooEv)();
+extern void ABISELECT(_ZThn56_N4ff113fooEv,_ZThn32_N4ff113fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd11__4ff11__4gg11[] = {
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4ff11[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff113fooEv,_ZTv0_n12_N4ff113fooEv),
+};
+static  VTT_ENTRY vtt_gg11[] = {
+  {&(_ZTV4gg11[5]),  5,22},
+  {&(_tg__ZTV4ee11__4gg11[4]),  4,5},
+  {&(_tg__ZTV4aa11__4ee11__4gg11[3]),  3,4},
+  {&(_tg__ZTV4bb11__4ee11__4gg11[3]),  3,4},
+  {&(_tg__ZTV4ff11__4gg11[3]),  3,4},
+  {&(_tg__ZTV4dd11__4ff11__4gg11[3]),  3,4},
+  {&(_ZTV4gg11[13]),  13,22},
+  {&(_ZTV4gg11[17]),  17,22},
+  {&(_ZTV4gg11[9]),  9,22},
+  {&(_ZTV4gg11[21]),  21,22},
+};
+extern VTBL_ENTRY _ZTI4gg11[];
+extern  VTBL_ENTRY _ZTV4gg11[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg11[];
+static VTBL_ENTRY alt_thunk_names28[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff113fooEv,_ZTv0_n12_N4ff113fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4ff113fooEv,_ZThn32_N4ff113fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee113fooEv,_ZTv0_n12_N4ee113fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4ee113fooEv,_ZThn32_N4ee113fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4ee113fooEv,_ZThn24_N4ee113fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg113fooEv,_ZTv0_n12_N4gg113fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn72_N4gg113fooEv,_ZThn40_N4gg113fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg113fooEv,_ZThn32_N4gg113fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg113fooEv,_ZThn24_N4gg113fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg11 = {  "gg11", // class name
+  bases_gg11, 6,
+  &(vtc_gg11[0]), // expected_vtbl_contents
+  &(vtt_gg11[0]), // expected_vtt_contents
+  ABISELECT(88,48), // object size
+  NSPAIRA(_ZTI4gg11),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg11),22, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg11),10, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names28,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa12  {
+  int a;
+   aa12(); // _ZN4aa12C1Ev
+  virtual void  foo(); // _ZN4aa123fooEv
+  ~aa12(); // tgen
+};
+//SIG(-1 aa12) C1{ v1 Fi}
+
+
+ aa12 ::aa12(){ note_ctor("aa12", this);}
+void  aa12 ::foo(){vfunc_called(this, "_ZN4aa123fooEv");}
+aa12 ::~aa12(){ note_dtor("aa12", this);} // tgen
+
+static void Test_aa12()
+{
+  extern Class_Descriptor cd_aa12;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa12, buf);
+    aa12 *dp, &lv = *(dp=new (buf) aa12());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa12)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa12)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa12.a");
+    test_class_info(&lv, &cd_aa12);
+    dp->~aa12();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa12(Test_aa12, "aa12", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa12C1Ev();
+extern void _ZN4aa12D1Ev();
+Name_Map name_map_aa12[] = {
+  NSPAIR(_ZN4aa12C1Ev),
+  NSPAIR(_ZN4aa12D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa12[];
+extern void _ZN4aa123fooEv();
+static  VTBL_ENTRY vtc_aa12[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa12[0]),
+  (VTBL_ENTRY)&_ZN4aa123fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa12[];
+extern  VTBL_ENTRY _ZTV4aa12[];
+Class_Descriptor cd_aa12 = {  "aa12", // class name
+  0,0,//no base classes
+  &(vtc_aa12[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa12),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa12),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  bb12  {
+  int b;
+   bb12(); // _ZN4bb12C1Ev
+  virtual void  foo(); // _ZN4bb123fooEv
+  ~bb12(); // tgen
+};
+//SIG(-1 bb12) C1{ v1 Fi}
+
+
+ bb12 ::bb12(){ note_ctor("bb12", this);}
+void  bb12 ::foo(){vfunc_called(this, "_ZN4bb123fooEv");}
+bb12 ::~bb12(){ note_dtor("bb12", this);} // tgen
+
+static void Test_bb12()
+{
+  extern Class_Descriptor cd_bb12;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb12, buf);
+    bb12 *dp, &lv = *(dp=new (buf) bb12());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb12)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb12)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb12.b");
+    test_class_info(&lv, &cd_bb12);
+    dp->~bb12();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb12(Test_bb12, "bb12", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb12C1Ev();
+extern void _ZN4bb12D1Ev();
+Name_Map name_map_bb12[] = {
+  NSPAIR(_ZN4bb12C1Ev),
+  NSPAIR(_ZN4bb12D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb12[];
+extern void _ZN4bb123fooEv();
+static  VTBL_ENTRY vtc_bb12[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb12[0]),
+  (VTBL_ENTRY)&_ZN4bb123fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb12[];
+extern  VTBL_ENTRY _ZTV4bb12[];
+Class_Descriptor cd_bb12 = {  "bb12", // class name
+  0,0,//no base classes
+  &(vtc_bb12[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb12),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb12),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  cc12  {
+  int c;
+   cc12(); // _ZN4cc12C1Ev
+  virtual void  foo(); // _ZN4cc123fooEv
+  ~cc12(); // tgen
+};
+//SIG(-1 cc12) C1{ v1 Fi}
+
+
+ cc12 ::cc12(){ note_ctor("cc12", this);}
+void  cc12 ::foo(){vfunc_called(this, "_ZN4cc123fooEv");}
+cc12 ::~cc12(){ note_dtor("cc12", this);} // tgen
+
+static void Test_cc12()
+{
+  extern Class_Descriptor cd_cc12;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc12, buf);
+    cc12 *dp, &lv = *(dp=new (buf) cc12());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc12)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc12)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc12.c");
+    test_class_info(&lv, &cd_cc12);
+    dp->~cc12();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc12(Test_cc12, "cc12", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc12C1Ev();
+extern void _ZN4cc12D1Ev();
+Name_Map name_map_cc12[] = {
+  NSPAIR(_ZN4cc12C1Ev),
+  NSPAIR(_ZN4cc12D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc12[];
+extern void _ZN4cc123fooEv();
+static  VTBL_ENTRY vtc_cc12[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc12[0]),
+  (VTBL_ENTRY)&_ZN4cc123fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc12[];
+extern  VTBL_ENTRY _ZTV4cc12[];
+Class_Descriptor cd_cc12 = {  "cc12", // class name
+  0,0,//no base classes
+  &(vtc_cc12[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc12),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc12),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  dd12  {
+  int d;
+   dd12(); // _ZN4dd12C1Ev
+  virtual void  foo(); // _ZN4dd123fooEv
+  ~dd12(); // tgen
+};
+//SIG(-1 dd12) C1{ v1 Fi}
+
+
+ dd12 ::dd12(){ note_ctor("dd12", this);}
+void  dd12 ::foo(){vfunc_called(this, "_ZN4dd123fooEv");}
+dd12 ::~dd12(){ note_dtor("dd12", this);} // tgen
+
+static void Test_dd12()
+{
+  extern Class_Descriptor cd_dd12;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd12, buf);
+    dd12 *dp, &lv = *(dp=new (buf) dd12());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd12)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd12)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd12.d");
+    test_class_info(&lv, &cd_dd12);
+    dp->~dd12();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd12(Test_dd12, "dd12", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd12C1Ev();
+extern void _ZN4dd12D1Ev();
+Name_Map name_map_dd12[] = {
+  NSPAIR(_ZN4dd12C1Ev),
+  NSPAIR(_ZN4dd12D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd12[];
+extern void _ZN4dd123fooEv();
+static  VTBL_ENTRY vtc_dd12[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd12[0]),
+  (VTBL_ENTRY)&_ZN4dd123fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd12[];
+extern  VTBL_ENTRY _ZTV4dd12[];
+Class_Descriptor cd_dd12 = {  "dd12", // class name
+  0,0,//no base classes
+  &(vtc_dd12[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd12),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd12),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  ee12  : aa12 , bb12 {
+  int e;
+   ee12(); // _ZN4ee12C1Ev
+  virtual void  foo(); // _ZN4ee123fooEv
+  ~ee12(); // tgen
+};
+//SIG(-1 ee12) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee12 ::ee12(){ note_ctor("ee12", this);}
+void  ee12 ::foo(){vfunc_called(this, "_ZN4ee123fooEv");}
+ee12 ::~ee12(){ note_dtor("ee12", this);} // tgen
+
+static void Test_ee12()
+{
+  extern Class_Descriptor cd_ee12;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee12, buf);
+    ee12 *dp, &lv = *(dp=new (buf) ee12());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee12)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee12)");
+    check_base_class_offset(lv, (aa12*), 0, "ee12");
+    check_base_class_offset(lv, (bb12*), ABISELECT(16,8), "ee12");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee12.e");
+    test_class_info(&lv, &cd_ee12);
+    dp->~ee12();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee12(Test_ee12, "ee12", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee12C1Ev();
+extern void _ZN4ee12D1Ev();
+Name_Map name_map_ee12[] = {
+  NSPAIR(_ZN4ee12C1Ev),
+  NSPAIR(_ZN4ee12D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa12;
+extern VTBL_ENTRY _ZTI4aa12[];
+extern  VTBL_ENTRY _ZTV4aa12[];
+extern Class_Descriptor cd_bb12;
+extern VTBL_ENTRY _ZTI4bb12[];
+extern  VTBL_ENTRY _ZTV4bb12[];
+static Base_Class bases_ee12[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa12,    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},
+  {&cd_bb12,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ee12[];
+extern void _ZN4ee123fooEv();
+extern void ABISELECT(_ZThn16_N4ee123fooEv,_ZThn8_N4ee123fooEv)();
+static  VTBL_ENTRY vtc_ee12[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee12[0]),
+  (VTBL_ENTRY)&_ZN4ee123fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee12[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ee123fooEv,_ZThn8_N4ee123fooEv),
+};
+extern VTBL_ENTRY _ZTI4ee12[];
+extern  VTBL_ENTRY _ZTV4ee12[];
+Class_Descriptor cd_ee12 = {  "ee12", // class name
+  bases_ee12, 2,
+  &(vtc_ee12[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee12),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee12),6, //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  ff12  : virtual cc12 , virtual dd12 {
+  int f;
+   ff12(const ABISELECT(__tsi64,int) *const *); // _ZN4ff12C2Ev
+  virtual void  foo(); // _ZN4ff123fooEv
+  ~ff12(); // tgen
+  ff12(); // tgen
+};
+//SIG(-1 ff12) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff12 ::ff12(const ABISELECT(__tsi64,int) *const *){}
+void  ff12 ::foo(){vfunc_called(this, "_ZN4ff123fooEv");}
+ff12 ::~ff12(){ note_dtor("ff12", this);} // tgen
+ff12 ::ff12(){ note_ctor("ff12", this);} // tgen
+
+static void Test_ff12()
+{
+  extern Class_Descriptor cd_ff12;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ff12, buf);
+    ff12 *dp, &lv = *(dp=new (buf) ff12());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ff12)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff12)");
+    check_base_class_offset(lv, (cc12*), ABISELECT(16,8), "ff12");
+    check_base_class_offset(lv, (dd12*), ABISELECT(32,16), "ff12");
+    check_field_offset(lv, f, ABISELECT(8,4), "ff12.f");
+    test_class_info(&lv, &cd_ff12);
+    dp->~ff12();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff12(Test_ff12, "ff12", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ff12C1Ev();
+extern void _ZN4ff12D1Ev();
+Name_Map name_map_ff12[] = {
+  NSPAIR(_ZN4ff12C1Ev),
+  NSPAIR(_ZN4ff12D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc12;
+extern VTBL_ENTRY _ZTI4cc12[];
+extern  VTBL_ENTRY _ZTV4cc12[];
+extern Class_Descriptor cd_dd12;
+extern VTBL_ENTRY _ZTI4dd12[];
+extern  VTBL_ENTRY _ZTV4dd12[];
+static Base_Class bases_ff12[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc12,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd12,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff12[];
+extern void _ZN4ff123fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv)();
+extern void ABISELECT(_ZThn16_N4ff123fooEv,_ZThn8_N4ff123fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv)();
+extern void ABISELECT(_ZThn32_N4ff123fooEv,_ZThn16_N4ff123fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff12[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff12[0]),
+  (VTBL_ENTRY)&_ZN4ff123fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff12[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ff12[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff12[];
+static  VTT_ENTRY vtt_ff12[] = {
+  {&(_ZTV4ff12[4]),  4,13},
+  {&(_ZTV4ff12[8]),  8,13},
+  {&(_ZTV4ff12[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ff12[];
+extern  VTBL_ENTRY _ZTV4ff12[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff12[];
+static VTBL_ENTRY alt_thunk_names29[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff123fooEv,_ZThn16_N4ff123fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff123fooEv,_ZThn8_N4ff123fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff12 = {  "ff12", // class name
+  bases_ff12, 2,
+  &(vtc_ff12[0]), // expected_vtbl_contents
+  &(vtt_ff12[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ff12),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff12),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff12),3, //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  gg12  : ee12 , ff12 {
+  int g;
+   gg12(const ABISELECT(__tsi64,int) *const *); // _ZN4gg12C2Ev
+  virtual void  foo(); // _ZN4gg123fooEv
+  ~gg12(); // tgen
+  gg12(); // tgen
+};
+//SIG(1 gg12) C1{ BC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg12 ::gg12(const ABISELECT(__tsi64,int) *const *){}
+void  gg12 ::foo(){vfunc_called(this, "_ZN4gg123fooEv");}
+gg12 ::~gg12(){ note_dtor("gg12", this);} // tgen
+gg12 ::gg12(){ note_ctor("gg12", this);} // tgen
+
+static void Test_gg12()
+{
+  extern Class_Descriptor cd_gg12;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(11,13)];
+    init_test(&cd_gg12, buf);
+    gg12 *dp, &lv = *(dp=new (buf) gg12());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(80,48), "sizeof(gg12)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg12)");
+    check_base_class_offset(lv, (aa12*)(ee12*), 0, "gg12");
+    check_base_class_offset(lv, (bb12*)(ee12*), ABISELECT(16,8), "gg12");
+    check_base_class_offset(lv, (ee12*), 0, "gg12");
+    check_base_class_offset(lv, (cc12*)(ff12*), ABISELECT(48,32), "gg12");
+    check_base_class_offset(lv, (dd12*)(ff12*), ABISELECT(64,40), "gg12");
+    check_base_class_offset(lv, (ff12*), ABISELECT(32,20), "gg12");
+    check_field_offset(lv, g, ABISELECT(44,28), "gg12.g");
+    test_class_info(&lv, &cd_gg12);
+    dp->~gg12();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg12(Test_gg12, "gg12", ABISELECT(80,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg12C1Ev();
+extern void _ZN4gg12D1Ev();
+Name_Map name_map_gg12[] = {
+  NSPAIR(_ZN4gg12C1Ev),
+  NSPAIR(_ZN4gg12D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa12;
+extern VTBL_ENTRY _ZTI4aa12[];
+extern  VTBL_ENTRY _ZTV4aa12[];
+extern Class_Descriptor cd_bb12;
+extern VTBL_ENTRY _ZTI4bb12[];
+extern  VTBL_ENTRY _ZTV4bb12[];
+extern Class_Descriptor cd_ee12;
+extern VTBL_ENTRY _ZTI4ee12[];
+extern  VTBL_ENTRY _ZTV4ee12[];
+extern Class_Descriptor cd_cc12;
+extern VTBL_ENTRY _ZTI4cc12[];
+extern  VTBL_ENTRY _ZTV4cc12[];
+extern Class_Descriptor cd_dd12;
+extern VTBL_ENTRY _ZTI4dd12[];
+extern  VTBL_ENTRY _ZTV4dd12[];
+extern Class_Descriptor cd_ff12;
+extern VTBL_ENTRY _ZTI4ff12[];
+extern  VTBL_ENTRY _ZTV4ff12[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff12[];
+static Base_Class bases_gg12[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa12,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb12,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee12,    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
+    5, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc12,    ABISELECT(48,32), //bcp->offset
+    13, //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
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd12,    ABISELECT(64,40), //bcp->offset
+    17, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff12,    ABISELECT(32,20), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    2, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg12[];
+extern void _ZN4gg123fooEv();
+extern void ABISELECT(_ZThn16_N4gg123fooEv,_ZThn8_N4gg123fooEv)();
+extern void ABISELECT(_ZThn32_N4gg123fooEv,_ZThn20_N4gg123fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg123fooEv,_ZTv0_n12_N4gg123fooEv)();
+extern void ABISELECT(_ZThn48_N4gg123fooEv,_ZThn32_N4gg123fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg123fooEv,_ZTv0_n12_N4gg123fooEv)();
+extern void ABISELECT(_ZThn64_N4gg123fooEv,_ZThn40_N4gg123fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg12[] = {
+  ABISELECT(64,40),
+  ABISELECT(48,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg12[0]),
+  (VTBL_ENTRY)&_ZN4gg123fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg12[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg123fooEv,_ZThn8_N4gg123fooEv),
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4gg12[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn32_N4gg123fooEv,_ZThn20_N4gg123fooEv),
+  ABISELECT(-48,-32),
+  ABISELECT(-48,-32),
+  (VTBL_ENTRY)&(_ZTI4gg12[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg123fooEv,_ZTv0_n12_N4gg123fooEv),
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4gg12[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg123fooEv,_ZTv0_n12_N4gg123fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg12[];
+extern void _ZN4ff123fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff12__4gg12[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff12[0]),
+  (VTBL_ENTRY)&_ZN4ff123fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv)();
+extern void ABISELECT(_ZThn16_N4ff123fooEv,_ZThn12_N4ff123fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc12__4ff12__4gg12[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff12[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv)();
+extern void ABISELECT(_ZThn32_N4ff123fooEv,_ZThn20_N4ff123fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd12__4ff12__4gg12[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4ff12[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv),
+};
+static  VTT_ENTRY vtt_gg12[] = {
+  {&(_ZTV4gg12[4]),  4,21},
+  {&(_tg__ZTV4ff12__4gg12[4]),  4,5},
+  {&(_tg__ZTV4cc12__4ff12__4gg12[3]),  3,4},
+  {&(_tg__ZTV4dd12__4ff12__4gg12[3]),  3,4},
+  {&(_ZTV4gg12[12]),  12,21},
+  {&(_ZTV4gg12[16]),  16,21},
+  {&(_ZTV4gg12[20]),  20,21},
+};
+extern VTBL_ENTRY _ZTI4gg12[];
+extern  VTBL_ENTRY _ZTV4gg12[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg12[];
+static VTBL_ENTRY alt_thunk_names30[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff123fooEv,_ZTv0_n12_N4ff123fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff123fooEv,_ZThn20_N4ff123fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff123fooEv,_ZThn12_N4ff123fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg123fooEv,_ZTv0_n12_N4gg123fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4gg123fooEv,_ZThn40_N4gg123fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg123fooEv,_ZThn32_N4gg123fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg12 = {  "gg12", // class name
+  bases_gg12, 6,
+  &(vtc_gg12[0]), // expected_vtbl_contents
+  &(vtt_gg12[0]), // expected_vtt_contents
+  ABISELECT(80,48), // object size
+  NSPAIRA(_ZTI4gg12),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg12),21, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg12),7, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names30,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa13  {
+  int a;
+   aa13(); // _ZN4aa13C1Ev
+  virtual void  foo(); // _ZN4aa133fooEv
+  ~aa13(); // tgen
+};
+//SIG(-1 aa13) C1{ v1 Fi}
+
+
+ aa13 ::aa13(){ note_ctor("aa13", this);}
+void  aa13 ::foo(){vfunc_called(this, "_ZN4aa133fooEv");}
+aa13 ::~aa13(){ note_dtor("aa13", this);} // tgen
+
+static void Test_aa13()
+{
+  extern Class_Descriptor cd_aa13;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa13, buf);
+    aa13 *dp, &lv = *(dp=new (buf) aa13());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa13)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa13)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa13.a");
+    test_class_info(&lv, &cd_aa13);
+    dp->~aa13();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa13(Test_aa13, "aa13", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa13C1Ev();
+extern void _ZN4aa13D1Ev();
+Name_Map name_map_aa13[] = {
+  NSPAIR(_ZN4aa13C1Ev),
+  NSPAIR(_ZN4aa13D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa13[];
+extern void _ZN4aa133fooEv();
+static  VTBL_ENTRY vtc_aa13[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa13[0]),
+  (VTBL_ENTRY)&_ZN4aa133fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa13[];
+extern  VTBL_ENTRY _ZTV4aa13[];
+Class_Descriptor cd_aa13 = {  "aa13", // class name
+  0,0,//no base classes
+  &(vtc_aa13[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa13),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa13),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  bb13  {
+  int b;
+   bb13(); // _ZN4bb13C1Ev
+  virtual void  foo(); // _ZN4bb133fooEv
+  ~bb13(); // tgen
+};
+//SIG(-1 bb13) C1{ v1 Fi}
+
+
+ bb13 ::bb13(){ note_ctor("bb13", this);}
+void  bb13 ::foo(){vfunc_called(this, "_ZN4bb133fooEv");}
+bb13 ::~bb13(){ note_dtor("bb13", this);} // tgen
+
+static void Test_bb13()
+{
+  extern Class_Descriptor cd_bb13;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb13, buf);
+    bb13 *dp, &lv = *(dp=new (buf) bb13());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb13)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb13)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb13.b");
+    test_class_info(&lv, &cd_bb13);
+    dp->~bb13();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb13(Test_bb13, "bb13", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb13C1Ev();
+extern void _ZN4bb13D1Ev();
+Name_Map name_map_bb13[] = {
+  NSPAIR(_ZN4bb13C1Ev),
+  NSPAIR(_ZN4bb13D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb13[];
+extern void _ZN4bb133fooEv();
+static  VTBL_ENTRY vtc_bb13[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb13[0]),
+  (VTBL_ENTRY)&_ZN4bb133fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb13[];
+extern  VTBL_ENTRY _ZTV4bb13[];
+Class_Descriptor cd_bb13 = {  "bb13", // class name
+  0,0,//no base classes
+  &(vtc_bb13[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb13),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb13),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  cc13  {
+  int c;
+   cc13(); // _ZN4cc13C1Ev
+  virtual void  foo(); // _ZN4cc133fooEv
+  ~cc13(); // tgen
+};
+//SIG(-1 cc13) C1{ v1 Fi}
+
+
+ cc13 ::cc13(){ note_ctor("cc13", this);}
+void  cc13 ::foo(){vfunc_called(this, "_ZN4cc133fooEv");}
+cc13 ::~cc13(){ note_dtor("cc13", this);} // tgen
+
+static void Test_cc13()
+{
+  extern Class_Descriptor cd_cc13;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc13, buf);
+    cc13 *dp, &lv = *(dp=new (buf) cc13());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc13)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc13)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc13.c");
+    test_class_info(&lv, &cd_cc13);
+    dp->~cc13();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc13(Test_cc13, "cc13", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc13C1Ev();
+extern void _ZN4cc13D1Ev();
+Name_Map name_map_cc13[] = {
+  NSPAIR(_ZN4cc13C1Ev),
+  NSPAIR(_ZN4cc13D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc13[];
+extern void _ZN4cc133fooEv();
+static  VTBL_ENTRY vtc_cc13[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc13[0]),
+  (VTBL_ENTRY)&_ZN4cc133fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc13[];
+extern  VTBL_ENTRY _ZTV4cc13[];
+Class_Descriptor cd_cc13 = {  "cc13", // class name
+  0,0,//no base classes
+  &(vtc_cc13[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc13),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc13),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  dd13  {
+  int d;
+   dd13(); // _ZN4dd13C1Ev
+  virtual void  foo(); // _ZN4dd133fooEv
+  ~dd13(); // tgen
+};
+//SIG(-1 dd13) C1{ v1 Fi}
+
+
+ dd13 ::dd13(){ note_ctor("dd13", this);}
+void  dd13 ::foo(){vfunc_called(this, "_ZN4dd133fooEv");}
+dd13 ::~dd13(){ note_dtor("dd13", this);} // tgen
+
+static void Test_dd13()
+{
+  extern Class_Descriptor cd_dd13;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd13, buf);
+    dd13 *dp, &lv = *(dp=new (buf) dd13());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd13)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd13)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd13.d");
+    test_class_info(&lv, &cd_dd13);
+    dp->~dd13();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd13(Test_dd13, "dd13", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd13C1Ev();
+extern void _ZN4dd13D1Ev();
+Name_Map name_map_dd13[] = {
+  NSPAIR(_ZN4dd13C1Ev),
+  NSPAIR(_ZN4dd13D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd13[];
+extern void _ZN4dd133fooEv();
+static  VTBL_ENTRY vtc_dd13[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd13[0]),
+  (VTBL_ENTRY)&_ZN4dd133fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd13[];
+extern  VTBL_ENTRY _ZTV4dd13[];
+Class_Descriptor cd_dd13 = {  "dd13", // class name
+  0,0,//no base classes
+  &(vtc_dd13[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd13),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd13),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  ee13  : virtual aa13 , bb13 {
+  int e;
+   ee13(const ABISELECT(__tsi64,int) *const *); // _ZN4ee13C2Ev
+  virtual void  foo(); // _ZN4ee133fooEv
+  ~ee13(); // tgen
+  ee13(); // tgen
+};
+//SIG(-1 ee13) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee13 ::ee13(const ABISELECT(__tsi64,int) *const *){}
+void  ee13 ::foo(){vfunc_called(this, "_ZN4ee133fooEv");}
+ee13 ::~ee13(){ note_dtor("ee13", this);} // tgen
+ee13 ::ee13(){ note_ctor("ee13", this);} // tgen
+
+static void Test_ee13()
+{
+  extern Class_Descriptor cd_ee13;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee13, buf);
+    ee13 *dp, &lv = *(dp=new (buf) ee13());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee13)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee13)");
+    check_base_class_offset(lv, (aa13*), ABISELECT(16,12), "ee13");
+    check_base_class_offset(lv, (bb13*), 0, "ee13");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee13.e");
+    test_class_info(&lv, &cd_ee13);
+    dp->~ee13();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee13(Test_ee13, "ee13", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee13C1Ev();
+extern void _ZN4ee13D1Ev();
+Name_Map name_map_ee13[] = {
+  NSPAIR(_ZN4ee13C1Ev),
+  NSPAIR(_ZN4ee13D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa13;
+extern VTBL_ENTRY _ZTI4aa13[];
+extern  VTBL_ENTRY _ZTV4aa13[];
+extern Class_Descriptor cd_bb13;
+extern VTBL_ENTRY _ZTI4bb13[];
+extern  VTBL_ENTRY _ZTV4bb13[];
+static Base_Class bases_ee13[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa13,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb13,    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 _ZTI4ee13[];
+extern void _ZN4ee133fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee133fooEv,_ZTv0_n12_N4ee133fooEv)();
+extern void ABISELECT(_ZThn16_N4ee133fooEv,_ZThn12_N4ee133fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee13[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee13[0]),
+  (VTBL_ENTRY)&_ZN4ee133fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee133fooEv,_ZTv0_n12_N4ee133fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee13[];
+static  VTT_ENTRY vtt_ee13[] = {
+  {&(_ZTV4ee13[3]),  3,8},
+  {&(_ZTV4ee13[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee13[];
+extern  VTBL_ENTRY _ZTV4ee13[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee13[];
+static VTBL_ENTRY alt_thunk_names31[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee133fooEv,_ZTv0_n12_N4ee133fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee133fooEv,_ZThn12_N4ee133fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee13 = {  "ee13", // class name
+  bases_ee13, 2,
+  &(vtc_ee13[0]), // expected_vtbl_contents
+  &(vtt_ee13[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee13),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee13),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee13),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names31,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff13  : virtual cc13 , virtual dd13 {
+  int f;
+   ff13(const ABISELECT(__tsi64,int) *const *); // _ZN4ff13C2Ev
+  virtual void  foo(); // _ZN4ff133fooEv
+  ~ff13(); // tgen
+  ff13(); // tgen
+};
+//SIG(-1 ff13) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff13 ::ff13(const ABISELECT(__tsi64,int) *const *){}
+void  ff13 ::foo(){vfunc_called(this, "_ZN4ff133fooEv");}
+ff13 ::~ff13(){ note_dtor("ff13", this);} // tgen
+ff13 ::ff13(){ note_ctor("ff13", this);} // tgen
+
+static void Test_ff13()
+{
+  extern Class_Descriptor cd_ff13;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ff13, buf);
+    ff13 *dp, &lv = *(dp=new (buf) ff13());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ff13)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff13)");
+    check_base_class_offset(lv, (cc13*), ABISELECT(16,8), "ff13");
+    check_base_class_offset(lv, (dd13*), ABISELECT(32,16), "ff13");
+    check_field_offset(lv, f, ABISELECT(8,4), "ff13.f");
+    test_class_info(&lv, &cd_ff13);
+    dp->~ff13();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff13(Test_ff13, "ff13", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ff13C1Ev();
+extern void _ZN4ff13D1Ev();
+Name_Map name_map_ff13[] = {
+  NSPAIR(_ZN4ff13C1Ev),
+  NSPAIR(_ZN4ff13D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc13;
+extern VTBL_ENTRY _ZTI4cc13[];
+extern  VTBL_ENTRY _ZTV4cc13[];
+extern Class_Descriptor cd_dd13;
+extern VTBL_ENTRY _ZTI4dd13[];
+extern  VTBL_ENTRY _ZTV4dd13[];
+static Base_Class bases_ff13[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc13,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd13,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff13[];
+extern void _ZN4ff133fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv)();
+extern void ABISELECT(_ZThn16_N4ff133fooEv,_ZThn8_N4ff133fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv)();
+extern void ABISELECT(_ZThn32_N4ff133fooEv,_ZThn16_N4ff133fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff13[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff13[0]),
+  (VTBL_ENTRY)&_ZN4ff133fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ff13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff13[];
+static  VTT_ENTRY vtt_ff13[] = {
+  {&(_ZTV4ff13[4]),  4,13},
+  {&(_ZTV4ff13[8]),  8,13},
+  {&(_ZTV4ff13[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ff13[];
+extern  VTBL_ENTRY _ZTV4ff13[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff13[];
+static VTBL_ENTRY alt_thunk_names32[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff133fooEv,_ZThn16_N4ff133fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff133fooEv,_ZThn8_N4ff133fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff13 = {  "ff13", // class name
+  bases_ff13, 2,
+  &(vtc_ff13[0]), // expected_vtbl_contents
+  &(vtt_ff13[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ff13),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff13),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff13),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names32,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg13  : ee13 , ff13 {
+  int g;
+   gg13(const ABISELECT(__tsi64,int) *const *); // _ZN4gg13C2Ev
+  virtual void  foo(); // _ZN4gg133fooEv
+  ~gg13(); // tgen
+  gg13(); // tgen
+};
+//SIG(1 gg13) C1{ BC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg13 ::gg13(const ABISELECT(__tsi64,int) *const *){}
+void  gg13 ::foo(){vfunc_called(this, "_ZN4gg133fooEv");}
+gg13 ::~gg13(){ note_dtor("gg13", this);} // tgen
+gg13 ::gg13(){ note_ctor("gg13", this);} // tgen
+
+static void Test_gg13()
+{
+  extern Class_Descriptor cd_gg13;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(11,13)];
+    init_test(&cd_gg13, buf);
+    gg13 *dp, &lv = *(dp=new (buf) gg13());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(80,48), "sizeof(gg13)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg13)");
+    check_base_class_offset(lv, (aa13*)(ee13*), ABISELECT(32,24), "gg13");
+    check_base_class_offset(lv, (bb13*)(ee13*), 0, "gg13");
+    check_base_class_offset(lv, (ee13*), 0, "gg13");
+    check_base_class_offset(lv, (cc13*)(ff13*), ABISELECT(48,32), "gg13");
+    check_base_class_offset(lv, (dd13*)(ff13*), ABISELECT(64,40), "gg13");
+    check_base_class_offset(lv, (ff13*), ABISELECT(16,12), "gg13");
+    check_field_offset(lv, g, ABISELECT(28,20), "gg13.g");
+    test_class_info(&lv, &cd_gg13);
+    dp->~gg13();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg13(Test_gg13, "gg13", ABISELECT(80,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg13C1Ev();
+extern void _ZN4gg13D1Ev();
+Name_Map name_map_gg13[] = {
+  NSPAIR(_ZN4gg13C1Ev),
+  NSPAIR(_ZN4gg13D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa13;
+extern VTBL_ENTRY _ZTI4aa13[];
+extern  VTBL_ENTRY _ZTV4aa13[];
+extern Class_Descriptor cd_bb13;
+extern VTBL_ENTRY _ZTI4bb13[];
+extern  VTBL_ENTRY _ZTV4bb13[];
+extern Class_Descriptor cd_ee13;
+extern VTBL_ENTRY _ZTI4ee13[];
+extern  VTBL_ENTRY _ZTV4ee13[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee13[];
+extern Class_Descriptor cd_cc13;
+extern VTBL_ENTRY _ZTI4cc13[];
+extern  VTBL_ENTRY _ZTV4cc13[];
+extern Class_Descriptor cd_dd13;
+extern VTBL_ENTRY _ZTI4dd13[];
+extern  VTBL_ENTRY _ZTV4dd13[];
+extern Class_Descriptor cd_ff13;
+extern VTBL_ENTRY _ZTI4ff13[];
+extern  VTBL_ENTRY _ZTV4ff13[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff13[];
+static Base_Class bases_gg13[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa13,    ABISELECT(32,24), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb13,    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
+    4, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee13,    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
+    5, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc13,    ABISELECT(48,32), //bcp->offset
+    15, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    9, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd13,    ABISELECT(64,40), //bcp->offset
+    19, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    10, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff13,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg13[];
+extern void _ZN4gg133fooEv();
+extern void ABISELECT(_ZThn16_N4gg133fooEv,_ZThn12_N4gg133fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg133fooEv,_ZTv0_n12_N4gg133fooEv)();
+extern void ABISELECT(_ZThn32_N4gg133fooEv,_ZThn24_N4gg133fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg133fooEv,_ZTv0_n12_N4gg133fooEv)();
+extern void ABISELECT(_ZThn48_N4gg133fooEv,_ZThn32_N4gg133fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg133fooEv,_ZTv0_n12_N4gg133fooEv)();
+extern void ABISELECT(_ZThn64_N4gg133fooEv,_ZThn40_N4gg133fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg13[] = {
+  ABISELECT(64,40),
+  ABISELECT(48,32),
+  ABISELECT(32,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg13[0]),
+  (VTBL_ENTRY)&_ZN4gg133fooEv,
+  ABISELECT(48,28),
+  ABISELECT(32,20),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4gg13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg133fooEv,_ZThn12_N4gg133fooEv),
+  ABISELECT(-32,-24),
+  ABISELECT(-32,-24),
+  (VTBL_ENTRY)&(_ZTI4gg13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg133fooEv,_ZTv0_n12_N4gg133fooEv),
+  ABISELECT(-48,-32),
+  ABISELECT(-48,-32),
+  (VTBL_ENTRY)&(_ZTI4gg13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg133fooEv,_ZTv0_n12_N4gg133fooEv),
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4gg13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg133fooEv,_ZTv0_n12_N4gg133fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg13[];
+extern void _ZN4ee133fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee13__4gg13[] = {
+  ABISELECT(32,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee13[0]),
+  (VTBL_ENTRY)&_ZN4ee133fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee133fooEv,_ZTv0_n12_N4ee133fooEv)();
+extern void ABISELECT(_ZThn32_N4ee133fooEv,_ZThn24_N4ee133fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa13__4ee13__4gg13[] = {
+  ABISELECT(-32,-24),
+  ABISELECT(-32,-24),
+  (VTBL_ENTRY)&(_ZTI4ee13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee133fooEv,_ZTv0_n12_N4ee133fooEv),
+};
+extern void _ZN4ff133fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff13__4gg13[] = {
+  ABISELECT(48,28),
+  ABISELECT(32,20),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff13[0]),
+  (VTBL_ENTRY)&_ZN4ff133fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv)();
+extern void ABISELECT(_ZThn32_N4ff133fooEv,_ZThn20_N4ff133fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc13__4ff13__4gg13[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4ff13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv)();
+extern void ABISELECT(_ZThn48_N4ff133fooEv,_ZThn28_N4ff133fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd13__4ff13__4gg13[] = {
+  ABISELECT(-48,-28),
+  ABISELECT(-48,-28),
+  (VTBL_ENTRY)&(_ZTI4ff13[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv),
+};
+static  VTT_ENTRY vtt_gg13[] = {
+  {&(_ZTV4gg13[5]),  5,23},
+  {&(_tg__ZTV4ee13__4gg13[3]),  3,4},
+  {&(_tg__ZTV4aa13__4ee13__4gg13[3]),  3,4},
+  {&(_tg__ZTV4ff13__4gg13[4]),  4,5},
+  {&(_tg__ZTV4cc13__4ff13__4gg13[3]),  3,4},
+  {&(_tg__ZTV4dd13__4ff13__4gg13[3]),  3,4},
+  {&(_ZTV4gg13[14]),  14,23},
+  {&(_ZTV4gg13[10]),  10,23},
+  {&(_ZTV4gg13[18]),  18,23},
+  {&(_ZTV4gg13[22]),  22,23},
+};
+extern VTBL_ENTRY _ZTI4gg13[];
+extern  VTBL_ENTRY _ZTV4gg13[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg13[];
+static VTBL_ENTRY alt_thunk_names33[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff133fooEv,_ZTv0_n12_N4ff133fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4ff133fooEv,_ZThn28_N4ff133fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff133fooEv,_ZThn20_N4ff133fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee133fooEv,_ZTv0_n12_N4ee133fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee133fooEv,_ZThn24_N4ee133fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg133fooEv,_ZTv0_n12_N4gg133fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4gg133fooEv,_ZThn40_N4gg133fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg133fooEv,_ZThn32_N4gg133fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4gg133fooEv,_ZThn24_N4gg133fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg13 = {  "gg13", // class name
+  bases_gg13, 6,
+  &(vtc_gg13[0]), // expected_vtbl_contents
+  &(vtt_gg13[0]), // expected_vtt_contents
+  ABISELECT(80,48), // object size
+  NSPAIRA(_ZTI4gg13),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg13),23, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg13),10, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names33,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa14  {
+  int a;
+   aa14(); // _ZN4aa14C1Ev
+  virtual void  foo(); // _ZN4aa143fooEv
+  ~aa14(); // tgen
+};
+//SIG(-1 aa14) C1{ v1 Fi}
+
+
+ aa14 ::aa14(){ note_ctor("aa14", this);}
+void  aa14 ::foo(){vfunc_called(this, "_ZN4aa143fooEv");}
+aa14 ::~aa14(){ note_dtor("aa14", this);} // tgen
+
+static void Test_aa14()
+{
+  extern Class_Descriptor cd_aa14;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa14, buf);
+    aa14 *dp, &lv = *(dp=new (buf) aa14());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa14)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa14)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa14.a");
+    test_class_info(&lv, &cd_aa14);
+    dp->~aa14();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa14(Test_aa14, "aa14", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa14C1Ev();
+extern void _ZN4aa14D1Ev();
+Name_Map name_map_aa14[] = {
+  NSPAIR(_ZN4aa14C1Ev),
+  NSPAIR(_ZN4aa14D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa14[];
+extern void _ZN4aa143fooEv();
+static  VTBL_ENTRY vtc_aa14[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa14[0]),
+  (VTBL_ENTRY)&_ZN4aa143fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa14[];
+extern  VTBL_ENTRY _ZTV4aa14[];
+Class_Descriptor cd_aa14 = {  "aa14", // class name
+  0,0,//no base classes
+  &(vtc_aa14[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa14),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa14),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  bb14  {
+  int b;
+   bb14(); // _ZN4bb14C1Ev
+  virtual void  foo(); // _ZN4bb143fooEv
+  ~bb14(); // tgen
+};
+//SIG(-1 bb14) C1{ v1 Fi}
+
+
+ bb14 ::bb14(){ note_ctor("bb14", this);}
+void  bb14 ::foo(){vfunc_called(this, "_ZN4bb143fooEv");}
+bb14 ::~bb14(){ note_dtor("bb14", this);} // tgen
+
+static void Test_bb14()
+{
+  extern Class_Descriptor cd_bb14;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb14, buf);
+    bb14 *dp, &lv = *(dp=new (buf) bb14());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb14)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb14)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb14.b");
+    test_class_info(&lv, &cd_bb14);
+    dp->~bb14();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb14(Test_bb14, "bb14", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb14C1Ev();
+extern void _ZN4bb14D1Ev();
+Name_Map name_map_bb14[] = {
+  NSPAIR(_ZN4bb14C1Ev),
+  NSPAIR(_ZN4bb14D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb14[];
+extern void _ZN4bb143fooEv();
+static  VTBL_ENTRY vtc_bb14[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb14[0]),
+  (VTBL_ENTRY)&_ZN4bb143fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb14[];
+extern  VTBL_ENTRY _ZTV4bb14[];
+Class_Descriptor cd_bb14 = {  "bb14", // class name
+  0,0,//no base classes
+  &(vtc_bb14[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb14),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb14),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  cc14  {
+  int c;
+   cc14(); // _ZN4cc14C1Ev
+  virtual void  foo(); // _ZN4cc143fooEv
+  ~cc14(); // tgen
+};
+//SIG(-1 cc14) C1{ v1 Fi}
+
+
+ cc14 ::cc14(){ note_ctor("cc14", this);}
+void  cc14 ::foo(){vfunc_called(this, "_ZN4cc143fooEv");}
+cc14 ::~cc14(){ note_dtor("cc14", this);} // tgen
+
+static void Test_cc14()
+{
+  extern Class_Descriptor cd_cc14;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc14, buf);
+    cc14 *dp, &lv = *(dp=new (buf) cc14());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc14)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc14)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc14.c");
+    test_class_info(&lv, &cd_cc14);
+    dp->~cc14();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc14(Test_cc14, "cc14", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc14C1Ev();
+extern void _ZN4cc14D1Ev();
+Name_Map name_map_cc14[] = {
+  NSPAIR(_ZN4cc14C1Ev),
+  NSPAIR(_ZN4cc14D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc14[];
+extern void _ZN4cc143fooEv();
+static  VTBL_ENTRY vtc_cc14[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc14[0]),
+  (VTBL_ENTRY)&_ZN4cc143fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc14[];
+extern  VTBL_ENTRY _ZTV4cc14[];
+Class_Descriptor cd_cc14 = {  "cc14", // class name
+  0,0,//no base classes
+  &(vtc_cc14[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc14),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc14),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  dd14  {
+  int d;
+   dd14(); // _ZN4dd14C1Ev
+  virtual void  foo(); // _ZN4dd143fooEv
+  ~dd14(); // tgen
+};
+//SIG(-1 dd14) C1{ v1 Fi}
+
+
+ dd14 ::dd14(){ note_ctor("dd14", this);}
+void  dd14 ::foo(){vfunc_called(this, "_ZN4dd143fooEv");}
+dd14 ::~dd14(){ note_dtor("dd14", this);} // tgen
+
+static void Test_dd14()
+{
+  extern Class_Descriptor cd_dd14;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd14, buf);
+    dd14 *dp, &lv = *(dp=new (buf) dd14());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd14)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd14)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd14.d");
+    test_class_info(&lv, &cd_dd14);
+    dp->~dd14();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd14(Test_dd14, "dd14", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd14C1Ev();
+extern void _ZN4dd14D1Ev();
+Name_Map name_map_dd14[] = {
+  NSPAIR(_ZN4dd14C1Ev),
+  NSPAIR(_ZN4dd14D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd14[];
+extern void _ZN4dd143fooEv();
+static  VTBL_ENTRY vtc_dd14[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd14[0]),
+  (VTBL_ENTRY)&_ZN4dd143fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd14[];
+extern  VTBL_ENTRY _ZTV4dd14[];
+Class_Descriptor cd_dd14 = {  "dd14", // class name
+  0,0,//no base classes
+  &(vtc_dd14[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd14),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd14),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  ee14  : aa14 , virtual bb14 {
+  int e;
+   ee14(const ABISELECT(__tsi64,int) *const *); // _ZN4ee14C2Ev
+  virtual void  foo(); // _ZN4ee143fooEv
+  ~ee14(); // tgen
+  ee14(); // tgen
+};
+//SIG(-1 ee14) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee14 ::ee14(const ABISELECT(__tsi64,int) *const *){}
+void  ee14 ::foo(){vfunc_called(this, "_ZN4ee143fooEv");}
+ee14 ::~ee14(){ note_dtor("ee14", this);} // tgen
+ee14 ::ee14(){ note_ctor("ee14", this);} // tgen
+
+static void Test_ee14()
+{
+  extern Class_Descriptor cd_ee14;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee14, buf);
+    ee14 *dp, &lv = *(dp=new (buf) ee14());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee14)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee14)");
+    check_base_class_offset(lv, (aa14*), 0, "ee14");
+    check_base_class_offset(lv, (bb14*), ABISELECT(16,12), "ee14");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee14.e");
+    test_class_info(&lv, &cd_ee14);
+    dp->~ee14();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee14(Test_ee14, "ee14", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee14C1Ev();
+extern void _ZN4ee14D1Ev();
+Name_Map name_map_ee14[] = {
+  NSPAIR(_ZN4ee14C1Ev),
+  NSPAIR(_ZN4ee14D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa14;
+extern VTBL_ENTRY _ZTI4aa14[];
+extern  VTBL_ENTRY _ZTV4aa14[];
+extern Class_Descriptor cd_bb14;
+extern VTBL_ENTRY _ZTI4bb14[];
+extern  VTBL_ENTRY _ZTV4bb14[];
+static Base_Class bases_ee14[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa14,    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},
+  {&cd_bb14,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee14[];
+extern void _ZN4ee143fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee143fooEv,_ZTv0_n12_N4ee143fooEv)();
+extern void ABISELECT(_ZThn16_N4ee143fooEv,_ZThn12_N4ee143fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee14[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee14[0]),
+  (VTBL_ENTRY)&_ZN4ee143fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee143fooEv,_ZTv0_n12_N4ee143fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee14[];
+static  VTT_ENTRY vtt_ee14[] = {
+  {&(_ZTV4ee14[3]),  3,8},
+  {&(_ZTV4ee14[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee14[];
+extern  VTBL_ENTRY _ZTV4ee14[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee14[];
+static VTBL_ENTRY alt_thunk_names34[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee143fooEv,_ZTv0_n12_N4ee143fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee143fooEv,_ZThn12_N4ee143fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee14 = {  "ee14", // class name
+  bases_ee14, 2,
+  &(vtc_ee14[0]), // expected_vtbl_contents
+  &(vtt_ee14[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee14),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee14),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee14),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names34,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff14  : virtual cc14 , virtual dd14 {
+  int f;
+   ff14(const ABISELECT(__tsi64,int) *const *); // _ZN4ff14C2Ev
+  virtual void  foo(); // _ZN4ff143fooEv
+  ~ff14(); // tgen
+  ff14(); // tgen
+};
+//SIG(-1 ff14) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff14 ::ff14(const ABISELECT(__tsi64,int) *const *){}
+void  ff14 ::foo(){vfunc_called(this, "_ZN4ff143fooEv");}
+ff14 ::~ff14(){ note_dtor("ff14", this);} // tgen
+ff14 ::ff14(){ note_ctor("ff14", this);} // tgen
+
+static void Test_ff14()
+{
+  extern Class_Descriptor cd_ff14;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ff14, buf);
+    ff14 *dp, &lv = *(dp=new (buf) ff14());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ff14)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff14)");
+    check_base_class_offset(lv, (cc14*), ABISELECT(16,8), "ff14");
+    check_base_class_offset(lv, (dd14*), ABISELECT(32,16), "ff14");
+    check_field_offset(lv, f, ABISELECT(8,4), "ff14.f");
+    test_class_info(&lv, &cd_ff14);
+    dp->~ff14();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff14(Test_ff14, "ff14", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ff14C1Ev();
+extern void _ZN4ff14D1Ev();
+Name_Map name_map_ff14[] = {
+  NSPAIR(_ZN4ff14C1Ev),
+  NSPAIR(_ZN4ff14D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc14;
+extern VTBL_ENTRY _ZTI4cc14[];
+extern  VTBL_ENTRY _ZTV4cc14[];
+extern Class_Descriptor cd_dd14;
+extern VTBL_ENTRY _ZTI4dd14[];
+extern  VTBL_ENTRY _ZTV4dd14[];
+static Base_Class bases_ff14[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc14,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd14,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff14[];
+extern void _ZN4ff143fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv)();
+extern void ABISELECT(_ZThn16_N4ff143fooEv,_ZThn8_N4ff143fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv)();
+extern void ABISELECT(_ZThn32_N4ff143fooEv,_ZThn16_N4ff143fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff14[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff14[0]),
+  (VTBL_ENTRY)&_ZN4ff143fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ff14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff14[];
+static  VTT_ENTRY vtt_ff14[] = {
+  {&(_ZTV4ff14[4]),  4,13},
+  {&(_ZTV4ff14[8]),  8,13},
+  {&(_ZTV4ff14[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ff14[];
+extern  VTBL_ENTRY _ZTV4ff14[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff14[];
+static VTBL_ENTRY alt_thunk_names35[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff143fooEv,_ZThn16_N4ff143fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff143fooEv,_ZThn8_N4ff143fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff14 = {  "ff14", // class name
+  bases_ff14, 2,
+  &(vtc_ff14[0]), // expected_vtbl_contents
+  &(vtt_ff14[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ff14),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff14),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff14),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names35,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg14  : ee14 , ff14 {
+  int g;
+   gg14(const ABISELECT(__tsi64,int) *const *); // _ZN4gg14C2Ev
+  virtual void  foo(); // _ZN4gg143fooEv
+  ~gg14(); // tgen
+  gg14(); // tgen
+};
+//SIG(1 gg14) C1{ BC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg14 ::gg14(const ABISELECT(__tsi64,int) *const *){}
+void  gg14 ::foo(){vfunc_called(this, "_ZN4gg143fooEv");}
+gg14 ::~gg14(){ note_dtor("gg14", this);} // tgen
+gg14 ::gg14(){ note_ctor("gg14", this);} // tgen
+
+static void Test_gg14()
+{
+  extern Class_Descriptor cd_gg14;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(11,13)];
+    init_test(&cd_gg14, buf);
+    gg14 *dp, &lv = *(dp=new (buf) gg14());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(80,48), "sizeof(gg14)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg14)");
+    check_base_class_offset(lv, (aa14*)(ee14*), 0, "gg14");
+    check_base_class_offset(lv, (bb14*)(ee14*), ABISELECT(32,24), "gg14");
+    check_base_class_offset(lv, (ee14*), 0, "gg14");
+    check_base_class_offset(lv, (cc14*)(ff14*), ABISELECT(48,32), "gg14");
+    check_base_class_offset(lv, (dd14*)(ff14*), ABISELECT(64,40), "gg14");
+    check_base_class_offset(lv, (ff14*), ABISELECT(16,12), "gg14");
+    check_field_offset(lv, g, ABISELECT(28,20), "gg14.g");
+    test_class_info(&lv, &cd_gg14);
+    dp->~gg14();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg14(Test_gg14, "gg14", ABISELECT(80,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg14C1Ev();
+extern void _ZN4gg14D1Ev();
+Name_Map name_map_gg14[] = {
+  NSPAIR(_ZN4gg14C1Ev),
+  NSPAIR(_ZN4gg14D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa14;
+extern VTBL_ENTRY _ZTI4aa14[];
+extern  VTBL_ENTRY _ZTV4aa14[];
+extern Class_Descriptor cd_bb14;
+extern VTBL_ENTRY _ZTI4bb14[];
+extern  VTBL_ENTRY _ZTV4bb14[];
+extern Class_Descriptor cd_ee14;
+extern VTBL_ENTRY _ZTI4ee14[];
+extern  VTBL_ENTRY _ZTV4ee14[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee14[];
+extern Class_Descriptor cd_cc14;
+extern VTBL_ENTRY _ZTI4cc14[];
+extern  VTBL_ENTRY _ZTV4cc14[];
+extern Class_Descriptor cd_dd14;
+extern VTBL_ENTRY _ZTI4dd14[];
+extern  VTBL_ENTRY _ZTV4dd14[];
+extern Class_Descriptor cd_ff14;
+extern VTBL_ENTRY _ZTI4ff14[];
+extern  VTBL_ENTRY _ZTV4ff14[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff14[];
+static Base_Class bases_gg14[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa14,    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
+    4, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb14,    ABISELECT(32,24), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee14,    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
+    5, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc14,    ABISELECT(48,32), //bcp->offset
+    15, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    9, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd14,    ABISELECT(64,40), //bcp->offset
+    19, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    10, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff14,    ABISELECT(16,12), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    4, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg14[];
+extern void _ZN4gg143fooEv();
+extern void ABISELECT(_ZThn16_N4gg143fooEv,_ZThn12_N4gg143fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg143fooEv,_ZTv0_n12_N4gg143fooEv)();
+extern void ABISELECT(_ZThn32_N4gg143fooEv,_ZThn24_N4gg143fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg143fooEv,_ZTv0_n12_N4gg143fooEv)();
+extern void ABISELECT(_ZThn48_N4gg143fooEv,_ZThn32_N4gg143fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg143fooEv,_ZTv0_n12_N4gg143fooEv)();
+extern void ABISELECT(_ZThn64_N4gg143fooEv,_ZThn40_N4gg143fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg14[] = {
+  ABISELECT(64,40),
+  ABISELECT(48,32),
+  ABISELECT(32,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg14[0]),
+  (VTBL_ENTRY)&_ZN4gg143fooEv,
+  ABISELECT(48,28),
+  ABISELECT(32,20),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4gg14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg143fooEv,_ZThn12_N4gg143fooEv),
+  ABISELECT(-32,-24),
+  ABISELECT(-32,-24),
+  (VTBL_ENTRY)&(_ZTI4gg14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg143fooEv,_ZTv0_n12_N4gg143fooEv),
+  ABISELECT(-48,-32),
+  ABISELECT(-48,-32),
+  (VTBL_ENTRY)&(_ZTI4gg14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg143fooEv,_ZTv0_n12_N4gg143fooEv),
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4gg14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg143fooEv,_ZTv0_n12_N4gg143fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg14[];
+extern void _ZN4ee143fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee14__4gg14[] = {
+  ABISELECT(32,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee14[0]),
+  (VTBL_ENTRY)&_ZN4ee143fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee143fooEv,_ZTv0_n12_N4ee143fooEv)();
+extern void ABISELECT(_ZThn32_N4ee143fooEv,_ZThn24_N4ee143fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb14__4ee14__4gg14[] = {
+  ABISELECT(-32,-24),
+  ABISELECT(-32,-24),
+  (VTBL_ENTRY)&(_ZTI4ee14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee143fooEv,_ZTv0_n12_N4ee143fooEv),
+};
+extern void _ZN4ff143fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff14__4gg14[] = {
+  ABISELECT(48,28),
+  ABISELECT(32,20),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff14[0]),
+  (VTBL_ENTRY)&_ZN4ff143fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv)();
+extern void ABISELECT(_ZThn32_N4ff143fooEv,_ZThn20_N4ff143fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc14__4ff14__4gg14[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4ff14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv)();
+extern void ABISELECT(_ZThn48_N4ff143fooEv,_ZThn28_N4ff143fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd14__4ff14__4gg14[] = {
+  ABISELECT(-48,-28),
+  ABISELECT(-48,-28),
+  (VTBL_ENTRY)&(_ZTI4ff14[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv),
+};
+static  VTT_ENTRY vtt_gg14[] = {
+  {&(_ZTV4gg14[5]),  5,23},
+  {&(_tg__ZTV4ee14__4gg14[3]),  3,4},
+  {&(_tg__ZTV4bb14__4ee14__4gg14[3]),  3,4},
+  {&(_tg__ZTV4ff14__4gg14[4]),  4,5},
+  {&(_tg__ZTV4cc14__4ff14__4gg14[3]),  3,4},
+  {&(_tg__ZTV4dd14__4ff14__4gg14[3]),  3,4},
+  {&(_ZTV4gg14[14]),  14,23},
+  {&(_ZTV4gg14[10]),  10,23},
+  {&(_ZTV4gg14[18]),  18,23},
+  {&(_ZTV4gg14[22]),  22,23},
+};
+extern VTBL_ENTRY _ZTI4gg14[];
+extern  VTBL_ENTRY _ZTV4gg14[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg14[];
+static VTBL_ENTRY alt_thunk_names36[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff143fooEv,_ZTv0_n12_N4ff143fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4ff143fooEv,_ZThn28_N4ff143fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff143fooEv,_ZThn20_N4ff143fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee143fooEv,_ZTv0_n12_N4ee143fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee143fooEv,_ZThn24_N4ee143fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg143fooEv,_ZTv0_n12_N4gg143fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4gg143fooEv,_ZThn40_N4gg143fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg143fooEv,_ZThn32_N4gg143fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4gg143fooEv,_ZThn24_N4gg143fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg14 = {  "gg14", // class name
+  bases_gg14, 6,
+  &(vtc_gg14[0]), // expected_vtbl_contents
+  &(vtt_gg14[0]), // expected_vtt_contents
+  ABISELECT(80,48), // object size
+  NSPAIRA(_ZTI4gg14),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg14),23, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg14),10, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names36,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa15  {
+  int a;
+   aa15(); // _ZN4aa15C1Ev
+  virtual void  foo(); // _ZN4aa153fooEv
+  ~aa15(); // tgen
+};
+//SIG(-1 aa15) C1{ v1 Fi}
+
+
+ aa15 ::aa15(){ note_ctor("aa15", this);}
+void  aa15 ::foo(){vfunc_called(this, "_ZN4aa153fooEv");}
+aa15 ::~aa15(){ note_dtor("aa15", this);} // tgen
+
+static void Test_aa15()
+{
+  extern Class_Descriptor cd_aa15;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa15, buf);
+    aa15 *dp, &lv = *(dp=new (buf) aa15());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa15)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa15)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa15.a");
+    test_class_info(&lv, &cd_aa15);
+    dp->~aa15();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa15(Test_aa15, "aa15", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa15C1Ev();
+extern void _ZN4aa15D1Ev();
+Name_Map name_map_aa15[] = {
+  NSPAIR(_ZN4aa15C1Ev),
+  NSPAIR(_ZN4aa15D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa15[];
+extern void _ZN4aa153fooEv();
+static  VTBL_ENTRY vtc_aa15[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa15[0]),
+  (VTBL_ENTRY)&_ZN4aa153fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa15[];
+extern  VTBL_ENTRY _ZTV4aa15[];
+Class_Descriptor cd_aa15 = {  "aa15", // class name
+  0,0,//no base classes
+  &(vtc_aa15[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa15),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa15),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  bb15  {
+  int b;
+   bb15(); // _ZN4bb15C1Ev
+  virtual void  foo(); // _ZN4bb153fooEv
+  ~bb15(); // tgen
+};
+//SIG(-1 bb15) C1{ v1 Fi}
+
+
+ bb15 ::bb15(){ note_ctor("bb15", this);}
+void  bb15 ::foo(){vfunc_called(this, "_ZN4bb153fooEv");}
+bb15 ::~bb15(){ note_dtor("bb15", this);} // tgen
+
+static void Test_bb15()
+{
+  extern Class_Descriptor cd_bb15;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb15, buf);
+    bb15 *dp, &lv = *(dp=new (buf) bb15());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb15)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb15)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb15.b");
+    test_class_info(&lv, &cd_bb15);
+    dp->~bb15();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb15(Test_bb15, "bb15", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb15C1Ev();
+extern void _ZN4bb15D1Ev();
+Name_Map name_map_bb15[] = {
+  NSPAIR(_ZN4bb15C1Ev),
+  NSPAIR(_ZN4bb15D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb15[];
+extern void _ZN4bb153fooEv();
+static  VTBL_ENTRY vtc_bb15[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb15[0]),
+  (VTBL_ENTRY)&_ZN4bb153fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb15[];
+extern  VTBL_ENTRY _ZTV4bb15[];
+Class_Descriptor cd_bb15 = {  "bb15", // class name
+  0,0,//no base classes
+  &(vtc_bb15[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb15),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb15),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  cc15  {
+  int c;
+   cc15(); // _ZN4cc15C1Ev
+  virtual void  foo(); // _ZN4cc153fooEv
+  ~cc15(); // tgen
+};
+//SIG(-1 cc15) C1{ v1 Fi}
+
+
+ cc15 ::cc15(){ note_ctor("cc15", this);}
+void  cc15 ::foo(){vfunc_called(this, "_ZN4cc153fooEv");}
+cc15 ::~cc15(){ note_dtor("cc15", this);} // tgen
+
+static void Test_cc15()
+{
+  extern Class_Descriptor cd_cc15;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc15, buf);
+    cc15 *dp, &lv = *(dp=new (buf) cc15());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc15)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc15)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc15.c");
+    test_class_info(&lv, &cd_cc15);
+    dp->~cc15();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc15(Test_cc15, "cc15", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc15C1Ev();
+extern void _ZN4cc15D1Ev();
+Name_Map name_map_cc15[] = {
+  NSPAIR(_ZN4cc15C1Ev),
+  NSPAIR(_ZN4cc15D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc15[];
+extern void _ZN4cc153fooEv();
+static  VTBL_ENTRY vtc_cc15[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc15[0]),
+  (VTBL_ENTRY)&_ZN4cc153fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc15[];
+extern  VTBL_ENTRY _ZTV4cc15[];
+Class_Descriptor cd_cc15 = {  "cc15", // class name
+  0,0,//no base classes
+  &(vtc_cc15[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc15),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc15),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  dd15  {
+  int d;
+   dd15(); // _ZN4dd15C1Ev
+  virtual void  foo(); // _ZN4dd153fooEv
+  ~dd15(); // tgen
+};
+//SIG(-1 dd15) C1{ v1 Fi}
+
+
+ dd15 ::dd15(){ note_ctor("dd15", this);}
+void  dd15 ::foo(){vfunc_called(this, "_ZN4dd153fooEv");}
+dd15 ::~dd15(){ note_dtor("dd15", this);} // tgen
+
+static void Test_dd15()
+{
+  extern Class_Descriptor cd_dd15;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd15, buf);
+    dd15 *dp, &lv = *(dp=new (buf) dd15());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd15)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd15)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd15.d");
+    test_class_info(&lv, &cd_dd15);
+    dp->~dd15();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd15(Test_dd15, "dd15", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd15C1Ev();
+extern void _ZN4dd15D1Ev();
+Name_Map name_map_dd15[] = {
+  NSPAIR(_ZN4dd15C1Ev),
+  NSPAIR(_ZN4dd15D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd15[];
+extern void _ZN4dd153fooEv();
+static  VTBL_ENTRY vtc_dd15[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd15[0]),
+  (VTBL_ENTRY)&_ZN4dd153fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd15[];
+extern  VTBL_ENTRY _ZTV4dd15[];
+Class_Descriptor cd_dd15 = {  "dd15", // class name
+  0,0,//no base classes
+  &(vtc_dd15[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd15),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd15),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  ee15  : virtual aa15 , virtual bb15 {
+  int e;
+   ee15(const ABISELECT(__tsi64,int) *const *); // _ZN4ee15C2Ev
+  virtual void  foo(); // _ZN4ee153fooEv
+  ~ee15(); // tgen
+  ee15(); // tgen
+};
+//SIG(-1 ee15) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee15 ::ee15(const ABISELECT(__tsi64,int) *const *){}
+void  ee15 ::foo(){vfunc_called(this, "_ZN4ee153fooEv");}
+ee15 ::~ee15(){ note_dtor("ee15", this);} // tgen
+ee15 ::ee15(){ note_ctor("ee15", this);} // tgen
+
+static void Test_ee15()
+{
+  extern Class_Descriptor cd_ee15;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee15, buf);
+    ee15 *dp, &lv = *(dp=new (buf) ee15());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee15)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee15)");
+    check_base_class_offset(lv, (aa15*), ABISELECT(16,8), "ee15");
+    check_base_class_offset(lv, (bb15*), ABISELECT(32,16), "ee15");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee15.e");
+    test_class_info(&lv, &cd_ee15);
+    dp->~ee15();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee15(Test_ee15, "ee15", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ee15C1Ev();
+extern void _ZN4ee15D1Ev();
+Name_Map name_map_ee15[] = {
+  NSPAIR(_ZN4ee15C1Ev),
+  NSPAIR(_ZN4ee15D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa15;
+extern VTBL_ENTRY _ZTI4aa15[];
+extern  VTBL_ENTRY _ZTV4aa15[];
+extern Class_Descriptor cd_bb15;
+extern VTBL_ENTRY _ZTI4bb15[];
+extern  VTBL_ENTRY _ZTV4bb15[];
+static Base_Class bases_ee15[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa15,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb15,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee15[];
+extern void _ZN4ee153fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv)();
+extern void ABISELECT(_ZThn16_N4ee153fooEv,_ZThn8_N4ee153fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv)();
+extern void ABISELECT(_ZThn32_N4ee153fooEv,_ZThn16_N4ee153fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee15[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee15[0]),
+  (VTBL_ENTRY)&_ZN4ee153fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee15[];
+static  VTT_ENTRY vtt_ee15[] = {
+  {&(_ZTV4ee15[4]),  4,13},
+  {&(_ZTV4ee15[8]),  8,13},
+  {&(_ZTV4ee15[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ee15[];
+extern  VTBL_ENTRY _ZTV4ee15[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee15[];
+static VTBL_ENTRY alt_thunk_names37[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee153fooEv,_ZThn16_N4ee153fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee153fooEv,_ZThn8_N4ee153fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee15 = {  "ee15", // class name
+  bases_ee15, 2,
+  &(vtc_ee15[0]), // expected_vtbl_contents
+  &(vtt_ee15[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ee15),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee15),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee15),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names37,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff15  : virtual cc15 , virtual dd15 {
+  int f;
+   ff15(const ABISELECT(__tsi64,int) *const *); // _ZN4ff15C2Ev
+  virtual void  foo(); // _ZN4ff153fooEv
+  ~ff15(); // tgen
+  ff15(); // tgen
+};
+//SIG(-1 ff15) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff15 ::ff15(const ABISELECT(__tsi64,int) *const *){}
+void  ff15 ::foo(){vfunc_called(this, "_ZN4ff153fooEv");}
+ff15 ::~ff15(){ note_dtor("ff15", this);} // tgen
+ff15 ::ff15(){ note_ctor("ff15", this);} // tgen
+
+static void Test_ff15()
+{
+  extern Class_Descriptor cd_ff15;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ff15, buf);
+    ff15 *dp, &lv = *(dp=new (buf) ff15());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ff15)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff15)");
+    check_base_class_offset(lv, (cc15*), ABISELECT(16,8), "ff15");
+    check_base_class_offset(lv, (dd15*), ABISELECT(32,16), "ff15");
+    check_field_offset(lv, f, ABISELECT(8,4), "ff15.f");
+    test_class_info(&lv, &cd_ff15);
+    dp->~ff15();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff15(Test_ff15, "ff15", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ff15C1Ev();
+extern void _ZN4ff15D1Ev();
+Name_Map name_map_ff15[] = {
+  NSPAIR(_ZN4ff15C1Ev),
+  NSPAIR(_ZN4ff15D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc15;
+extern VTBL_ENTRY _ZTI4cc15[];
+extern  VTBL_ENTRY _ZTV4cc15[];
+extern Class_Descriptor cd_dd15;
+extern VTBL_ENTRY _ZTI4dd15[];
+extern  VTBL_ENTRY _ZTV4dd15[];
+static Base_Class bases_ff15[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc15,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd15,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff15[];
+extern void _ZN4ff153fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv)();
+extern void ABISELECT(_ZThn16_N4ff153fooEv,_ZThn8_N4ff153fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv)();
+extern void ABISELECT(_ZThn32_N4ff153fooEv,_ZThn16_N4ff153fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff15[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff15[0]),
+  (VTBL_ENTRY)&_ZN4ff153fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ff15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff15[];
+static  VTT_ENTRY vtt_ff15[] = {
+  {&(_ZTV4ff15[4]),  4,13},
+  {&(_ZTV4ff15[8]),  8,13},
+  {&(_ZTV4ff15[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ff15[];
+extern  VTBL_ENTRY _ZTV4ff15[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff15[];
+static VTBL_ENTRY alt_thunk_names38[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff153fooEv,_ZThn16_N4ff153fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff153fooEv,_ZThn8_N4ff153fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff15 = {  "ff15", // class name
+  bases_ff15, 2,
+  &(vtc_ff15[0]), // expected_vtbl_contents
+  &(vtt_ff15[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ff15),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff15),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff15),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names38,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg15  : ee15 , ff15 {
+  int g;
+   gg15(const ABISELECT(__tsi64,int) *const *); // _ZN4gg15C2Ev
+  virtual void  foo(); // _ZN4gg153fooEv
+  ~gg15(); // tgen
+  gg15(); // tgen
+};
+//SIG(1 gg15) C1{ BC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg15 ::gg15(const ABISELECT(__tsi64,int) *const *){}
+void  gg15 ::foo(){vfunc_called(this, "_ZN4gg153fooEv");}
+gg15 ::~gg15(){ note_dtor("gg15", this);} // tgen
+gg15 ::gg15(){ note_ctor("gg15", this);} // tgen
+
+static void Test_gg15()
+{
+  extern Class_Descriptor cd_gg15;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(13,14)];
+    init_test(&cd_gg15, buf);
+    gg15 *dp, &lv = *(dp=new (buf) gg15());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(96,52), "sizeof(gg15)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg15)");
+    check_base_class_offset(lv, (aa15*)(ee15*), ABISELECT(32,20), "gg15");
+    check_base_class_offset(lv, (bb15*)(ee15*), ABISELECT(48,28), "gg15");
+    check_base_class_offset(lv, (ee15*), 0, "gg15");
+    check_base_class_offset(lv, (cc15*)(ff15*), ABISELECT(64,36), "gg15");
+    check_base_class_offset(lv, (dd15*)(ff15*), ABISELECT(80,44), "gg15");
+    check_base_class_offset(lv, (ff15*), ABISELECT(16,8), "gg15");
+    check_field_offset(lv, g, ABISELECT(28,16), "gg15.g");
+    test_class_info(&lv, &cd_gg15);
+    dp->~gg15();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg15(Test_gg15, "gg15", ABISELECT(96,52));
+
+#else // __cplusplus
+
+extern void _ZN4gg15C1Ev();
+extern void _ZN4gg15D1Ev();
+Name_Map name_map_gg15[] = {
+  NSPAIR(_ZN4gg15C1Ev),
+  NSPAIR(_ZN4gg15D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa15;
+extern VTBL_ENTRY _ZTI4aa15[];
+extern  VTBL_ENTRY _ZTV4aa15[];
+extern Class_Descriptor cd_bb15;
+extern VTBL_ENTRY _ZTI4bb15[];
+extern  VTBL_ENTRY _ZTV4bb15[];
+extern Class_Descriptor cd_ee15;
+extern VTBL_ENTRY _ZTI4ee15[];
+extern  VTBL_ENTRY _ZTV4ee15[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee15[];
+extern Class_Descriptor cd_cc15;
+extern VTBL_ENTRY _ZTI4cc15[];
+extern  VTBL_ENTRY _ZTV4cc15[];
+extern Class_Descriptor cd_dd15;
+extern VTBL_ENTRY _ZTI4dd15[];
+extern  VTBL_ENTRY _ZTV4dd15[];
+extern Class_Descriptor cd_ff15;
+extern VTBL_ENTRY _ZTI4ff15[];
+extern  VTBL_ENTRY _ZTV4ff15[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff15[];
+static Base_Class bases_gg15[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa15,    ABISELECT(32,20), //bcp->offset
+    12, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb15,    ABISELECT(48,28), //bcp->offset
+    16, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    9, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee15,    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
+    5, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc15,    ABISELECT(64,36), //bcp->offset
+    20, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    11, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd15,    ABISELECT(80,44), //bcp->offset
+    24, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    12, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff15,    ABISELECT(16,8), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    10, //bcp->index_in_construction_vtbl_array
+    5, //bcp->base_subarray_index_in_construction_vtbl_array
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg15[];
+extern void _ZN4gg153fooEv();
+extern void ABISELECT(_ZThn16_N4gg153fooEv,_ZThn8_N4gg153fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg153fooEv,_ZTv0_n12_N4gg153fooEv)();
+extern void ABISELECT(_ZThn32_N4gg153fooEv,_ZThn20_N4gg153fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg153fooEv,_ZTv0_n12_N4gg153fooEv)();
+extern void ABISELECT(_ZThn48_N4gg153fooEv,_ZThn28_N4gg153fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg153fooEv,_ZTv0_n12_N4gg153fooEv)();
+extern void ABISELECT(_ZThn64_N4gg153fooEv,_ZThn36_N4gg153fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg153fooEv,_ZTv0_n12_N4gg153fooEv)();
+extern void ABISELECT(_ZThn80_N4gg153fooEv,_ZThn44_N4gg153fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg15[] = {
+  ABISELECT(80,44),
+  ABISELECT(64,36),
+  ABISELECT(48,28),
+  ABISELECT(32,20),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg15[0]),
+  (VTBL_ENTRY)&_ZN4gg153fooEv,
+  ABISELECT(64,36),
+  ABISELECT(48,28),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg153fooEv,_ZThn8_N4gg153fooEv),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4gg15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg153fooEv,_ZTv0_n12_N4gg153fooEv),
+  ABISELECT(-48,-28),
+  ABISELECT(-48,-28),
+  (VTBL_ENTRY)&(_ZTI4gg15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg153fooEv,_ZTv0_n12_N4gg153fooEv),
+  ABISELECT(-64,-36),
+  ABISELECT(-64,-36),
+  (VTBL_ENTRY)&(_ZTI4gg15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg153fooEv,_ZTv0_n12_N4gg153fooEv),
+  ABISELECT(-80,-44),
+  ABISELECT(-80,-44),
+  (VTBL_ENTRY)&(_ZTI4gg15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg153fooEv,_ZTv0_n12_N4gg153fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg15[];
+extern void _ZN4ee153fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee15__4gg15[] = {
+  ABISELECT(48,28),
+  ABISELECT(32,20),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee15[0]),
+  (VTBL_ENTRY)&_ZN4ee153fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv)();
+extern void ABISELECT(_ZThn32_N4ee153fooEv,_ZThn20_N4ee153fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa15__4ee15__4gg15[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4ee15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv)();
+extern void ABISELECT(_ZThn48_N4ee153fooEv,_ZThn28_N4ee153fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb15__4ee15__4gg15[] = {
+  ABISELECT(-48,-28),
+  ABISELECT(-48,-28),
+  (VTBL_ENTRY)&(_ZTI4ee15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv),
+};
+extern void _ZN4ff153fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff15__4gg15[] = {
+  ABISELECT(64,36),
+  ABISELECT(48,28),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff15[0]),
+  (VTBL_ENTRY)&_ZN4ff153fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv)();
+extern void ABISELECT(_ZThn48_N4ff153fooEv,_ZThn28_N4ff153fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc15__4ff15__4gg15[] = {
+  ABISELECT(-48,-28),
+  ABISELECT(-48,-28),
+  (VTBL_ENTRY)&(_ZTI4ff15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv)();
+extern void ABISELECT(_ZThn64_N4ff153fooEv,_ZThn36_N4ff153fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd15__4ff15__4gg15[] = {
+  ABISELECT(-64,-36),
+  ABISELECT(-64,-36),
+  (VTBL_ENTRY)&(_ZTI4ff15[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv),
+};
+static  VTT_ENTRY vtt_gg15[] = {
+  {&(_ZTV4gg15[6]),  6,28},
+  {&(_tg__ZTV4ee15__4gg15[4]),  4,5},
+  {&(_tg__ZTV4aa15__4ee15__4gg15[3]),  3,4},
+  {&(_tg__ZTV4bb15__4ee15__4gg15[3]),  3,4},
+  {&(_tg__ZTV4ff15__4gg15[4]),  4,5},
+  {&(_tg__ZTV4cc15__4ff15__4gg15[3]),  3,4},
+  {&(_tg__ZTV4dd15__4ff15__4gg15[3]),  3,4},
+  {&(_ZTV4gg15[15]),  15,28},
+  {&(_ZTV4gg15[19]),  19,28},
+  {&(_ZTV4gg15[11]),  11,28},
+  {&(_ZTV4gg15[23]),  23,28},
+  {&(_ZTV4gg15[27]),  27,28},
+};
+extern VTBL_ENTRY _ZTI4gg15[];
+extern  VTBL_ENTRY _ZTV4gg15[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg15[];
+static VTBL_ENTRY alt_thunk_names39[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff153fooEv,_ZTv0_n12_N4ff153fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4ff153fooEv,_ZThn36_N4ff153fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4ff153fooEv,_ZThn28_N4ff153fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee153fooEv,_ZTv0_n12_N4ee153fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4ee153fooEv,_ZThn28_N4ee153fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee153fooEv,_ZThn20_N4ee153fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg153fooEv,_ZTv0_n12_N4gg153fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn80_N4gg153fooEv,_ZThn44_N4gg153fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4gg153fooEv,_ZThn36_N4gg153fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg153fooEv,_ZThn28_N4gg153fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4gg153fooEv,_ZThn20_N4gg153fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg15 = {  "gg15", // class name
+  bases_gg15, 6,
+  &(vtc_gg15[0]), // expected_vtbl_contents
+  &(vtt_gg15[0]), // expected_vtt_contents
+  ABISELECT(96,52), // object size
+  NSPAIRA(_ZTI4gg15),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg15),28, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg15),12, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names39,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa16  {
+  int a;
+   aa16(); // _ZN4aa16C1Ev
+  virtual void  foo(); // _ZN4aa163fooEv
+  ~aa16(); // tgen
+};
+//SIG(-1 aa16) C1{ v1 Fi}
+
+
+ aa16 ::aa16(){ note_ctor("aa16", this);}
+void  aa16 ::foo(){vfunc_called(this, "_ZN4aa163fooEv");}
+aa16 ::~aa16(){ note_dtor("aa16", this);} // tgen
+
+static void Test_aa16()
+{
+  extern Class_Descriptor cd_aa16;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa16, buf);
+    aa16 *dp, &lv = *(dp=new (buf) aa16());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa16)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa16)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa16.a");
+    test_class_info(&lv, &cd_aa16);
+    dp->~aa16();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa16(Test_aa16, "aa16", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa16C1Ev();
+extern void _ZN4aa16D1Ev();
+Name_Map name_map_aa16[] = {
+  NSPAIR(_ZN4aa16C1Ev),
+  NSPAIR(_ZN4aa16D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa16[];
+extern void _ZN4aa163fooEv();
+static  VTBL_ENTRY vtc_aa16[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa16[0]),
+  (VTBL_ENTRY)&_ZN4aa163fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa16[];
+extern  VTBL_ENTRY _ZTV4aa16[];
+Class_Descriptor cd_aa16 = {  "aa16", // class name
+  0,0,//no base classes
+  &(vtc_aa16[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa16),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa16),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  bb16  {
+  int b;
+   bb16(); // _ZN4bb16C1Ev
+  virtual void  foo(); // _ZN4bb163fooEv
+  ~bb16(); // tgen
+};
+//SIG(-1 bb16) C1{ v1 Fi}
+
+
+ bb16 ::bb16(){ note_ctor("bb16", this);}
+void  bb16 ::foo(){vfunc_called(this, "_ZN4bb163fooEv");}
+bb16 ::~bb16(){ note_dtor("bb16", this);} // tgen
+
+static void Test_bb16()
+{
+  extern Class_Descriptor cd_bb16;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb16, buf);
+    bb16 *dp, &lv = *(dp=new (buf) bb16());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb16)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb16)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb16.b");
+    test_class_info(&lv, &cd_bb16);
+    dp->~bb16();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb16(Test_bb16, "bb16", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb16C1Ev();
+extern void _ZN4bb16D1Ev();
+Name_Map name_map_bb16[] = {
+  NSPAIR(_ZN4bb16C1Ev),
+  NSPAIR(_ZN4bb16D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb16[];
+extern void _ZN4bb163fooEv();
+static  VTBL_ENTRY vtc_bb16[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb16[0]),
+  (VTBL_ENTRY)&_ZN4bb163fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb16[];
+extern  VTBL_ENTRY _ZTV4bb16[];
+Class_Descriptor cd_bb16 = {  "bb16", // class name
+  0,0,//no base classes
+  &(vtc_bb16[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb16),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb16),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  cc16  {
+  int c;
+   cc16(); // _ZN4cc16C1Ev
+  virtual void  foo(); // _ZN4cc163fooEv
+  ~cc16(); // tgen
+};
+//SIG(-1 cc16) C1{ v1 Fi}
+
+
+ cc16 ::cc16(){ note_ctor("cc16", this);}
+void  cc16 ::foo(){vfunc_called(this, "_ZN4cc163fooEv");}
+cc16 ::~cc16(){ note_dtor("cc16", this);} // tgen
+
+static void Test_cc16()
+{
+  extern Class_Descriptor cd_cc16;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc16, buf);
+    cc16 *dp, &lv = *(dp=new (buf) cc16());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc16)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc16)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc16.c");
+    test_class_info(&lv, &cd_cc16);
+    dp->~cc16();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc16(Test_cc16, "cc16", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc16C1Ev();
+extern void _ZN4cc16D1Ev();
+Name_Map name_map_cc16[] = {
+  NSPAIR(_ZN4cc16C1Ev),
+  NSPAIR(_ZN4cc16D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc16[];
+extern void _ZN4cc163fooEv();
+static  VTBL_ENTRY vtc_cc16[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc16[0]),
+  (VTBL_ENTRY)&_ZN4cc163fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc16[];
+extern  VTBL_ENTRY _ZTV4cc16[];
+Class_Descriptor cd_cc16 = {  "cc16", // class name
+  0,0,//no base classes
+  &(vtc_cc16[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc16),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc16),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  dd16  {
+  int d;
+   dd16(); // _ZN4dd16C1Ev
+  virtual void  foo(); // _ZN4dd163fooEv
+  ~dd16(); // tgen
+};
+//SIG(-1 dd16) C1{ v1 Fi}
+
+
+ dd16 ::dd16(){ note_ctor("dd16", this);}
+void  dd16 ::foo(){vfunc_called(this, "_ZN4dd163fooEv");}
+dd16 ::~dd16(){ note_dtor("dd16", this);} // tgen
+
+static void Test_dd16()
+{
+  extern Class_Descriptor cd_dd16;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd16, buf);
+    dd16 *dp, &lv = *(dp=new (buf) dd16());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd16)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd16)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd16.d");
+    test_class_info(&lv, &cd_dd16);
+    dp->~dd16();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd16(Test_dd16, "dd16", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd16C1Ev();
+extern void _ZN4dd16D1Ev();
+Name_Map name_map_dd16[] = {
+  NSPAIR(_ZN4dd16C1Ev),
+  NSPAIR(_ZN4dd16D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd16[];
+extern void _ZN4dd163fooEv();
+static  VTBL_ENTRY vtc_dd16[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd16[0]),
+  (VTBL_ENTRY)&_ZN4dd163fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd16[];
+extern  VTBL_ENTRY _ZTV4dd16[];
+Class_Descriptor cd_dd16 = {  "dd16", // class name
+  0,0,//no base classes
+  &(vtc_dd16[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd16),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd16),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  ee16  : aa16 , bb16 {
+  int e;
+   ee16(); // _ZN4ee16C1Ev
+  virtual void  foo(); // _ZN4ee163fooEv
+  ~ee16(); // tgen
+};
+//SIG(-1 ee16) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee16 ::ee16(){ note_ctor("ee16", this);}
+void  ee16 ::foo(){vfunc_called(this, "_ZN4ee163fooEv");}
+ee16 ::~ee16(){ note_dtor("ee16", this);} // tgen
+
+static void Test_ee16()
+{
+  extern Class_Descriptor cd_ee16;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee16, buf);
+    ee16 *dp, &lv = *(dp=new (buf) ee16());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee16)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee16)");
+    check_base_class_offset(lv, (aa16*), 0, "ee16");
+    check_base_class_offset(lv, (bb16*), ABISELECT(16,8), "ee16");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee16.e");
+    test_class_info(&lv, &cd_ee16);
+    dp->~ee16();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee16(Test_ee16, "ee16", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee16C1Ev();
+extern void _ZN4ee16D1Ev();
+Name_Map name_map_ee16[] = {
+  NSPAIR(_ZN4ee16C1Ev),
+  NSPAIR(_ZN4ee16D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa16;
+extern VTBL_ENTRY _ZTI4aa16[];
+extern  VTBL_ENTRY _ZTV4aa16[];
+extern Class_Descriptor cd_bb16;
+extern VTBL_ENTRY _ZTI4bb16[];
+extern  VTBL_ENTRY _ZTV4bb16[];
+static Base_Class bases_ee16[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa16,    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},
+  {&cd_bb16,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ee16[];
+extern void _ZN4ee163fooEv();
+extern void ABISELECT(_ZThn16_N4ee163fooEv,_ZThn8_N4ee163fooEv)();
+static  VTBL_ENTRY vtc_ee16[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee16[0]),
+  (VTBL_ENTRY)&_ZN4ee163fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee16[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ee163fooEv,_ZThn8_N4ee163fooEv),
+};
+extern VTBL_ENTRY _ZTI4ee16[];
+extern  VTBL_ENTRY _ZTV4ee16[];
+Class_Descriptor cd_ee16 = {  "ee16", // class name
+  bases_ee16, 2,
+  &(vtc_ee16[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee16),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee16),6, //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  ff16  : cc16 , dd16 {
+  int f;
+   ff16(); // _ZN4ff16C1Ev
+  virtual void  foo(); // _ZN4ff163fooEv
+  ~ff16(); // tgen
+};
+//SIG(-1 ff16) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff16 ::ff16(){ note_ctor("ff16", this);}
+void  ff16 ::foo(){vfunc_called(this, "_ZN4ff163fooEv");}
+ff16 ::~ff16(){ note_dtor("ff16", this);} // tgen
+
+static void Test_ff16()
+{
+  extern Class_Descriptor cd_ff16;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff16, buf);
+    ff16 *dp, &lv = *(dp=new (buf) ff16());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff16)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff16)");
+    check_base_class_offset(lv, (cc16*), 0, "ff16");
+    check_base_class_offset(lv, (dd16*), ABISELECT(16,8), "ff16");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff16.f");
+    test_class_info(&lv, &cd_ff16);
+    dp->~ff16();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff16(Test_ff16, "ff16", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff16C1Ev();
+extern void _ZN4ff16D1Ev();
+Name_Map name_map_ff16[] = {
+  NSPAIR(_ZN4ff16C1Ev),
+  NSPAIR(_ZN4ff16D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc16;
+extern VTBL_ENTRY _ZTI4cc16[];
+extern  VTBL_ENTRY _ZTV4cc16[];
+extern Class_Descriptor cd_dd16;
+extern VTBL_ENTRY _ZTI4dd16[];
+extern  VTBL_ENTRY _ZTV4dd16[];
+static Base_Class bases_ff16[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc16,    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},
+  {&cd_dd16,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ff16[];
+extern void _ZN4ff163fooEv();
+extern void ABISELECT(_ZThn16_N4ff163fooEv,_ZThn8_N4ff163fooEv)();
+static  VTBL_ENTRY vtc_ff16[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff16[0]),
+  (VTBL_ENTRY)&_ZN4ff163fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff16[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ff163fooEv,_ZThn8_N4ff163fooEv),
+};
+extern VTBL_ENTRY _ZTI4ff16[];
+extern  VTBL_ENTRY _ZTV4ff16[];
+Class_Descriptor cd_ff16 = {  "ff16", // class name
+  bases_ff16, 2,
+  &(vtc_ff16[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff16),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff16),6, //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  gg16  : virtual ee16 , ff16 {
+  int g;
+   gg16(const ABISELECT(__tsi64,int) *const *); // _ZN4gg16C2Ev
+  virtual void  foo(); // _ZN4gg163fooEv
+  ~gg16(); // tgen
+  gg16(); // tgen
+};
+//SIG(1 gg16) C1{ VBC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg16 ::gg16(const ABISELECT(__tsi64,int) *const *){}
+void  gg16 ::foo(){vfunc_called(this, "_ZN4gg163fooEv");}
+gg16 ::~gg16(){ note_dtor("gg16", this);} // tgen
+gg16 ::gg16(){ note_ctor("gg16", this);} // tgen
+
+static void Test_gg16()
+{
+  extern Class_Descriptor cd_gg16;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg16, buf);
+    gg16 *dp, &lv = *(dp=new (buf) gg16());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg16)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg16)");
+    check_base_class_offset(lv, (aa16*)(ee16*), ABISELECT(40,24), "gg16");
+    check_base_class_offset(lv, (bb16*)(ee16*), ABISELECT(56,32), "gg16");
+    check_base_class_offset(lv, (ee16*), ABISELECT(40,24), "gg16");
+    check_base_class_offset(lv, (cc16*)(ff16*), 0, "gg16");
+    check_base_class_offset(lv, (dd16*)(ff16*), ABISELECT(16,8), "gg16");
+    check_base_class_offset(lv, (ff16*), 0, "gg16");
+    check_field_offset(lv, g, ABISELECT(32,20), "gg16.g");
+    test_class_info(&lv, &cd_gg16);
+    dp->~gg16();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg16(Test_gg16, "gg16", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg16C1Ev();
+extern void _ZN4gg16D1Ev();
+Name_Map name_map_gg16[] = {
+  NSPAIR(_ZN4gg16C1Ev),
+  NSPAIR(_ZN4gg16D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa16;
+extern VTBL_ENTRY _ZTI4aa16[];
+extern  VTBL_ENTRY _ZTV4aa16[];
+extern Class_Descriptor cd_bb16;
+extern VTBL_ENTRY _ZTI4bb16[];
+extern  VTBL_ENTRY _ZTV4bb16[];
+extern Class_Descriptor cd_ee16;
+extern VTBL_ENTRY _ZTI4ee16[];
+extern  VTBL_ENTRY _ZTV4ee16[];
+extern Class_Descriptor cd_cc16;
+extern VTBL_ENTRY _ZTI4cc16[];
+extern  VTBL_ENTRY _ZTV4cc16[];
+extern Class_Descriptor cd_dd16;
+extern VTBL_ENTRY _ZTI4dd16[];
+extern  VTBL_ENTRY _ZTV4dd16[];
+extern Class_Descriptor cd_ff16;
+extern VTBL_ENTRY _ZTI4ff16[];
+extern  VTBL_ENTRY _ZTV4ff16[];
+static Base_Class bases_gg16[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa16,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb16,    ABISELECT(56,32), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    2, //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
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee16,    ABISELECT(40,24), //bcp->offset
+    7, //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},
+  {&cd_cc16,    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
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd16,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff16,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg16[];
+extern void _ZN4gg163fooEv();
+extern void ABISELECT(_ZThn16_N4gg163fooEv,_ZThn8_N4gg163fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg163fooEv,_ZTv0_n12_N4gg163fooEv)();
+extern void ABISELECT(_ZThn40_N4gg163fooEv,_ZThn24_N4gg163fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTvn16_n24_N4gg163fooEv,_ZTvn8_n12_N4gg163fooEv)();
+static  VTBL_ENTRY vtc_gg16[] = {
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg16[0]),
+  (VTBL_ENTRY)&_ZN4gg163fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg16[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg163fooEv,_ZThn8_N4gg163fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg16[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg163fooEv,_ZTv0_n12_N4gg163fooEv),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4gg16[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n24_N4gg163fooEv,_ZTvn8_n12_N4gg163fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg16[];
+static  VTT_ENTRY vtt_gg16[] = {
+  {&(_ZTV4gg16[3]),  3,14},
+  {&(_ZTV4gg16[10]),  10,14},
+  {&(_ZTV4gg16[13]),  13,14},
+};
+extern VTBL_ENTRY _ZTI4gg16[];
+extern  VTBL_ENTRY _ZTV4gg16[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg16[];
+static VTBL_ENTRY alt_thunk_names40[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg163fooEv,_ZTv0_n12_N4gg163fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg163fooEv,_ZThn24_N4gg163fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg16 = {  "gg16", // class name
+  bases_gg16, 6,
+  &(vtc_gg16[0]), // expected_vtbl_contents
+  &(vtt_gg16[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg16),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg16),14, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg16),3, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names40,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa17  {
+  int a;
+   aa17(); // _ZN4aa17C1Ev
+  virtual void  foo(); // _ZN4aa173fooEv
+  ~aa17(); // tgen
+};
+//SIG(-1 aa17) C1{ v1 Fi}
+
+
+ aa17 ::aa17(){ note_ctor("aa17", this);}
+void  aa17 ::foo(){vfunc_called(this, "_ZN4aa173fooEv");}
+aa17 ::~aa17(){ note_dtor("aa17", this);} // tgen
+
+static void Test_aa17()
+{
+  extern Class_Descriptor cd_aa17;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa17, buf);
+    aa17 *dp, &lv = *(dp=new (buf) aa17());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa17)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa17)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa17.a");
+    test_class_info(&lv, &cd_aa17);
+    dp->~aa17();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa17(Test_aa17, "aa17", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa17C1Ev();
+extern void _ZN4aa17D1Ev();
+Name_Map name_map_aa17[] = {
+  NSPAIR(_ZN4aa17C1Ev),
+  NSPAIR(_ZN4aa17D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa17[];
+extern void _ZN4aa173fooEv();
+static  VTBL_ENTRY vtc_aa17[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa17[0]),
+  (VTBL_ENTRY)&_ZN4aa173fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa17[];
+extern  VTBL_ENTRY _ZTV4aa17[];
+Class_Descriptor cd_aa17 = {  "aa17", // class name
+  0,0,//no base classes
+  &(vtc_aa17[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa17),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa17),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  bb17  {
+  int b;
+   bb17(); // _ZN4bb17C1Ev
+  virtual void  foo(); // _ZN4bb173fooEv
+  ~bb17(); // tgen
+};
+//SIG(-1 bb17) C1{ v1 Fi}
+
+
+ bb17 ::bb17(){ note_ctor("bb17", this);}
+void  bb17 ::foo(){vfunc_called(this, "_ZN4bb173fooEv");}
+bb17 ::~bb17(){ note_dtor("bb17", this);} // tgen
+
+static void Test_bb17()
+{
+  extern Class_Descriptor cd_bb17;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb17, buf);
+    bb17 *dp, &lv = *(dp=new (buf) bb17());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb17)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb17)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb17.b");
+    test_class_info(&lv, &cd_bb17);
+    dp->~bb17();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb17(Test_bb17, "bb17", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb17C1Ev();
+extern void _ZN4bb17D1Ev();
+Name_Map name_map_bb17[] = {
+  NSPAIR(_ZN4bb17C1Ev),
+  NSPAIR(_ZN4bb17D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb17[];
+extern void _ZN4bb173fooEv();
+static  VTBL_ENTRY vtc_bb17[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb17[0]),
+  (VTBL_ENTRY)&_ZN4bb173fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb17[];
+extern  VTBL_ENTRY _ZTV4bb17[];
+Class_Descriptor cd_bb17 = {  "bb17", // class name
+  0,0,//no base classes
+  &(vtc_bb17[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb17),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb17),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  cc17  {
+  int c;
+   cc17(); // _ZN4cc17C1Ev
+  virtual void  foo(); // _ZN4cc173fooEv
+  ~cc17(); // tgen
+};
+//SIG(-1 cc17) C1{ v1 Fi}
+
+
+ cc17 ::cc17(){ note_ctor("cc17", this);}
+void  cc17 ::foo(){vfunc_called(this, "_ZN4cc173fooEv");}
+cc17 ::~cc17(){ note_dtor("cc17", this);} // tgen
+
+static void Test_cc17()
+{
+  extern Class_Descriptor cd_cc17;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc17, buf);
+    cc17 *dp, &lv = *(dp=new (buf) cc17());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc17)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc17)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc17.c");
+    test_class_info(&lv, &cd_cc17);
+    dp->~cc17();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc17(Test_cc17, "cc17", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc17C1Ev();
+extern void _ZN4cc17D1Ev();
+Name_Map name_map_cc17[] = {
+  NSPAIR(_ZN4cc17C1Ev),
+  NSPAIR(_ZN4cc17D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc17[];
+extern void _ZN4cc173fooEv();
+static  VTBL_ENTRY vtc_cc17[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc17[0]),
+  (VTBL_ENTRY)&_ZN4cc173fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc17[];
+extern  VTBL_ENTRY _ZTV4cc17[];
+Class_Descriptor cd_cc17 = {  "cc17", // class name
+  0,0,//no base classes
+  &(vtc_cc17[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc17),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc17),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  dd17  {
+  int d;
+   dd17(); // _ZN4dd17C1Ev
+  virtual void  foo(); // _ZN4dd173fooEv
+  ~dd17(); // tgen
+};
+//SIG(-1 dd17) C1{ v1 Fi}
+
+
+ dd17 ::dd17(){ note_ctor("dd17", this);}
+void  dd17 ::foo(){vfunc_called(this, "_ZN4dd173fooEv");}
+dd17 ::~dd17(){ note_dtor("dd17", this);} // tgen
+
+static void Test_dd17()
+{
+  extern Class_Descriptor cd_dd17;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd17, buf);
+    dd17 *dp, &lv = *(dp=new (buf) dd17());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd17)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd17)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd17.d");
+    test_class_info(&lv, &cd_dd17);
+    dp->~dd17();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd17(Test_dd17, "dd17", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd17C1Ev();
+extern void _ZN4dd17D1Ev();
+Name_Map name_map_dd17[] = {
+  NSPAIR(_ZN4dd17C1Ev),
+  NSPAIR(_ZN4dd17D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd17[];
+extern void _ZN4dd173fooEv();
+static  VTBL_ENTRY vtc_dd17[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd17[0]),
+  (VTBL_ENTRY)&_ZN4dd173fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd17[];
+extern  VTBL_ENTRY _ZTV4dd17[];
+Class_Descriptor cd_dd17 = {  "dd17", // class name
+  0,0,//no base classes
+  &(vtc_dd17[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd17),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd17),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  ee17  : virtual aa17 , bb17 {
+  int e;
+   ee17(const ABISELECT(__tsi64,int) *const *); // _ZN4ee17C2Ev
+  virtual void  foo(); // _ZN4ee173fooEv
+  ~ee17(); // tgen
+  ee17(); // tgen
+};
+//SIG(-1 ee17) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee17 ::ee17(const ABISELECT(__tsi64,int) *const *){}
+void  ee17 ::foo(){vfunc_called(this, "_ZN4ee173fooEv");}
+ee17 ::~ee17(){ note_dtor("ee17", this);} // tgen
+ee17 ::ee17(){ note_ctor("ee17", this);} // tgen
+
+static void Test_ee17()
+{
+  extern Class_Descriptor cd_ee17;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee17, buf);
+    ee17 *dp, &lv = *(dp=new (buf) ee17());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee17)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee17)");
+    check_base_class_offset(lv, (aa17*), ABISELECT(16,12), "ee17");
+    check_base_class_offset(lv, (bb17*), 0, "ee17");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee17.e");
+    test_class_info(&lv, &cd_ee17);
+    dp->~ee17();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee17(Test_ee17, "ee17", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee17C1Ev();
+extern void _ZN4ee17D1Ev();
+Name_Map name_map_ee17[] = {
+  NSPAIR(_ZN4ee17C1Ev),
+  NSPAIR(_ZN4ee17D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa17;
+extern VTBL_ENTRY _ZTI4aa17[];
+extern  VTBL_ENTRY _ZTV4aa17[];
+extern Class_Descriptor cd_bb17;
+extern VTBL_ENTRY _ZTI4bb17[];
+extern  VTBL_ENTRY _ZTV4bb17[];
+static Base_Class bases_ee17[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa17,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb17,    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 _ZTI4ee17[];
+extern void _ZN4ee173fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee173fooEv,_ZTv0_n12_N4ee173fooEv)();
+extern void ABISELECT(_ZThn16_N4ee173fooEv,_ZThn12_N4ee173fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee17[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee17[0]),
+  (VTBL_ENTRY)&_ZN4ee173fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee17[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee173fooEv,_ZTv0_n12_N4ee173fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee17[];
+static  VTT_ENTRY vtt_ee17[] = {
+  {&(_ZTV4ee17[3]),  3,8},
+  {&(_ZTV4ee17[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee17[];
+extern  VTBL_ENTRY _ZTV4ee17[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee17[];
+static VTBL_ENTRY alt_thunk_names41[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee173fooEv,_ZTv0_n12_N4ee173fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee173fooEv,_ZThn12_N4ee173fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee17 = {  "ee17", // class name
+  bases_ee17, 2,
+  &(vtc_ee17[0]), // expected_vtbl_contents
+  &(vtt_ee17[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee17),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee17),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee17),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names41,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff17  : cc17 , dd17 {
+  int f;
+   ff17(); // _ZN4ff17C1Ev
+  virtual void  foo(); // _ZN4ff173fooEv
+  ~ff17(); // tgen
+};
+//SIG(-1 ff17) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff17 ::ff17(){ note_ctor("ff17", this);}
+void  ff17 ::foo(){vfunc_called(this, "_ZN4ff173fooEv");}
+ff17 ::~ff17(){ note_dtor("ff17", this);} // tgen
+
+static void Test_ff17()
+{
+  extern Class_Descriptor cd_ff17;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff17, buf);
+    ff17 *dp, &lv = *(dp=new (buf) ff17());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff17)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff17)");
+    check_base_class_offset(lv, (cc17*), 0, "ff17");
+    check_base_class_offset(lv, (dd17*), ABISELECT(16,8), "ff17");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff17.f");
+    test_class_info(&lv, &cd_ff17);
+    dp->~ff17();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff17(Test_ff17, "ff17", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff17C1Ev();
+extern void _ZN4ff17D1Ev();
+Name_Map name_map_ff17[] = {
+  NSPAIR(_ZN4ff17C1Ev),
+  NSPAIR(_ZN4ff17D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc17;
+extern VTBL_ENTRY _ZTI4cc17[];
+extern  VTBL_ENTRY _ZTV4cc17[];
+extern Class_Descriptor cd_dd17;
+extern VTBL_ENTRY _ZTI4dd17[];
+extern  VTBL_ENTRY _ZTV4dd17[];
+static Base_Class bases_ff17[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc17,    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},
+  {&cd_dd17,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ff17[];
+extern void _ZN4ff173fooEv();
+extern void ABISELECT(_ZThn16_N4ff173fooEv,_ZThn8_N4ff173fooEv)();
+static  VTBL_ENTRY vtc_ff17[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff17[0]),
+  (VTBL_ENTRY)&_ZN4ff173fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff17[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ff173fooEv,_ZThn8_N4ff173fooEv),
+};
+extern VTBL_ENTRY _ZTI4ff17[];
+extern  VTBL_ENTRY _ZTV4ff17[];
+Class_Descriptor cd_ff17 = {  "ff17", // class name
+  bases_ff17, 2,
+  &(vtc_ff17[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff17),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff17),6, //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  gg17  : virtual ee17 , ff17 {
+  int g;
+   gg17(const ABISELECT(__tsi64,int) *const *); // _ZN4gg17C2Ev
+  virtual void  foo(); // _ZN4gg173fooEv
+  ~gg17(); // tgen
+  gg17(); // tgen
+};
+//SIG(1 gg17) C1{ VBC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg17 ::gg17(const ABISELECT(__tsi64,int) *const *){}
+void  gg17 ::foo(){vfunc_called(this, "_ZN4gg173fooEv");}
+gg17 ::~gg17(){ note_dtor("gg17", this);} // tgen
+gg17 ::gg17(){ note_ctor("gg17", this);} // tgen
+
+static void Test_gg17()
+{
+  extern Class_Descriptor cd_gg17;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg17, buf);
+    gg17 *dp, &lv = *(dp=new (buf) gg17());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg17)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg17)");
+    check_base_class_offset(lv, (aa17*)(ee17*), ABISELECT(56,36), "gg17");
+    check_base_class_offset(lv, (bb17*)(ee17*), ABISELECT(40,24), "gg17");
+    check_base_class_offset(lv, (ee17*), ABISELECT(40,24), "gg17");
+    check_base_class_offset(lv, (cc17*)(ff17*), 0, "gg17");
+    check_base_class_offset(lv, (dd17*)(ff17*), ABISELECT(16,8), "gg17");
+    check_base_class_offset(lv, (ff17*), 0, "gg17");
+    check_field_offset(lv, g, ABISELECT(32,20), "gg17.g");
+    test_class_info(&lv, &cd_gg17);
+    dp->~gg17();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg17(Test_gg17, "gg17", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg17C1Ev();
+extern void _ZN4gg17D1Ev();
+Name_Map name_map_gg17[] = {
+  NSPAIR(_ZN4gg17C1Ev),
+  NSPAIR(_ZN4gg17D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa17;
+extern VTBL_ENTRY _ZTI4aa17[];
+extern  VTBL_ENTRY _ZTV4aa17[];
+extern Class_Descriptor cd_bb17;
+extern VTBL_ENTRY _ZTI4bb17[];
+extern  VTBL_ENTRY _ZTV4bb17[];
+extern Class_Descriptor cd_ee17;
+extern VTBL_ENTRY _ZTI4ee17[];
+extern  VTBL_ENTRY _ZTV4ee17[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee17[];
+extern Class_Descriptor cd_cc17;
+extern VTBL_ENTRY _ZTI4cc17[];
+extern  VTBL_ENTRY _ZTV4cc17[];
+extern Class_Descriptor cd_dd17;
+extern VTBL_ENTRY _ZTI4dd17[];
+extern  VTBL_ENTRY _ZTV4dd17[];
+extern Class_Descriptor cd_ff17;
+extern VTBL_ENTRY _ZTI4ff17[];
+extern  VTBL_ENTRY _ZTV4ff17[];
+static Base_Class bases_gg17[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa17,    ABISELECT(56,36), //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_bb17,    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
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee17,    ABISELECT(40,24), //bcp->offset
+    8, //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},
+  {&cd_cc17,    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
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd17,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff17,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg17[];
+extern void _ZN4gg173fooEv();
+extern void ABISELECT(_ZThn16_N4gg173fooEv,_ZThn8_N4gg173fooEv)();
+extern void ABISELECT(_ZTv0_n32_N4gg173fooEv,_ZTv0_n16_N4gg173fooEv)();
+extern void ABISELECT(_ZThn40_N4gg173fooEv,_ZThn24_N4gg173fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg173fooEv,_ZTv0_n12_N4gg173fooEv)();
+extern void ABISELECT(_ZThn56_N4gg173fooEv,_ZThn36_N4gg173fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg17[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg17[0]),
+  (VTBL_ENTRY)&_ZN4gg173fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg17[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg173fooEv,_ZThn8_N4gg173fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(16,12),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg17[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg173fooEv,_ZTv0_n16_N4gg173fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg17[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg173fooEv,_ZTv0_n12_N4gg173fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg17[];
+extern void _ZN4ee173fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee17__4gg17[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee17[0]),
+  (VTBL_ENTRY)&_ZN4ee173fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee173fooEv,_ZTv0_n12_N4ee173fooEv)();
+extern void ABISELECT(_ZThn16_N4ee173fooEv,_ZThn12_N4ee173fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa17__4ee17__4gg17[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee17[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee173fooEv,_ZTv0_n12_N4ee173fooEv),
+};
+static  VTT_ENTRY vtt_gg17[] = {
+  {&(_ZTV4gg17[4]),  4,17},
+  {&(_ZTV4gg17[12]),  12,17},
+  {&(_ZTV4gg17[16]),  16,17},
+  {&(_tg__ZTV4ee17__4gg17[3]),  3,4},
+  {&(_tg__ZTV4aa17__4ee17__4gg17[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg17[];
+extern  VTBL_ENTRY _ZTV4gg17[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg17[];
+static VTBL_ENTRY alt_thunk_names42[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee173fooEv,_ZTv0_n12_N4ee173fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee173fooEv,_ZThn12_N4ee173fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg173fooEv,_ZTv0_n12_N4gg173fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg173fooEv,_ZThn36_N4gg173fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg173fooEv,_ZTv0_n16_N4gg173fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg173fooEv,_ZThn24_N4gg173fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg17 = {  "gg17", // class name
+  bases_gg17, 6,
+  &(vtc_gg17[0]), // expected_vtbl_contents
+  &(vtt_gg17[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg17),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg17),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg17),5, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names42,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa18  {
+  int a;
+   aa18(); // _ZN4aa18C1Ev
+  virtual void  foo(); // _ZN4aa183fooEv
+  ~aa18(); // tgen
+};
+//SIG(-1 aa18) C1{ v1 Fi}
+
+
+ aa18 ::aa18(){ note_ctor("aa18", this);}
+void  aa18 ::foo(){vfunc_called(this, "_ZN4aa183fooEv");}
+aa18 ::~aa18(){ note_dtor("aa18", this);} // tgen
+
+static void Test_aa18()
+{
+  extern Class_Descriptor cd_aa18;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa18, buf);
+    aa18 *dp, &lv = *(dp=new (buf) aa18());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa18)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa18)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa18.a");
+    test_class_info(&lv, &cd_aa18);
+    dp->~aa18();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa18(Test_aa18, "aa18", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa18C1Ev();
+extern void _ZN4aa18D1Ev();
+Name_Map name_map_aa18[] = {
+  NSPAIR(_ZN4aa18C1Ev),
+  NSPAIR(_ZN4aa18D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa18[];
+extern void _ZN4aa183fooEv();
+static  VTBL_ENTRY vtc_aa18[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa18[0]),
+  (VTBL_ENTRY)&_ZN4aa183fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa18[];
+extern  VTBL_ENTRY _ZTV4aa18[];
+Class_Descriptor cd_aa18 = {  "aa18", // class name
+  0,0,//no base classes
+  &(vtc_aa18[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa18),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa18),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  bb18  {
+  int b;
+   bb18(); // _ZN4bb18C1Ev
+  virtual void  foo(); // _ZN4bb183fooEv
+  ~bb18(); // tgen
+};
+//SIG(-1 bb18) C1{ v1 Fi}
+
+
+ bb18 ::bb18(){ note_ctor("bb18", this);}
+void  bb18 ::foo(){vfunc_called(this, "_ZN4bb183fooEv");}
+bb18 ::~bb18(){ note_dtor("bb18", this);} // tgen
+
+static void Test_bb18()
+{
+  extern Class_Descriptor cd_bb18;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb18, buf);
+    bb18 *dp, &lv = *(dp=new (buf) bb18());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb18)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb18)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb18.b");
+    test_class_info(&lv, &cd_bb18);
+    dp->~bb18();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb18(Test_bb18, "bb18", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb18C1Ev();
+extern void _ZN4bb18D1Ev();
+Name_Map name_map_bb18[] = {
+  NSPAIR(_ZN4bb18C1Ev),
+  NSPAIR(_ZN4bb18D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb18[];
+extern void _ZN4bb183fooEv();
+static  VTBL_ENTRY vtc_bb18[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb18[0]),
+  (VTBL_ENTRY)&_ZN4bb183fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb18[];
+extern  VTBL_ENTRY _ZTV4bb18[];
+Class_Descriptor cd_bb18 = {  "bb18", // class name
+  0,0,//no base classes
+  &(vtc_bb18[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb18),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb18),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  cc18  {
+  int c;
+   cc18(); // _ZN4cc18C1Ev
+  virtual void  foo(); // _ZN4cc183fooEv
+  ~cc18(); // tgen
+};
+//SIG(-1 cc18) C1{ v1 Fi}
+
+
+ cc18 ::cc18(){ note_ctor("cc18", this);}
+void  cc18 ::foo(){vfunc_called(this, "_ZN4cc183fooEv");}
+cc18 ::~cc18(){ note_dtor("cc18", this);} // tgen
+
+static void Test_cc18()
+{
+  extern Class_Descriptor cd_cc18;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc18, buf);
+    cc18 *dp, &lv = *(dp=new (buf) cc18());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc18)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc18)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc18.c");
+    test_class_info(&lv, &cd_cc18);
+    dp->~cc18();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc18(Test_cc18, "cc18", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc18C1Ev();
+extern void _ZN4cc18D1Ev();
+Name_Map name_map_cc18[] = {
+  NSPAIR(_ZN4cc18C1Ev),
+  NSPAIR(_ZN4cc18D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc18[];
+extern void _ZN4cc183fooEv();
+static  VTBL_ENTRY vtc_cc18[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc18[0]),
+  (VTBL_ENTRY)&_ZN4cc183fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc18[];
+extern  VTBL_ENTRY _ZTV4cc18[];
+Class_Descriptor cd_cc18 = {  "cc18", // class name
+  0,0,//no base classes
+  &(vtc_cc18[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc18),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc18),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  dd18  {
+  int d;
+   dd18(); // _ZN4dd18C1Ev
+  virtual void  foo(); // _ZN4dd183fooEv
+  ~dd18(); // tgen
+};
+//SIG(-1 dd18) C1{ v1 Fi}
+
+
+ dd18 ::dd18(){ note_ctor("dd18", this);}
+void  dd18 ::foo(){vfunc_called(this, "_ZN4dd183fooEv");}
+dd18 ::~dd18(){ note_dtor("dd18", this);} // tgen
+
+static void Test_dd18()
+{
+  extern Class_Descriptor cd_dd18;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd18, buf);
+    dd18 *dp, &lv = *(dp=new (buf) dd18());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd18)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd18)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd18.d");
+    test_class_info(&lv, &cd_dd18);
+    dp->~dd18();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd18(Test_dd18, "dd18", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd18C1Ev();
+extern void _ZN4dd18D1Ev();
+Name_Map name_map_dd18[] = {
+  NSPAIR(_ZN4dd18C1Ev),
+  NSPAIR(_ZN4dd18D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd18[];
+extern void _ZN4dd183fooEv();
+static  VTBL_ENTRY vtc_dd18[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd18[0]),
+  (VTBL_ENTRY)&_ZN4dd183fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd18[];
+extern  VTBL_ENTRY _ZTV4dd18[];
+Class_Descriptor cd_dd18 = {  "dd18", // class name
+  0,0,//no base classes
+  &(vtc_dd18[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd18),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd18),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  ee18  : aa18 , virtual bb18 {
+  int e;
+   ee18(const ABISELECT(__tsi64,int) *const *); // _ZN4ee18C2Ev
+  virtual void  foo(); // _ZN4ee183fooEv
+  ~ee18(); // tgen
+  ee18(); // tgen
+};
+//SIG(-1 ee18) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee18 ::ee18(const ABISELECT(__tsi64,int) *const *){}
+void  ee18 ::foo(){vfunc_called(this, "_ZN4ee183fooEv");}
+ee18 ::~ee18(){ note_dtor("ee18", this);} // tgen
+ee18 ::ee18(){ note_ctor("ee18", this);} // tgen
+
+static void Test_ee18()
+{
+  extern Class_Descriptor cd_ee18;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee18, buf);
+    ee18 *dp, &lv = *(dp=new (buf) ee18());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee18)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee18)");
+    check_base_class_offset(lv, (aa18*), 0, "ee18");
+    check_base_class_offset(lv, (bb18*), ABISELECT(16,12), "ee18");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee18.e");
+    test_class_info(&lv, &cd_ee18);
+    dp->~ee18();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee18(Test_ee18, "ee18", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee18C1Ev();
+extern void _ZN4ee18D1Ev();
+Name_Map name_map_ee18[] = {
+  NSPAIR(_ZN4ee18C1Ev),
+  NSPAIR(_ZN4ee18D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa18;
+extern VTBL_ENTRY _ZTI4aa18[];
+extern  VTBL_ENTRY _ZTV4aa18[];
+extern Class_Descriptor cd_bb18;
+extern VTBL_ENTRY _ZTI4bb18[];
+extern  VTBL_ENTRY _ZTV4bb18[];
+static Base_Class bases_ee18[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa18,    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},
+  {&cd_bb18,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee18[];
+extern void _ZN4ee183fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee183fooEv,_ZTv0_n12_N4ee183fooEv)();
+extern void ABISELECT(_ZThn16_N4ee183fooEv,_ZThn12_N4ee183fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee18[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee18[0]),
+  (VTBL_ENTRY)&_ZN4ee183fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee18[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee183fooEv,_ZTv0_n12_N4ee183fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee18[];
+static  VTT_ENTRY vtt_ee18[] = {
+  {&(_ZTV4ee18[3]),  3,8},
+  {&(_ZTV4ee18[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee18[];
+extern  VTBL_ENTRY _ZTV4ee18[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee18[];
+static VTBL_ENTRY alt_thunk_names43[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee183fooEv,_ZTv0_n12_N4ee183fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee183fooEv,_ZThn12_N4ee183fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee18 = {  "ee18", // class name
+  bases_ee18, 2,
+  &(vtc_ee18[0]), // expected_vtbl_contents
+  &(vtt_ee18[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee18),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee18),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee18),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names43,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff18  : cc18 , dd18 {
+  int f;
+   ff18(); // _ZN4ff18C1Ev
+  virtual void  foo(); // _ZN4ff183fooEv
+  ~ff18(); // tgen
+};
+//SIG(-1 ff18) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff18 ::ff18(){ note_ctor("ff18", this);}
+void  ff18 ::foo(){vfunc_called(this, "_ZN4ff183fooEv");}
+ff18 ::~ff18(){ note_dtor("ff18", this);} // tgen
+
+static void Test_ff18()
+{
+  extern Class_Descriptor cd_ff18;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff18, buf);
+    ff18 *dp, &lv = *(dp=new (buf) ff18());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff18)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff18)");
+    check_base_class_offset(lv, (cc18*), 0, "ff18");
+    check_base_class_offset(lv, (dd18*), ABISELECT(16,8), "ff18");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff18.f");
+    test_class_info(&lv, &cd_ff18);
+    dp->~ff18();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff18(Test_ff18, "ff18", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff18C1Ev();
+extern void _ZN4ff18D1Ev();
+Name_Map name_map_ff18[] = {
+  NSPAIR(_ZN4ff18C1Ev),
+  NSPAIR(_ZN4ff18D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc18;
+extern VTBL_ENTRY _ZTI4cc18[];
+extern  VTBL_ENTRY _ZTV4cc18[];
+extern Class_Descriptor cd_dd18;
+extern VTBL_ENTRY _ZTI4dd18[];
+extern  VTBL_ENTRY _ZTV4dd18[];
+static Base_Class bases_ff18[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc18,    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},
+  {&cd_dd18,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ff18[];
+extern void _ZN4ff183fooEv();
+extern void ABISELECT(_ZThn16_N4ff183fooEv,_ZThn8_N4ff183fooEv)();
+static  VTBL_ENTRY vtc_ff18[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff18[0]),
+  (VTBL_ENTRY)&_ZN4ff183fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff18[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ff183fooEv,_ZThn8_N4ff183fooEv),
+};
+extern VTBL_ENTRY _ZTI4ff18[];
+extern  VTBL_ENTRY _ZTV4ff18[];
+Class_Descriptor cd_ff18 = {  "ff18", // class name
+  bases_ff18, 2,
+  &(vtc_ff18[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff18),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff18),6, //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  gg18  : virtual ee18 , ff18 {
+  int g;
+   gg18(const ABISELECT(__tsi64,int) *const *); // _ZN4gg18C2Ev
+  virtual void  foo(); // _ZN4gg183fooEv
+  ~gg18(); // tgen
+  gg18(); // tgen
+};
+//SIG(1 gg18) C1{ VBC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg18 ::gg18(const ABISELECT(__tsi64,int) *const *){}
+void  gg18 ::foo(){vfunc_called(this, "_ZN4gg183fooEv");}
+gg18 ::~gg18(){ note_dtor("gg18", this);} // tgen
+gg18 ::gg18(){ note_ctor("gg18", this);} // tgen
+
+static void Test_gg18()
+{
+  extern Class_Descriptor cd_gg18;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg18, buf);
+    gg18 *dp, &lv = *(dp=new (buf) gg18());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg18)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg18)");
+    check_base_class_offset(lv, (aa18*)(ee18*), ABISELECT(40,24), "gg18");
+    check_base_class_offset(lv, (bb18*)(ee18*), ABISELECT(56,36), "gg18");
+    check_base_class_offset(lv, (ee18*), ABISELECT(40,24), "gg18");
+    check_base_class_offset(lv, (cc18*)(ff18*), 0, "gg18");
+    check_base_class_offset(lv, (dd18*)(ff18*), ABISELECT(16,8), "gg18");
+    check_base_class_offset(lv, (ff18*), 0, "gg18");
+    check_field_offset(lv, g, ABISELECT(32,20), "gg18.g");
+    test_class_info(&lv, &cd_gg18);
+    dp->~gg18();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg18(Test_gg18, "gg18", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg18C1Ev();
+extern void _ZN4gg18D1Ev();
+Name_Map name_map_gg18[] = {
+  NSPAIR(_ZN4gg18C1Ev),
+  NSPAIR(_ZN4gg18D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa18;
+extern VTBL_ENTRY _ZTI4aa18[];
+extern  VTBL_ENTRY _ZTV4aa18[];
+extern Class_Descriptor cd_bb18;
+extern VTBL_ENTRY _ZTI4bb18[];
+extern  VTBL_ENTRY _ZTV4bb18[];
+extern Class_Descriptor cd_ee18;
+extern VTBL_ENTRY _ZTI4ee18[];
+extern  VTBL_ENTRY _ZTV4ee18[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee18[];
+extern Class_Descriptor cd_cc18;
+extern VTBL_ENTRY _ZTI4cc18[];
+extern  VTBL_ENTRY _ZTV4cc18[];
+extern Class_Descriptor cd_dd18;
+extern VTBL_ENTRY _ZTI4dd18[];
+extern  VTBL_ENTRY _ZTV4dd18[];
+extern Class_Descriptor cd_ff18;
+extern VTBL_ENTRY _ZTI4ff18[];
+extern  VTBL_ENTRY _ZTV4ff18[];
+static Base_Class bases_gg18[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa18,    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
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb18,    ABISELECT(56,36), //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_ee18,    ABISELECT(40,24), //bcp->offset
+    8, //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},
+  {&cd_cc18,    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
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd18,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff18,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg18[];
+extern void _ZN4gg183fooEv();
+extern void ABISELECT(_ZThn16_N4gg183fooEv,_ZThn8_N4gg183fooEv)();
+extern void ABISELECT(_ZTv0_n32_N4gg183fooEv,_ZTv0_n16_N4gg183fooEv)();
+extern void ABISELECT(_ZThn40_N4gg183fooEv,_ZThn24_N4gg183fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg183fooEv,_ZTv0_n12_N4gg183fooEv)();
+extern void ABISELECT(_ZThn56_N4gg183fooEv,_ZThn36_N4gg183fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg18[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg18[0]),
+  (VTBL_ENTRY)&_ZN4gg183fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg18[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg183fooEv,_ZThn8_N4gg183fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(16,12),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg18[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg183fooEv,_ZTv0_n16_N4gg183fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg18[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg183fooEv,_ZTv0_n12_N4gg183fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg18[];
+extern void _ZN4ee183fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee18__4gg18[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee18[0]),
+  (VTBL_ENTRY)&_ZN4ee183fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee183fooEv,_ZTv0_n12_N4ee183fooEv)();
+extern void ABISELECT(_ZThn16_N4ee183fooEv,_ZThn12_N4ee183fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb18__4ee18__4gg18[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee18[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee183fooEv,_ZTv0_n12_N4ee183fooEv),
+};
+static  VTT_ENTRY vtt_gg18[] = {
+  {&(_ZTV4gg18[4]),  4,17},
+  {&(_ZTV4gg18[12]),  12,17},
+  {&(_ZTV4gg18[16]),  16,17},
+  {&(_tg__ZTV4ee18__4gg18[3]),  3,4},
+  {&(_tg__ZTV4bb18__4ee18__4gg18[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg18[];
+extern  VTBL_ENTRY _ZTV4gg18[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg18[];
+static VTBL_ENTRY alt_thunk_names44[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee183fooEv,_ZTv0_n12_N4ee183fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee183fooEv,_ZThn12_N4ee183fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg183fooEv,_ZTv0_n12_N4gg183fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg183fooEv,_ZThn36_N4gg183fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg183fooEv,_ZTv0_n16_N4gg183fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg183fooEv,_ZThn24_N4gg183fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg18 = {  "gg18", // class name
+  bases_gg18, 6,
+  &(vtc_gg18[0]), // expected_vtbl_contents
+  &(vtt_gg18[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg18),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg18),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg18),5, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names44,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa19  {
+  int a;
+   aa19(); // _ZN4aa19C1Ev
+  virtual void  foo(); // _ZN4aa193fooEv
+  ~aa19(); // tgen
+};
+//SIG(-1 aa19) C1{ v1 Fi}
+
+
+ aa19 ::aa19(){ note_ctor("aa19", this);}
+void  aa19 ::foo(){vfunc_called(this, "_ZN4aa193fooEv");}
+aa19 ::~aa19(){ note_dtor("aa19", this);} // tgen
+
+static void Test_aa19()
+{
+  extern Class_Descriptor cd_aa19;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa19, buf);
+    aa19 *dp, &lv = *(dp=new (buf) aa19());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa19)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa19)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa19.a");
+    test_class_info(&lv, &cd_aa19);
+    dp->~aa19();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa19(Test_aa19, "aa19", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa19C1Ev();
+extern void _ZN4aa19D1Ev();
+Name_Map name_map_aa19[] = {
+  NSPAIR(_ZN4aa19C1Ev),
+  NSPAIR(_ZN4aa19D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa19[];
+extern void _ZN4aa193fooEv();
+static  VTBL_ENTRY vtc_aa19[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa19[0]),
+  (VTBL_ENTRY)&_ZN4aa193fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa19[];
+extern  VTBL_ENTRY _ZTV4aa19[];
+Class_Descriptor cd_aa19 = {  "aa19", // class name
+  0,0,//no base classes
+  &(vtc_aa19[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa19),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa19),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  bb19  {
+  int b;
+   bb19(); // _ZN4bb19C1Ev
+  virtual void  foo(); // _ZN4bb193fooEv
+  ~bb19(); // tgen
+};
+//SIG(-1 bb19) C1{ v1 Fi}
+
+
+ bb19 ::bb19(){ note_ctor("bb19", this);}
+void  bb19 ::foo(){vfunc_called(this, "_ZN4bb193fooEv");}
+bb19 ::~bb19(){ note_dtor("bb19", this);} // tgen
+
+static void Test_bb19()
+{
+  extern Class_Descriptor cd_bb19;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb19, buf);
+    bb19 *dp, &lv = *(dp=new (buf) bb19());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb19)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb19)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb19.b");
+    test_class_info(&lv, &cd_bb19);
+    dp->~bb19();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb19(Test_bb19, "bb19", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb19C1Ev();
+extern void _ZN4bb19D1Ev();
+Name_Map name_map_bb19[] = {
+  NSPAIR(_ZN4bb19C1Ev),
+  NSPAIR(_ZN4bb19D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb19[];
+extern void _ZN4bb193fooEv();
+static  VTBL_ENTRY vtc_bb19[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb19[0]),
+  (VTBL_ENTRY)&_ZN4bb193fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb19[];
+extern  VTBL_ENTRY _ZTV4bb19[];
+Class_Descriptor cd_bb19 = {  "bb19", // class name
+  0,0,//no base classes
+  &(vtc_bb19[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb19),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb19),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  cc19  {
+  int c;
+   cc19(); // _ZN4cc19C1Ev
+  virtual void  foo(); // _ZN4cc193fooEv
+  ~cc19(); // tgen
+};
+//SIG(-1 cc19) C1{ v1 Fi}
+
+
+ cc19 ::cc19(){ note_ctor("cc19", this);}
+void  cc19 ::foo(){vfunc_called(this, "_ZN4cc193fooEv");}
+cc19 ::~cc19(){ note_dtor("cc19", this);} // tgen
+
+static void Test_cc19()
+{
+  extern Class_Descriptor cd_cc19;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc19, buf);
+    cc19 *dp, &lv = *(dp=new (buf) cc19());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc19)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc19)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc19.c");
+    test_class_info(&lv, &cd_cc19);
+    dp->~cc19();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc19(Test_cc19, "cc19", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc19C1Ev();
+extern void _ZN4cc19D1Ev();
+Name_Map name_map_cc19[] = {
+  NSPAIR(_ZN4cc19C1Ev),
+  NSPAIR(_ZN4cc19D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc19[];
+extern void _ZN4cc193fooEv();
+static  VTBL_ENTRY vtc_cc19[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc19[0]),
+  (VTBL_ENTRY)&_ZN4cc193fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc19[];
+extern  VTBL_ENTRY _ZTV4cc19[];
+Class_Descriptor cd_cc19 = {  "cc19", // class name
+  0,0,//no base classes
+  &(vtc_cc19[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc19),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc19),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  dd19  {
+  int d;
+   dd19(); // _ZN4dd19C1Ev
+  virtual void  foo(); // _ZN4dd193fooEv
+  ~dd19(); // tgen
+};
+//SIG(-1 dd19) C1{ v1 Fi}
+
+
+ dd19 ::dd19(){ note_ctor("dd19", this);}
+void  dd19 ::foo(){vfunc_called(this, "_ZN4dd193fooEv");}
+dd19 ::~dd19(){ note_dtor("dd19", this);} // tgen
+
+static void Test_dd19()
+{
+  extern Class_Descriptor cd_dd19;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd19, buf);
+    dd19 *dp, &lv = *(dp=new (buf) dd19());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd19)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd19)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd19.d");
+    test_class_info(&lv, &cd_dd19);
+    dp->~dd19();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd19(Test_dd19, "dd19", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd19C1Ev();
+extern void _ZN4dd19D1Ev();
+Name_Map name_map_dd19[] = {
+  NSPAIR(_ZN4dd19C1Ev),
+  NSPAIR(_ZN4dd19D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd19[];
+extern void _ZN4dd193fooEv();
+static  VTBL_ENTRY vtc_dd19[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd19[0]),
+  (VTBL_ENTRY)&_ZN4dd193fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd19[];
+extern  VTBL_ENTRY _ZTV4dd19[];
+Class_Descriptor cd_dd19 = {  "dd19", // class name
+  0,0,//no base classes
+  &(vtc_dd19[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd19),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd19),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  ee19  : virtual aa19 , virtual bb19 {
+  int e;
+   ee19(const ABISELECT(__tsi64,int) *const *); // _ZN4ee19C2Ev
+  virtual void  foo(); // _ZN4ee193fooEv
+  ~ee19(); // tgen
+  ee19(); // tgen
+};
+//SIG(-1 ee19) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee19 ::ee19(const ABISELECT(__tsi64,int) *const *){}
+void  ee19 ::foo(){vfunc_called(this, "_ZN4ee193fooEv");}
+ee19 ::~ee19(){ note_dtor("ee19", this);} // tgen
+ee19 ::ee19(){ note_ctor("ee19", this);} // tgen
+
+static void Test_ee19()
+{
+  extern Class_Descriptor cd_ee19;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee19, buf);
+    ee19 *dp, &lv = *(dp=new (buf) ee19());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee19)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee19)");
+    check_base_class_offset(lv, (aa19*), ABISELECT(16,8), "ee19");
+    check_base_class_offset(lv, (bb19*), ABISELECT(32,16), "ee19");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee19.e");
+    test_class_info(&lv, &cd_ee19);
+    dp->~ee19();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee19(Test_ee19, "ee19", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ee19C1Ev();
+extern void _ZN4ee19D1Ev();
+Name_Map name_map_ee19[] = {
+  NSPAIR(_ZN4ee19C1Ev),
+  NSPAIR(_ZN4ee19D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa19;
+extern VTBL_ENTRY _ZTI4aa19[];
+extern  VTBL_ENTRY _ZTV4aa19[];
+extern Class_Descriptor cd_bb19;
+extern VTBL_ENTRY _ZTI4bb19[];
+extern  VTBL_ENTRY _ZTV4bb19[];
+static Base_Class bases_ee19[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa19,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb19,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee19[];
+extern void _ZN4ee193fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv)();
+extern void ABISELECT(_ZThn16_N4ee193fooEv,_ZThn8_N4ee193fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv)();
+extern void ABISELECT(_ZThn32_N4ee193fooEv,_ZThn16_N4ee193fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee19[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee19[0]),
+  (VTBL_ENTRY)&_ZN4ee193fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee19[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee19[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee19[];
+static  VTT_ENTRY vtt_ee19[] = {
+  {&(_ZTV4ee19[4]),  4,13},
+  {&(_ZTV4ee19[8]),  8,13},
+  {&(_ZTV4ee19[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ee19[];
+extern  VTBL_ENTRY _ZTV4ee19[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee19[];
+static VTBL_ENTRY alt_thunk_names45[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee193fooEv,_ZThn16_N4ee193fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee193fooEv,_ZThn8_N4ee193fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee19 = {  "ee19", // class name
+  bases_ee19, 2,
+  &(vtc_ee19[0]), // expected_vtbl_contents
+  &(vtt_ee19[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ee19),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee19),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee19),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names45,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff19  : cc19 , dd19 {
+  int f;
+   ff19(); // _ZN4ff19C1Ev
+  virtual void  foo(); // _ZN4ff193fooEv
+  ~ff19(); // tgen
+};
+//SIG(-1 ff19) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff19 ::ff19(){ note_ctor("ff19", this);}
+void  ff19 ::foo(){vfunc_called(this, "_ZN4ff193fooEv");}
+ff19 ::~ff19(){ note_dtor("ff19", this);} // tgen
+
+static void Test_ff19()
+{
+  extern Class_Descriptor cd_ff19;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff19, buf);
+    ff19 *dp, &lv = *(dp=new (buf) ff19());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff19)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff19)");
+    check_base_class_offset(lv, (cc19*), 0, "ff19");
+    check_base_class_offset(lv, (dd19*), ABISELECT(16,8), "ff19");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff19.f");
+    test_class_info(&lv, &cd_ff19);
+    dp->~ff19();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff19(Test_ff19, "ff19", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff19C1Ev();
+extern void _ZN4ff19D1Ev();
+Name_Map name_map_ff19[] = {
+  NSPAIR(_ZN4ff19C1Ev),
+  NSPAIR(_ZN4ff19D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc19;
+extern VTBL_ENTRY _ZTI4cc19[];
+extern  VTBL_ENTRY _ZTV4cc19[];
+extern Class_Descriptor cd_dd19;
+extern VTBL_ENTRY _ZTI4dd19[];
+extern  VTBL_ENTRY _ZTV4dd19[];
+static Base_Class bases_ff19[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc19,    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},
+  {&cd_dd19,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ff19[];
+extern void _ZN4ff193fooEv();
+extern void ABISELECT(_ZThn16_N4ff193fooEv,_ZThn8_N4ff193fooEv)();
+static  VTBL_ENTRY vtc_ff19[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff19[0]),
+  (VTBL_ENTRY)&_ZN4ff193fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff19[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ff193fooEv,_ZThn8_N4ff193fooEv),
+};
+extern VTBL_ENTRY _ZTI4ff19[];
+extern  VTBL_ENTRY _ZTV4ff19[];
+Class_Descriptor cd_ff19 = {  "ff19", // class name
+  bases_ff19, 2,
+  &(vtc_ff19[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff19),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff19),6, //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  gg19  : virtual ee19 , ff19 {
+  int g;
+   gg19(const ABISELECT(__tsi64,int) *const *); // _ZN4gg19C2Ev
+  virtual void  foo(); // _ZN4gg193fooEv
+  ~gg19(); // tgen
+  gg19(); // tgen
+};
+//SIG(1 gg19) C1{ VBC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg19 ::gg19(const ABISELECT(__tsi64,int) *const *){}
+void  gg19 ::foo(){vfunc_called(this, "_ZN4gg193fooEv");}
+gg19 ::~gg19(){ note_dtor("gg19", this);} // tgen
+gg19 ::gg19(){ note_ctor("gg19", this);} // tgen
+
+static void Test_gg19()
+{
+  extern Class_Descriptor cd_gg19;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(12,13)];
+    init_test(&cd_gg19, buf);
+    gg19 *dp, &lv = *(dp=new (buf) gg19());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(88,48), "sizeof(gg19)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg19)");
+    check_base_class_offset(lv, (aa19*)(ee19*), ABISELECT(56,32), "gg19");
+    check_base_class_offset(lv, (bb19*)(ee19*), ABISELECT(72,40), "gg19");
+    check_base_class_offset(lv, (ee19*), ABISELECT(40,24), "gg19");
+    check_base_class_offset(lv, (cc19*)(ff19*), 0, "gg19");
+    check_base_class_offset(lv, (dd19*)(ff19*), ABISELECT(16,8), "gg19");
+    check_base_class_offset(lv, (ff19*), 0, "gg19");
+    check_field_offset(lv, g, ABISELECT(32,20), "gg19.g");
+    test_class_info(&lv, &cd_gg19);
+    dp->~gg19();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg19(Test_gg19, "gg19", ABISELECT(88,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg19C1Ev();
+extern void _ZN4gg19D1Ev();
+Name_Map name_map_gg19[] = {
+  NSPAIR(_ZN4gg19C1Ev),
+  NSPAIR(_ZN4gg19D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa19;
+extern VTBL_ENTRY _ZTI4aa19[];
+extern  VTBL_ENTRY _ZTV4aa19[];
+extern Class_Descriptor cd_bb19;
+extern VTBL_ENTRY _ZTI4bb19[];
+extern  VTBL_ENTRY _ZTV4bb19[];
+extern Class_Descriptor cd_ee19;
+extern VTBL_ENTRY _ZTI4ee19[];
+extern  VTBL_ENTRY _ZTV4ee19[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee19[];
+extern Class_Descriptor cd_cc19;
+extern VTBL_ENTRY _ZTI4cc19[];
+extern  VTBL_ENTRY _ZTV4cc19[];
+extern Class_Descriptor cd_dd19;
+extern VTBL_ENTRY _ZTI4dd19[];
+extern  VTBL_ENTRY _ZTV4dd19[];
+extern Class_Descriptor cd_ff19;
+extern VTBL_ENTRY _ZTI4ff19[];
+extern  VTBL_ENTRY _ZTV4ff19[];
+static Base_Class bases_gg19[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa19,    ABISELECT(56,32), //bcp->offset
+    15, //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_bb19,    ABISELECT(72,40), //bcp->offset
+    19, //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
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee19,    ABISELECT(40,24), //bcp->offset
+    9, //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},
+  {&cd_cc19,    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
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd19,    ABISELECT(16,8), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff19,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg19[];
+extern void _ZN4gg193fooEv();
+extern void ABISELECT(_ZThn16_N4gg193fooEv,_ZThn8_N4gg193fooEv)();
+extern void ABISELECT(_ZTv0_n40_N4gg193fooEv,_ZTv0_n20_N4gg193fooEv)();
+extern void ABISELECT(_ZThn40_N4gg193fooEv,_ZThn24_N4gg193fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg193fooEv,_ZTv0_n12_N4gg193fooEv)();
+extern void ABISELECT(_ZThn56_N4gg193fooEv,_ZThn32_N4gg193fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg193fooEv,_ZTv0_n12_N4gg193fooEv)();
+extern void ABISELECT(_ZThn72_N4gg193fooEv,_ZThn40_N4gg193fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg19[] = {
+  ABISELECT(72,40),
+  ABISELECT(56,32),
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg19[0]),
+  (VTBL_ENTRY)&_ZN4gg193fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg19[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg193fooEv,_ZThn8_N4gg193fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg19[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N4gg193fooEv,_ZTv0_n20_N4gg193fooEv),
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4gg19[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg193fooEv,_ZTv0_n12_N4gg193fooEv),
+  ABISELECT(-72,-40),
+  ABISELECT(-72,-40),
+  (VTBL_ENTRY)&(_ZTI4gg19[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg193fooEv,_ZTv0_n12_N4gg193fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg19[];
+extern void _ZN4ee193fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee19__4gg19[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee19[0]),
+  (VTBL_ENTRY)&_ZN4ee193fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv)();
+extern void ABISELECT(_ZThn16_N4ee193fooEv,_ZThn8_N4ee193fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa19__4ee19__4gg19[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee19[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv)();
+extern void ABISELECT(_ZThn32_N4ee193fooEv,_ZThn16_N4ee193fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb19__4ee19__4gg19[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee19[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv),
+};
+static  VTT_ENTRY vtt_gg19[] = {
+  {&(_ZTV4gg19[5]),  5,23},
+  {&(_ZTV4gg19[14]),  14,23},
+  {&(_ZTV4gg19[18]),  18,23},
+  {&(_ZTV4gg19[22]),  22,23},
+  {&(_tg__ZTV4ee19__4gg19[4]),  4,5},
+  {&(_tg__ZTV4aa19__4ee19__4gg19[3]),  3,4},
+  {&(_tg__ZTV4bb19__4ee19__4gg19[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg19[];
+extern  VTBL_ENTRY _ZTV4gg19[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg19[];
+static VTBL_ENTRY alt_thunk_names46[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee193fooEv,_ZTv0_n12_N4ee193fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee193fooEv,_ZThn16_N4ee193fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee193fooEv,_ZThn8_N4ee193fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg193fooEv,_ZTv0_n12_N4gg193fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn72_N4gg193fooEv,_ZThn40_N4gg193fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg193fooEv,_ZThn32_N4gg193fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N4gg193fooEv,_ZTv0_n20_N4gg193fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg193fooEv,_ZThn24_N4gg193fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg19 = {  "gg19", // class name
+  bases_gg19, 6,
+  &(vtc_gg19[0]), // expected_vtbl_contents
+  &(vtt_gg19[0]), // expected_vtt_contents
+  ABISELECT(88,48), // object size
+  NSPAIRA(_ZTI4gg19),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg19),23, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg19),7, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names46,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa20  {
+  int a;
+   aa20(); // _ZN4aa20C1Ev
+  virtual void  foo(); // _ZN4aa203fooEv
+  ~aa20(); // tgen
+};
+//SIG(-1 aa20) C1{ v1 Fi}
+
+
+ aa20 ::aa20(){ note_ctor("aa20", this);}
+void  aa20 ::foo(){vfunc_called(this, "_ZN4aa203fooEv");}
+aa20 ::~aa20(){ note_dtor("aa20", this);} // tgen
+
+static void Test_aa20()
+{
+  extern Class_Descriptor cd_aa20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa20, buf);
+    aa20 *dp, &lv = *(dp=new (buf) aa20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa20)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa20.a");
+    test_class_info(&lv, &cd_aa20);
+    dp->~aa20();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa20(Test_aa20, "aa20", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa20C1Ev();
+extern void _ZN4aa20D1Ev();
+Name_Map name_map_aa20[] = {
+  NSPAIR(_ZN4aa20C1Ev),
+  NSPAIR(_ZN4aa20D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa20[];
+extern void _ZN4aa203fooEv();
+static  VTBL_ENTRY vtc_aa20[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa20[0]),
+  (VTBL_ENTRY)&_ZN4aa203fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa20[];
+extern  VTBL_ENTRY _ZTV4aa20[];
+Class_Descriptor cd_aa20 = {  "aa20", // class name
+  0,0,//no base classes
+  &(vtc_aa20[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa20),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa20),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  bb20  {
+  int b;
+   bb20(); // _ZN4bb20C1Ev
+  virtual void  foo(); // _ZN4bb203fooEv
+  ~bb20(); // tgen
+};
+//SIG(-1 bb20) C1{ v1 Fi}
+
+
+ bb20 ::bb20(){ note_ctor("bb20", this);}
+void  bb20 ::foo(){vfunc_called(this, "_ZN4bb203fooEv");}
+bb20 ::~bb20(){ note_dtor("bb20", this);} // tgen
+
+static void Test_bb20()
+{
+  extern Class_Descriptor cd_bb20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb20, buf);
+    bb20 *dp, &lv = *(dp=new (buf) bb20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb20)");
+    check_field_offset(lv, b, ABISELECT(8,4), "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,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb20C1Ev();
+extern void _ZN4bb20D1Ev();
+Name_Map name_map_bb20[] = {
+  NSPAIR(_ZN4bb20C1Ev),
+  NSPAIR(_ZN4bb20D1Ev),
+  {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
+  0,0,//no base classes
+  &(vtc_bb20[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb20),ABISELECT(16,8), //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  cc20  {
+  int c;
+   cc20(); // _ZN4cc20C1Ev
+  virtual void  foo(); // _ZN4cc203fooEv
+  ~cc20(); // tgen
+};
+//SIG(-1 cc20) C1{ v1 Fi}
+
+
+ cc20 ::cc20(){ note_ctor("cc20", this);}
+void  cc20 ::foo(){vfunc_called(this, "_ZN4cc203fooEv");}
+cc20 ::~cc20(){ note_dtor("cc20", this);} // tgen
+
+static void Test_cc20()
+{
+  extern Class_Descriptor cd_cc20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc20, buf);
+    cc20 *dp, &lv = *(dp=new (buf) cc20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc20)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc20.c");
+    test_class_info(&lv, &cd_cc20);
+    dp->~cc20();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc20(Test_cc20, "cc20", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc20C1Ev();
+extern void _ZN4cc20D1Ev();
+Name_Map name_map_cc20[] = {
+  NSPAIR(_ZN4cc20C1Ev),
+  NSPAIR(_ZN4cc20D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc20[];
+extern void _ZN4cc203fooEv();
+static  VTBL_ENTRY vtc_cc20[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc20[0]),
+  (VTBL_ENTRY)&_ZN4cc203fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc20[];
+extern  VTBL_ENTRY _ZTV4cc20[];
+Class_Descriptor cd_cc20 = {  "cc20", // class name
+  0,0,//no base classes
+  &(vtc_cc20[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc20),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc20),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  dd20  {
+  int d;
+   dd20(); // _ZN4dd20C1Ev
+  virtual void  foo(); // _ZN4dd203fooEv
+  ~dd20(); // tgen
+};
+//SIG(-1 dd20) C1{ v1 Fi}
+
+
+ dd20 ::dd20(){ note_ctor("dd20", this);}
+void  dd20 ::foo(){vfunc_called(this, "_ZN4dd203fooEv");}
+dd20 ::~dd20(){ note_dtor("dd20", this);} // tgen
+
+static void Test_dd20()
+{
+  extern Class_Descriptor cd_dd20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd20, buf);
+    dd20 *dp, &lv = *(dp=new (buf) dd20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd20)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd20.d");
+    test_class_info(&lv, &cd_dd20);
+    dp->~dd20();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd20(Test_dd20, "dd20", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd20C1Ev();
+extern void _ZN4dd20D1Ev();
+Name_Map name_map_dd20[] = {
+  NSPAIR(_ZN4dd20C1Ev),
+  NSPAIR(_ZN4dd20D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd20[];
+extern void _ZN4dd203fooEv();
+static  VTBL_ENTRY vtc_dd20[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd20[0]),
+  (VTBL_ENTRY)&_ZN4dd203fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd20[];
+extern  VTBL_ENTRY _ZTV4dd20[];
+Class_Descriptor cd_dd20 = {  "dd20", // class name
+  0,0,//no base classes
+  &(vtc_dd20[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd20),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd20),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  ee20  : aa20 , bb20 {
+  int e;
+   ee20(); // _ZN4ee20C1Ev
+  virtual void  foo(); // _ZN4ee203fooEv
+  ~ee20(); // tgen
+};
+//SIG(-1 ee20) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee20 ::ee20(){ note_ctor("ee20", this);}
+void  ee20 ::foo(){vfunc_called(this, "_ZN4ee203fooEv");}
+ee20 ::~ee20(){ note_dtor("ee20", this);} // tgen
+
+static void Test_ee20()
+{
+  extern Class_Descriptor cd_ee20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee20, buf);
+    ee20 *dp, &lv = *(dp=new (buf) ee20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee20)");
+    check_base_class_offset(lv, (aa20*), 0, "ee20");
+    check_base_class_offset(lv, (bb20*), ABISELECT(16,8), "ee20");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee20.e");
+    test_class_info(&lv, &cd_ee20);
+    dp->~ee20();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee20(Test_ee20, "ee20", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee20C1Ev();
+extern void _ZN4ee20D1Ev();
+Name_Map name_map_ee20[] = {
+  NSPAIR(_ZN4ee20C1Ev),
+  NSPAIR(_ZN4ee20D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa20;
+extern VTBL_ENTRY _ZTI4aa20[];
+extern  VTBL_ENTRY _ZTV4aa20[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+static Base_Class bases_ee20[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa20,    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},
+  {&cd_bb20,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ee20[];
+extern void _ZN4ee203fooEv();
+extern void ABISELECT(_ZThn16_N4ee203fooEv,_ZThn8_N4ee203fooEv)();
+static  VTBL_ENTRY vtc_ee20[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee20[0]),
+  (VTBL_ENTRY)&_ZN4ee203fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee20[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ee203fooEv,_ZThn8_N4ee203fooEv),
+};
+extern VTBL_ENTRY _ZTI4ee20[];
+extern  VTBL_ENTRY _ZTV4ee20[];
+Class_Descriptor cd_ee20 = {  "ee20", // class name
+  bases_ee20, 2,
+  &(vtc_ee20[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee20),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee20),6, //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  ff20  : virtual cc20 , dd20 {
+  int f;
+   ff20(const ABISELECT(__tsi64,int) *const *); // _ZN4ff20C2Ev
+  virtual void  foo(); // _ZN4ff203fooEv
+  ~ff20(); // tgen
+  ff20(); // tgen
+};
+//SIG(-1 ff20) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff20 ::ff20(const ABISELECT(__tsi64,int) *const *){}
+void  ff20 ::foo(){vfunc_called(this, "_ZN4ff203fooEv");}
+ff20 ::~ff20(){ note_dtor("ff20", this);} // tgen
+ff20 ::ff20(){ note_ctor("ff20", this);} // tgen
+
+static void Test_ff20()
+{
+  extern Class_Descriptor cd_ff20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff20, buf);
+    ff20 *dp, &lv = *(dp=new (buf) ff20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff20)");
+    check_base_class_offset(lv, (cc20*), ABISELECT(16,12), "ff20");
+    check_base_class_offset(lv, (dd20*), 0, "ff20");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff20.f");
+    test_class_info(&lv, &cd_ff20);
+    dp->~ff20();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff20(Test_ff20, "ff20", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff20C1Ev();
+extern void _ZN4ff20D1Ev();
+Name_Map name_map_ff20[] = {
+  NSPAIR(_ZN4ff20C1Ev),
+  NSPAIR(_ZN4ff20D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc20;
+extern VTBL_ENTRY _ZTI4cc20[];
+extern  VTBL_ENTRY _ZTV4cc20[];
+extern Class_Descriptor cd_dd20;
+extern VTBL_ENTRY _ZTI4dd20[];
+extern  VTBL_ENTRY _ZTV4dd20[];
+static Base_Class bases_ff20[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc20,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd20,    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 _ZTI4ff20[];
+extern void _ZN4ff203fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff203fooEv,_ZTv0_n12_N4ff203fooEv)();
+extern void ABISELECT(_ZThn16_N4ff203fooEv,_ZThn12_N4ff203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff20[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff20[0]),
+  (VTBL_ENTRY)&_ZN4ff203fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff20[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff203fooEv,_ZTv0_n12_N4ff203fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff20[];
+static  VTT_ENTRY vtt_ff20[] = {
+  {&(_ZTV4ff20[3]),  3,8},
+  {&(_ZTV4ff20[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff20[];
+extern  VTBL_ENTRY _ZTV4ff20[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff20[];
+static VTBL_ENTRY alt_thunk_names47[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff203fooEv,_ZTv0_n12_N4ff203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff203fooEv,_ZThn12_N4ff203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff20 = {  "ff20", // class name
+  bases_ff20, 2,
+  &(vtc_ff20[0]), // expected_vtbl_contents
+  &(vtt_ff20[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff20),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff20),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff20),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names47,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg20  : virtual ee20 , ff20 {
+  int g;
+   gg20(const ABISELECT(__tsi64,int) *const *); // _ZN4gg20C2Ev
+  virtual void  foo(); // _ZN4gg203fooEv
+  ~gg20(); // tgen
+  gg20(); // tgen
+};
+//SIG(1 gg20) C1{ VBC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg20 ::gg20(const ABISELECT(__tsi64,int) *const *){}
+void  gg20 ::foo(){vfunc_called(this, "_ZN4gg203fooEv");}
+gg20 ::~gg20(){ note_dtor("gg20", this);} // tgen
+gg20 ::gg20(){ note_ctor("gg20", this);} // tgen
+
+static void Test_gg20()
+{
+  extern Class_Descriptor cd_gg20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg20, buf);
+    gg20 *dp, &lv = *(dp=new (buf) gg20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg20)");
+    check_base_class_offset(lv, (aa20*)(ee20*), ABISELECT(24,16), "gg20");
+    check_base_class_offset(lv, (bb20*)(ee20*), ABISELECT(40,24), "gg20");
+    check_base_class_offset(lv, (ee20*), ABISELECT(24,16), "gg20");
+    check_base_class_offset(lv, (cc20*)(ff20*), ABISELECT(56,36), "gg20");
+    check_base_class_offset(lv, (dd20*)(ff20*), 0, "gg20");
+    check_base_class_offset(lv, (ff20*), 0, "gg20");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg20.g");
+    test_class_info(&lv, &cd_gg20);
+    dp->~gg20();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg20(Test_gg20, "gg20", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg20C1Ev();
+extern void _ZN4gg20D1Ev();
+Name_Map name_map_gg20[] = {
+  NSPAIR(_ZN4gg20C1Ev),
+  NSPAIR(_ZN4gg20D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa20;
+extern VTBL_ENTRY _ZTI4aa20[];
+extern  VTBL_ENTRY _ZTV4aa20[];
+extern Class_Descriptor cd_bb20;
+extern VTBL_ENTRY _ZTI4bb20[];
+extern  VTBL_ENTRY _ZTV4bb20[];
+extern Class_Descriptor cd_ee20;
+extern VTBL_ENTRY _ZTI4ee20[];
+extern  VTBL_ENTRY _ZTV4ee20[];
+extern Class_Descriptor cd_cc20;
+extern VTBL_ENTRY _ZTI4cc20[];
+extern  VTBL_ENTRY _ZTV4cc20[];
+extern Class_Descriptor cd_dd20;
+extern VTBL_ENTRY _ZTI4dd20[];
+extern  VTBL_ENTRY _ZTV4dd20[];
+extern Class_Descriptor cd_ff20;
+extern VTBL_ENTRY _ZTI4ff20[];
+extern  VTBL_ENTRY _ZTV4ff20[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff20[];
+static Base_Class bases_gg20[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa20,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb20,    ABISELECT(40,24), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee20,    ABISELECT(24,16), //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
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc20,    ABISELECT(56,36), //bcp->offset
+    12, //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
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd20,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff20,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg20[];
+extern void _ZN4gg203fooEv();
+extern void ABISELECT(_ZTv0_n24_N4gg203fooEv,_ZTv0_n12_N4gg203fooEv)();
+extern void ABISELECT(_ZThn24_N4gg203fooEv,_ZThn16_N4gg203fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTvn16_n24_N4gg203fooEv,_ZTvn8_n12_N4gg203fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg203fooEv,_ZTv0_n12_N4gg203fooEv)();
+extern void ABISELECT(_ZThn56_N4gg203fooEv,_ZThn36_N4gg203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg20[] = {
+  ABISELECT(24,16),
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg20[0]),
+  (VTBL_ENTRY)&_ZN4gg203fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg20[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg203fooEv,_ZTv0_n12_N4gg203fooEv),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg20[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n24_N4gg203fooEv,_ZTvn8_n12_N4gg203fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg20[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg203fooEv,_ZTv0_n12_N4gg203fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg20[];
+extern void _ZN4ff203fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff20__4gg20[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff20[0]),
+  (VTBL_ENTRY)&_ZN4ff203fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff203fooEv,_ZTv0_n12_N4ff203fooEv)();
+extern void ABISELECT(_ZThn56_N4ff203fooEv,_ZThn36_N4ff203fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc20__4ff20__4gg20[] = {
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4ff20[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff203fooEv,_ZTv0_n12_N4ff203fooEv),
+};
+static  VTT_ENTRY vtt_gg20[] = {
+  {&(_ZTV4gg20[4]),  4,16},
+  {&(_tg__ZTV4ff20__4gg20[3]),  3,4},
+  {&(_tg__ZTV4cc20__4ff20__4gg20[3]),  3,4},
+  {&(_ZTV4gg20[8]),  8,16},
+  {&(_ZTV4gg20[11]),  11,16},
+  {&(_ZTV4gg20[15]),  15,16},
+};
+extern VTBL_ENTRY _ZTI4gg20[];
+extern  VTBL_ENTRY _ZTV4gg20[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg20[];
+static VTBL_ENTRY alt_thunk_names48[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff203fooEv,_ZTv0_n12_N4ff203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4ff203fooEv,_ZThn36_N4ff203fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg203fooEv,_ZTv0_n12_N4gg203fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg203fooEv,_ZThn36_N4gg203fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg203fooEv,_ZThn16_N4gg203fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg20 = {  "gg20", // class name
+  bases_gg20, 6,
+  &(vtc_gg20[0]), // expected_vtbl_contents
+  &(vtt_gg20[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg20),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg20),16, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg20),6, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names48,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa21  {
+  int a;
+   aa21(); // _ZN4aa21C1Ev
+  virtual void  foo(); // _ZN4aa213fooEv
+  ~aa21(); // tgen
+};
+//SIG(-1 aa21) C1{ v1 Fi}
+
+
+ aa21 ::aa21(){ note_ctor("aa21", this);}
+void  aa21 ::foo(){vfunc_called(this, "_ZN4aa213fooEv");}
+aa21 ::~aa21(){ note_dtor("aa21", this);} // tgen
+
+static void Test_aa21()
+{
+  extern Class_Descriptor cd_aa21;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa21, buf);
+    aa21 *dp, &lv = *(dp=new (buf) aa21());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa21)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa21)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa21.a");
+    test_class_info(&lv, &cd_aa21);
+    dp->~aa21();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa21(Test_aa21, "aa21", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa21C1Ev();
+extern void _ZN4aa21D1Ev();
+Name_Map name_map_aa21[] = {
+  NSPAIR(_ZN4aa21C1Ev),
+  NSPAIR(_ZN4aa21D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa21[];
+extern void _ZN4aa213fooEv();
+static  VTBL_ENTRY vtc_aa21[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa21[0]),
+  (VTBL_ENTRY)&_ZN4aa213fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa21[];
+extern  VTBL_ENTRY _ZTV4aa21[];
+Class_Descriptor cd_aa21 = {  "aa21", // class name
+  0,0,//no base classes
+  &(vtc_aa21[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa21),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa21),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  bb21  {
+  int b;
+   bb21(); // _ZN4bb21C1Ev
+  virtual void  foo(); // _ZN4bb213fooEv
+  ~bb21(); // tgen
+};
+//SIG(-1 bb21) C1{ v1 Fi}
+
+
+ bb21 ::bb21(){ note_ctor("bb21", this);}
+void  bb21 ::foo(){vfunc_called(this, "_ZN4bb213fooEv");}
+bb21 ::~bb21(){ note_dtor("bb21", this);} // tgen
+
+static void Test_bb21()
+{
+  extern Class_Descriptor cd_bb21;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb21, buf);
+    bb21 *dp, &lv = *(dp=new (buf) bb21());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb21)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb21)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb21.b");
+    test_class_info(&lv, &cd_bb21);
+    dp->~bb21();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb21(Test_bb21, "bb21", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb21C1Ev();
+extern void _ZN4bb21D1Ev();
+Name_Map name_map_bb21[] = {
+  NSPAIR(_ZN4bb21C1Ev),
+  NSPAIR(_ZN4bb21D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb21[];
+extern void _ZN4bb213fooEv();
+static  VTBL_ENTRY vtc_bb21[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb21[0]),
+  (VTBL_ENTRY)&_ZN4bb213fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb21[];
+extern  VTBL_ENTRY _ZTV4bb21[];
+Class_Descriptor cd_bb21 = {  "bb21", // class name
+  0,0,//no base classes
+  &(vtc_bb21[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb21),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb21),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  cc21  {
+  int c;
+   cc21(); // _ZN4cc21C1Ev
+  virtual void  foo(); // _ZN4cc213fooEv
+  ~cc21(); // tgen
+};
+//SIG(-1 cc21) C1{ v1 Fi}
+
+
+ cc21 ::cc21(){ note_ctor("cc21", this);}
+void  cc21 ::foo(){vfunc_called(this, "_ZN4cc213fooEv");}
+cc21 ::~cc21(){ note_dtor("cc21", this);} // tgen
+
+static void Test_cc21()
+{
+  extern Class_Descriptor cd_cc21;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc21, buf);
+    cc21 *dp, &lv = *(dp=new (buf) cc21());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc21)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc21)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc21.c");
+    test_class_info(&lv, &cd_cc21);
+    dp->~cc21();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc21(Test_cc21, "cc21", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc21C1Ev();
+extern void _ZN4cc21D1Ev();
+Name_Map name_map_cc21[] = {
+  NSPAIR(_ZN4cc21C1Ev),
+  NSPAIR(_ZN4cc21D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc21[];
+extern void _ZN4cc213fooEv();
+static  VTBL_ENTRY vtc_cc21[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc21[0]),
+  (VTBL_ENTRY)&_ZN4cc213fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc21[];
+extern  VTBL_ENTRY _ZTV4cc21[];
+Class_Descriptor cd_cc21 = {  "cc21", // class name
+  0,0,//no base classes
+  &(vtc_cc21[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc21),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc21),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  dd21  {
+  int d;
+   dd21(); // _ZN4dd21C1Ev
+  virtual void  foo(); // _ZN4dd213fooEv
+  ~dd21(); // tgen
+};
+//SIG(-1 dd21) C1{ v1 Fi}
+
+
+ dd21 ::dd21(){ note_ctor("dd21", this);}
+void  dd21 ::foo(){vfunc_called(this, "_ZN4dd213fooEv");}
+dd21 ::~dd21(){ note_dtor("dd21", this);} // tgen
+
+static void Test_dd21()
+{
+  extern Class_Descriptor cd_dd21;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd21, buf);
+    dd21 *dp, &lv = *(dp=new (buf) dd21());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd21)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd21)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd21.d");
+    test_class_info(&lv, &cd_dd21);
+    dp->~dd21();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd21(Test_dd21, "dd21", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd21C1Ev();
+extern void _ZN4dd21D1Ev();
+Name_Map name_map_dd21[] = {
+  NSPAIR(_ZN4dd21C1Ev),
+  NSPAIR(_ZN4dd21D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd21[];
+extern void _ZN4dd213fooEv();
+static  VTBL_ENTRY vtc_dd21[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd21[0]),
+  (VTBL_ENTRY)&_ZN4dd213fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd21[];
+extern  VTBL_ENTRY _ZTV4dd21[];
+Class_Descriptor cd_dd21 = {  "dd21", // class name
+  0,0,//no base classes
+  &(vtc_dd21[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd21),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd21),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  ee21  : virtual aa21 , bb21 {
+  int e;
+   ee21(const ABISELECT(__tsi64,int) *const *); // _ZN4ee21C2Ev
+  virtual void  foo(); // _ZN4ee213fooEv
+  ~ee21(); // tgen
+  ee21(); // tgen
+};
+//SIG(-1 ee21) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee21 ::ee21(const ABISELECT(__tsi64,int) *const *){}
+void  ee21 ::foo(){vfunc_called(this, "_ZN4ee213fooEv");}
+ee21 ::~ee21(){ note_dtor("ee21", this);} // tgen
+ee21 ::ee21(){ note_ctor("ee21", this);} // tgen
+
+static void Test_ee21()
+{
+  extern Class_Descriptor cd_ee21;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee21, buf);
+    ee21 *dp, &lv = *(dp=new (buf) ee21());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee21)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee21)");
+    check_base_class_offset(lv, (aa21*), ABISELECT(16,12), "ee21");
+    check_base_class_offset(lv, (bb21*), 0, "ee21");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee21.e");
+    test_class_info(&lv, &cd_ee21);
+    dp->~ee21();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee21(Test_ee21, "ee21", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee21C1Ev();
+extern void _ZN4ee21D1Ev();
+Name_Map name_map_ee21[] = {
+  NSPAIR(_ZN4ee21C1Ev),
+  NSPAIR(_ZN4ee21D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa21;
+extern VTBL_ENTRY _ZTI4aa21[];
+extern  VTBL_ENTRY _ZTV4aa21[];
+extern Class_Descriptor cd_bb21;
+extern VTBL_ENTRY _ZTI4bb21[];
+extern  VTBL_ENTRY _ZTV4bb21[];
+static Base_Class bases_ee21[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa21,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb21,    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 _ZTI4ee21[];
+extern void _ZN4ee213fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee213fooEv,_ZTv0_n12_N4ee213fooEv)();
+extern void ABISELECT(_ZThn16_N4ee213fooEv,_ZThn12_N4ee213fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee21[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee21[0]),
+  (VTBL_ENTRY)&_ZN4ee213fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee21[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee213fooEv,_ZTv0_n12_N4ee213fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee21[];
+static  VTT_ENTRY vtt_ee21[] = {
+  {&(_ZTV4ee21[3]),  3,8},
+  {&(_ZTV4ee21[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee21[];
+extern  VTBL_ENTRY _ZTV4ee21[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee21[];
+static VTBL_ENTRY alt_thunk_names49[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee213fooEv,_ZTv0_n12_N4ee213fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee213fooEv,_ZThn12_N4ee213fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee21 = {  "ee21", // class name
+  bases_ee21, 2,
+  &(vtc_ee21[0]), // expected_vtbl_contents
+  &(vtt_ee21[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee21),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee21),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee21),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names49,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff21  : virtual cc21 , dd21 {
+  int f;
+   ff21(const ABISELECT(__tsi64,int) *const *); // _ZN4ff21C2Ev
+  virtual void  foo(); // _ZN4ff213fooEv
+  ~ff21(); // tgen
+  ff21(); // tgen
+};
+//SIG(-1 ff21) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff21 ::ff21(const ABISELECT(__tsi64,int) *const *){}
+void  ff21 ::foo(){vfunc_called(this, "_ZN4ff213fooEv");}
+ff21 ::~ff21(){ note_dtor("ff21", this);} // tgen
+ff21 ::ff21(){ note_ctor("ff21", this);} // tgen
+
+static void Test_ff21()
+{
+  extern Class_Descriptor cd_ff21;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff21, buf);
+    ff21 *dp, &lv = *(dp=new (buf) ff21());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff21)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff21)");
+    check_base_class_offset(lv, (cc21*), ABISELECT(16,12), "ff21");
+    check_base_class_offset(lv, (dd21*), 0, "ff21");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff21.f");
+    test_class_info(&lv, &cd_ff21);
+    dp->~ff21();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff21(Test_ff21, "ff21", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff21C1Ev();
+extern void _ZN4ff21D1Ev();
+Name_Map name_map_ff21[] = {
+  NSPAIR(_ZN4ff21C1Ev),
+  NSPAIR(_ZN4ff21D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc21;
+extern VTBL_ENTRY _ZTI4cc21[];
+extern  VTBL_ENTRY _ZTV4cc21[];
+extern Class_Descriptor cd_dd21;
+extern VTBL_ENTRY _ZTI4dd21[];
+extern  VTBL_ENTRY _ZTV4dd21[];
+static Base_Class bases_ff21[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc21,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd21,    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 _ZTI4ff21[];
+extern void _ZN4ff213fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff213fooEv,_ZTv0_n12_N4ff213fooEv)();
+extern void ABISELECT(_ZThn16_N4ff213fooEv,_ZThn12_N4ff213fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff21[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff21[0]),
+  (VTBL_ENTRY)&_ZN4ff213fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff21[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff213fooEv,_ZTv0_n12_N4ff213fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff21[];
+static  VTT_ENTRY vtt_ff21[] = {
+  {&(_ZTV4ff21[3]),  3,8},
+  {&(_ZTV4ff21[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff21[];
+extern  VTBL_ENTRY _ZTV4ff21[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff21[];
+static VTBL_ENTRY alt_thunk_names50[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff213fooEv,_ZTv0_n12_N4ff213fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff213fooEv,_ZThn12_N4ff213fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff21 = {  "ff21", // class name
+  bases_ff21, 2,
+  &(vtc_ff21[0]), // expected_vtbl_contents
+  &(vtt_ff21[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff21),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff21),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff21),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names50,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg21  : virtual ee21 , ff21 {
+  int g;
+   gg21(const ABISELECT(__tsi64,int) *const *); // _ZN4gg21C2Ev
+  virtual void  foo(); // _ZN4gg213fooEv
+  ~gg21(); // tgen
+  gg21(); // tgen
+};
+//SIG(1 gg21) C1{ VBC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg21 ::gg21(const ABISELECT(__tsi64,int) *const *){}
+void  gg21 ::foo(){vfunc_called(this, "_ZN4gg213fooEv");}
+gg21 ::~gg21(){ note_dtor("gg21", this);} // tgen
+gg21 ::gg21(){ note_ctor("gg21", this);} // tgen
+
+static void Test_gg21()
+{
+  extern Class_Descriptor cd_gg21;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg21, buf);
+    gg21 *dp, &lv = *(dp=new (buf) gg21());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg21)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg21)");
+    check_base_class_offset(lv, (aa21*)(ee21*), ABISELECT(40,28), "gg21");
+    check_base_class_offset(lv, (bb21*)(ee21*), ABISELECT(24,16), "gg21");
+    check_base_class_offset(lv, (ee21*), ABISELECT(24,16), "gg21");
+    check_base_class_offset(lv, (cc21*)(ff21*), ABISELECT(56,36), "gg21");
+    check_base_class_offset(lv, (dd21*)(ff21*), 0, "gg21");
+    check_base_class_offset(lv, (ff21*), 0, "gg21");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg21.g");
+    test_class_info(&lv, &cd_gg21);
+    dp->~gg21();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg21(Test_gg21, "gg21", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg21C1Ev();
+extern void _ZN4gg21D1Ev();
+Name_Map name_map_gg21[] = {
+  NSPAIR(_ZN4gg21C1Ev),
+  NSPAIR(_ZN4gg21D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa21;
+extern VTBL_ENTRY _ZTI4aa21[];
+extern  VTBL_ENTRY _ZTV4aa21[];
+extern Class_Descriptor cd_bb21;
+extern VTBL_ENTRY _ZTI4bb21[];
+extern  VTBL_ENTRY _ZTV4bb21[];
+extern Class_Descriptor cd_ee21;
+extern VTBL_ENTRY _ZTI4ee21[];
+extern  VTBL_ENTRY _ZTV4ee21[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee21[];
+extern Class_Descriptor cd_cc21;
+extern VTBL_ENTRY _ZTI4cc21[];
+extern  VTBL_ENTRY _ZTV4cc21[];
+extern Class_Descriptor cd_dd21;
+extern VTBL_ENTRY _ZTI4dd21[];
+extern  VTBL_ENTRY _ZTV4dd21[];
+extern Class_Descriptor cd_ff21;
+extern VTBL_ENTRY _ZTI4ff21[];
+extern  VTBL_ENTRY _ZTV4ff21[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff21[];
+static Base_Class bases_gg21[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa21,    ABISELECT(40,28), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb21,    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
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee21,    ABISELECT(24,16), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc21,    ABISELECT(56,36), //bcp->offset
+    15, //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
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd21,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff21,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg21[];
+extern void _ZN4gg213fooEv();
+extern void ABISELECT(_ZTv0_n32_N4gg213fooEv,_ZTv0_n16_N4gg213fooEv)();
+extern void ABISELECT(_ZThn24_N4gg213fooEv,_ZThn16_N4gg213fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg213fooEv,_ZTv0_n12_N4gg213fooEv)();
+extern void ABISELECT(_ZThn40_N4gg213fooEv,_ZThn28_N4gg213fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg213fooEv,_ZTv0_n12_N4gg213fooEv)();
+extern void ABISELECT(_ZThn56_N4gg213fooEv,_ZThn36_N4gg213fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg21[] = {
+  ABISELECT(40,28),
+  ABISELECT(24,16),
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg21[0]),
+  (VTBL_ENTRY)&_ZN4gg213fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(16,12),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg21[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg213fooEv,_ZTv0_n16_N4gg213fooEv),
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI4gg21[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg213fooEv,_ZTv0_n12_N4gg213fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg21[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg213fooEv,_ZTv0_n12_N4gg213fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg21[];
+extern void _ZN4ff213fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff21__4gg21[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff21[0]),
+  (VTBL_ENTRY)&_ZN4ff213fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff213fooEv,_ZTv0_n12_N4ff213fooEv)();
+extern void ABISELECT(_ZThn56_N4ff213fooEv,_ZThn36_N4ff213fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc21__4ff21__4gg21[] = {
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4ff21[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff213fooEv,_ZTv0_n12_N4ff213fooEv),
+};
+extern void _ZN4ee213fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee21__4gg21[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee21[0]),
+  (VTBL_ENTRY)&_ZN4ee213fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee213fooEv,_ZTv0_n12_N4ee213fooEv)();
+extern void ABISELECT(_ZThn16_N4ee213fooEv,_ZThn12_N4ee213fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa21__4ee21__4gg21[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee21[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee213fooEv,_ZTv0_n12_N4ee213fooEv),
+};
+static  VTT_ENTRY vtt_gg21[] = {
+  {&(_ZTV4gg21[5]),  5,19},
+  {&(_tg__ZTV4ff21__4gg21[3]),  3,4},
+  {&(_tg__ZTV4cc21__4ff21__4gg21[3]),  3,4},
+  {&(_ZTV4gg21[10]),  10,19},
+  {&(_ZTV4gg21[14]),  14,19},
+  {&(_ZTV4gg21[18]),  18,19},
+  {&(_tg__ZTV4ee21__4gg21[3]),  3,4},
+  {&(_tg__ZTV4aa21__4ee21__4gg21[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg21[];
+extern  VTBL_ENTRY _ZTV4gg21[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg21[];
+static VTBL_ENTRY alt_thunk_names51[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee213fooEv,_ZTv0_n12_N4ee213fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee213fooEv,_ZThn12_N4ee213fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff213fooEv,_ZTv0_n12_N4ff213fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4ff213fooEv,_ZThn36_N4ff213fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg213fooEv,_ZTv0_n12_N4gg213fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg213fooEv,_ZThn36_N4gg213fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg213fooEv,_ZThn28_N4gg213fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg213fooEv,_ZTv0_n16_N4gg213fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg213fooEv,_ZThn16_N4gg213fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg21 = {  "gg21", // class name
+  bases_gg21, 6,
+  &(vtc_gg21[0]), // expected_vtbl_contents
+  &(vtt_gg21[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg21),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg21),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg21),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names51,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa22  {
+  int a;
+   aa22(); // _ZN4aa22C1Ev
+  virtual void  foo(); // _ZN4aa223fooEv
+  ~aa22(); // tgen
+};
+//SIG(-1 aa22) C1{ v1 Fi}
+
+
+ aa22 ::aa22(){ note_ctor("aa22", this);}
+void  aa22 ::foo(){vfunc_called(this, "_ZN4aa223fooEv");}
+aa22 ::~aa22(){ note_dtor("aa22", this);} // tgen
+
+static void Test_aa22()
+{
+  extern Class_Descriptor cd_aa22;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa22, buf);
+    aa22 *dp, &lv = *(dp=new (buf) aa22());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa22)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa22)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa22.a");
+    test_class_info(&lv, &cd_aa22);
+    dp->~aa22();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa22(Test_aa22, "aa22", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa22C1Ev();
+extern void _ZN4aa22D1Ev();
+Name_Map name_map_aa22[] = {
+  NSPAIR(_ZN4aa22C1Ev),
+  NSPAIR(_ZN4aa22D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa22[];
+extern void _ZN4aa223fooEv();
+static  VTBL_ENTRY vtc_aa22[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa22[0]),
+  (VTBL_ENTRY)&_ZN4aa223fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa22[];
+extern  VTBL_ENTRY _ZTV4aa22[];
+Class_Descriptor cd_aa22 = {  "aa22", // class name
+  0,0,//no base classes
+  &(vtc_aa22[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa22),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa22),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  bb22  {
+  int b;
+   bb22(); // _ZN4bb22C1Ev
+  virtual void  foo(); // _ZN4bb223fooEv
+  ~bb22(); // tgen
+};
+//SIG(-1 bb22) C1{ v1 Fi}
+
+
+ bb22 ::bb22(){ note_ctor("bb22", this);}
+void  bb22 ::foo(){vfunc_called(this, "_ZN4bb223fooEv");}
+bb22 ::~bb22(){ note_dtor("bb22", this);} // tgen
+
+static void Test_bb22()
+{
+  extern Class_Descriptor cd_bb22;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb22, buf);
+    bb22 *dp, &lv = *(dp=new (buf) bb22());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb22)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb22)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb22.b");
+    test_class_info(&lv, &cd_bb22);
+    dp->~bb22();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb22(Test_bb22, "bb22", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb22C1Ev();
+extern void _ZN4bb22D1Ev();
+Name_Map name_map_bb22[] = {
+  NSPAIR(_ZN4bb22C1Ev),
+  NSPAIR(_ZN4bb22D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb22[];
+extern void _ZN4bb223fooEv();
+static  VTBL_ENTRY vtc_bb22[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb22[0]),
+  (VTBL_ENTRY)&_ZN4bb223fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb22[];
+extern  VTBL_ENTRY _ZTV4bb22[];
+Class_Descriptor cd_bb22 = {  "bb22", // class name
+  0,0,//no base classes
+  &(vtc_bb22[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb22),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb22),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  cc22  {
+  int c;
+   cc22(); // _ZN4cc22C1Ev
+  virtual void  foo(); // _ZN4cc223fooEv
+  ~cc22(); // tgen
+};
+//SIG(-1 cc22) C1{ v1 Fi}
+
+
+ cc22 ::cc22(){ note_ctor("cc22", this);}
+void  cc22 ::foo(){vfunc_called(this, "_ZN4cc223fooEv");}
+cc22 ::~cc22(){ note_dtor("cc22", this);} // tgen
+
+static void Test_cc22()
+{
+  extern Class_Descriptor cd_cc22;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc22, buf);
+    cc22 *dp, &lv = *(dp=new (buf) cc22());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc22)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc22)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc22.c");
+    test_class_info(&lv, &cd_cc22);
+    dp->~cc22();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc22(Test_cc22, "cc22", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc22C1Ev();
+extern void _ZN4cc22D1Ev();
+Name_Map name_map_cc22[] = {
+  NSPAIR(_ZN4cc22C1Ev),
+  NSPAIR(_ZN4cc22D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc22[];
+extern void _ZN4cc223fooEv();
+static  VTBL_ENTRY vtc_cc22[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc22[0]),
+  (VTBL_ENTRY)&_ZN4cc223fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc22[];
+extern  VTBL_ENTRY _ZTV4cc22[];
+Class_Descriptor cd_cc22 = {  "cc22", // class name
+  0,0,//no base classes
+  &(vtc_cc22[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc22),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc22),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  dd22  {
+  int d;
+   dd22(); // _ZN4dd22C1Ev
+  virtual void  foo(); // _ZN4dd223fooEv
+  ~dd22(); // tgen
+};
+//SIG(-1 dd22) C1{ v1 Fi}
+
+
+ dd22 ::dd22(){ note_ctor("dd22", this);}
+void  dd22 ::foo(){vfunc_called(this, "_ZN4dd223fooEv");}
+dd22 ::~dd22(){ note_dtor("dd22", this);} // tgen
+
+static void Test_dd22()
+{
+  extern Class_Descriptor cd_dd22;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd22, buf);
+    dd22 *dp, &lv = *(dp=new (buf) dd22());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd22)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd22)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd22.d");
+    test_class_info(&lv, &cd_dd22);
+    dp->~dd22();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd22(Test_dd22, "dd22", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd22C1Ev();
+extern void _ZN4dd22D1Ev();
+Name_Map name_map_dd22[] = {
+  NSPAIR(_ZN4dd22C1Ev),
+  NSPAIR(_ZN4dd22D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd22[];
+extern void _ZN4dd223fooEv();
+static  VTBL_ENTRY vtc_dd22[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd22[0]),
+  (VTBL_ENTRY)&_ZN4dd223fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd22[];
+extern  VTBL_ENTRY _ZTV4dd22[];
+Class_Descriptor cd_dd22 = {  "dd22", // class name
+  0,0,//no base classes
+  &(vtc_dd22[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd22),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd22),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  ee22  : aa22 , virtual bb22 {
+  int e;
+   ee22(const ABISELECT(__tsi64,int) *const *); // _ZN4ee22C2Ev
+  virtual void  foo(); // _ZN4ee223fooEv
+  ~ee22(); // tgen
+  ee22(); // tgen
+};
+//SIG(-1 ee22) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee22 ::ee22(const ABISELECT(__tsi64,int) *const *){}
+void  ee22 ::foo(){vfunc_called(this, "_ZN4ee223fooEv");}
+ee22 ::~ee22(){ note_dtor("ee22", this);} // tgen
+ee22 ::ee22(){ note_ctor("ee22", this);} // tgen
+
+static void Test_ee22()
+{
+  extern Class_Descriptor cd_ee22;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee22, buf);
+    ee22 *dp, &lv = *(dp=new (buf) ee22());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee22)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee22)");
+    check_base_class_offset(lv, (aa22*), 0, "ee22");
+    check_base_class_offset(lv, (bb22*), ABISELECT(16,12), "ee22");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee22.e");
+    test_class_info(&lv, &cd_ee22);
+    dp->~ee22();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee22(Test_ee22, "ee22", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee22C1Ev();
+extern void _ZN4ee22D1Ev();
+Name_Map name_map_ee22[] = {
+  NSPAIR(_ZN4ee22C1Ev),
+  NSPAIR(_ZN4ee22D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa22;
+extern VTBL_ENTRY _ZTI4aa22[];
+extern  VTBL_ENTRY _ZTV4aa22[];
+extern Class_Descriptor cd_bb22;
+extern VTBL_ENTRY _ZTI4bb22[];
+extern  VTBL_ENTRY _ZTV4bb22[];
+static Base_Class bases_ee22[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa22,    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},
+  {&cd_bb22,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee22[];
+extern void _ZN4ee223fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee223fooEv,_ZTv0_n12_N4ee223fooEv)();
+extern void ABISELECT(_ZThn16_N4ee223fooEv,_ZThn12_N4ee223fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee22[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee22[0]),
+  (VTBL_ENTRY)&_ZN4ee223fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee22[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee223fooEv,_ZTv0_n12_N4ee223fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee22[];
+static  VTT_ENTRY vtt_ee22[] = {
+  {&(_ZTV4ee22[3]),  3,8},
+  {&(_ZTV4ee22[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee22[];
+extern  VTBL_ENTRY _ZTV4ee22[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee22[];
+static VTBL_ENTRY alt_thunk_names52[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee223fooEv,_ZTv0_n12_N4ee223fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee223fooEv,_ZThn12_N4ee223fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee22 = {  "ee22", // class name
+  bases_ee22, 2,
+  &(vtc_ee22[0]), // expected_vtbl_contents
+  &(vtt_ee22[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee22),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee22),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee22),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names52,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff22  : virtual cc22 , dd22 {
+  int f;
+   ff22(const ABISELECT(__tsi64,int) *const *); // _ZN4ff22C2Ev
+  virtual void  foo(); // _ZN4ff223fooEv
+  ~ff22(); // tgen
+  ff22(); // tgen
+};
+//SIG(-1 ff22) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff22 ::ff22(const ABISELECT(__tsi64,int) *const *){}
+void  ff22 ::foo(){vfunc_called(this, "_ZN4ff223fooEv");}
+ff22 ::~ff22(){ note_dtor("ff22", this);} // tgen
+ff22 ::ff22(){ note_ctor("ff22", this);} // tgen
+
+static void Test_ff22()
+{
+  extern Class_Descriptor cd_ff22;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff22, buf);
+    ff22 *dp, &lv = *(dp=new (buf) ff22());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff22)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff22)");
+    check_base_class_offset(lv, (cc22*), ABISELECT(16,12), "ff22");
+    check_base_class_offset(lv, (dd22*), 0, "ff22");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff22.f");
+    test_class_info(&lv, &cd_ff22);
+    dp->~ff22();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff22(Test_ff22, "ff22", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff22C1Ev();
+extern void _ZN4ff22D1Ev();
+Name_Map name_map_ff22[] = {
+  NSPAIR(_ZN4ff22C1Ev),
+  NSPAIR(_ZN4ff22D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc22;
+extern VTBL_ENTRY _ZTI4cc22[];
+extern  VTBL_ENTRY _ZTV4cc22[];
+extern Class_Descriptor cd_dd22;
+extern VTBL_ENTRY _ZTI4dd22[];
+extern  VTBL_ENTRY _ZTV4dd22[];
+static Base_Class bases_ff22[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc22,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd22,    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 _ZTI4ff22[];
+extern void _ZN4ff223fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff223fooEv,_ZTv0_n12_N4ff223fooEv)();
+extern void ABISELECT(_ZThn16_N4ff223fooEv,_ZThn12_N4ff223fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff22[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff22[0]),
+  (VTBL_ENTRY)&_ZN4ff223fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff22[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff223fooEv,_ZTv0_n12_N4ff223fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff22[];
+static  VTT_ENTRY vtt_ff22[] = {
+  {&(_ZTV4ff22[3]),  3,8},
+  {&(_ZTV4ff22[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff22[];
+extern  VTBL_ENTRY _ZTV4ff22[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff22[];
+static VTBL_ENTRY alt_thunk_names53[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff223fooEv,_ZTv0_n12_N4ff223fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff223fooEv,_ZThn12_N4ff223fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff22 = {  "ff22", // class name
+  bases_ff22, 2,
+  &(vtc_ff22[0]), // expected_vtbl_contents
+  &(vtt_ff22[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff22),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff22),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff22),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names53,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg22  : virtual ee22 , ff22 {
+  int g;
+   gg22(const ABISELECT(__tsi64,int) *const *); // _ZN4gg22C2Ev
+  virtual void  foo(); // _ZN4gg223fooEv
+  ~gg22(); // tgen
+  gg22(); // tgen
+};
+//SIG(1 gg22) C1{ VBC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg22 ::gg22(const ABISELECT(__tsi64,int) *const *){}
+void  gg22 ::foo(){vfunc_called(this, "_ZN4gg223fooEv");}
+gg22 ::~gg22(){ note_dtor("gg22", this);} // tgen
+gg22 ::gg22(){ note_ctor("gg22", this);} // tgen
+
+static void Test_gg22()
+{
+  extern Class_Descriptor cd_gg22;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg22, buf);
+    gg22 *dp, &lv = *(dp=new (buf) gg22());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg22)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg22)");
+    check_base_class_offset(lv, (aa22*)(ee22*), ABISELECT(24,16), "gg22");
+    check_base_class_offset(lv, (bb22*)(ee22*), ABISELECT(40,28), "gg22");
+    check_base_class_offset(lv, (ee22*), ABISELECT(24,16), "gg22");
+    check_base_class_offset(lv, (cc22*)(ff22*), ABISELECT(56,36), "gg22");
+    check_base_class_offset(lv, (dd22*)(ff22*), 0, "gg22");
+    check_base_class_offset(lv, (ff22*), 0, "gg22");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg22.g");
+    test_class_info(&lv, &cd_gg22);
+    dp->~gg22();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg22(Test_gg22, "gg22", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg22C1Ev();
+extern void _ZN4gg22D1Ev();
+Name_Map name_map_gg22[] = {
+  NSPAIR(_ZN4gg22C1Ev),
+  NSPAIR(_ZN4gg22D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa22;
+extern VTBL_ENTRY _ZTI4aa22[];
+extern  VTBL_ENTRY _ZTV4aa22[];
+extern Class_Descriptor cd_bb22;
+extern VTBL_ENTRY _ZTI4bb22[];
+extern  VTBL_ENTRY _ZTV4bb22[];
+extern Class_Descriptor cd_ee22;
+extern VTBL_ENTRY _ZTI4ee22[];
+extern  VTBL_ENTRY _ZTV4ee22[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee22[];
+extern Class_Descriptor cd_cc22;
+extern VTBL_ENTRY _ZTI4cc22[];
+extern  VTBL_ENTRY _ZTV4cc22[];
+extern Class_Descriptor cd_dd22;
+extern VTBL_ENTRY _ZTI4dd22[];
+extern  VTBL_ENTRY _ZTV4dd22[];
+extern Class_Descriptor cd_ff22;
+extern VTBL_ENTRY _ZTI4ff22[];
+extern  VTBL_ENTRY _ZTV4ff22[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff22[];
+static Base_Class bases_gg22[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa22,    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
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb22,    ABISELECT(40,28), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee22,    ABISELECT(24,16), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc22,    ABISELECT(56,36), //bcp->offset
+    15, //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
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd22,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff22,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg22[];
+extern void _ZN4gg223fooEv();
+extern void ABISELECT(_ZTv0_n32_N4gg223fooEv,_ZTv0_n16_N4gg223fooEv)();
+extern void ABISELECT(_ZThn24_N4gg223fooEv,_ZThn16_N4gg223fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg223fooEv,_ZTv0_n12_N4gg223fooEv)();
+extern void ABISELECT(_ZThn40_N4gg223fooEv,_ZThn28_N4gg223fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg223fooEv,_ZTv0_n12_N4gg223fooEv)();
+extern void ABISELECT(_ZThn56_N4gg223fooEv,_ZThn36_N4gg223fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg22[] = {
+  ABISELECT(40,28),
+  ABISELECT(24,16),
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg22[0]),
+  (VTBL_ENTRY)&_ZN4gg223fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(16,12),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg22[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg223fooEv,_ZTv0_n16_N4gg223fooEv),
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI4gg22[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg223fooEv,_ZTv0_n12_N4gg223fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg22[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg223fooEv,_ZTv0_n12_N4gg223fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg22[];
+extern void _ZN4ff223fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff22__4gg22[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff22[0]),
+  (VTBL_ENTRY)&_ZN4ff223fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff223fooEv,_ZTv0_n12_N4ff223fooEv)();
+extern void ABISELECT(_ZThn56_N4ff223fooEv,_ZThn36_N4ff223fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc22__4ff22__4gg22[] = {
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4ff22[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff223fooEv,_ZTv0_n12_N4ff223fooEv),
+};
+extern void _ZN4ee223fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee22__4gg22[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee22[0]),
+  (VTBL_ENTRY)&_ZN4ee223fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee223fooEv,_ZTv0_n12_N4ee223fooEv)();
+extern void ABISELECT(_ZThn16_N4ee223fooEv,_ZThn12_N4ee223fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb22__4ee22__4gg22[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee22[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee223fooEv,_ZTv0_n12_N4ee223fooEv),
+};
+static  VTT_ENTRY vtt_gg22[] = {
+  {&(_ZTV4gg22[5]),  5,19},
+  {&(_tg__ZTV4ff22__4gg22[3]),  3,4},
+  {&(_tg__ZTV4cc22__4ff22__4gg22[3]),  3,4},
+  {&(_ZTV4gg22[10]),  10,19},
+  {&(_ZTV4gg22[14]),  14,19},
+  {&(_ZTV4gg22[18]),  18,19},
+  {&(_tg__ZTV4ee22__4gg22[3]),  3,4},
+  {&(_tg__ZTV4bb22__4ee22__4gg22[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg22[];
+extern  VTBL_ENTRY _ZTV4gg22[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg22[];
+static VTBL_ENTRY alt_thunk_names54[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee223fooEv,_ZTv0_n12_N4ee223fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee223fooEv,_ZThn12_N4ee223fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff223fooEv,_ZTv0_n12_N4ff223fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4ff223fooEv,_ZThn36_N4ff223fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg223fooEv,_ZTv0_n12_N4gg223fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg223fooEv,_ZThn36_N4gg223fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg223fooEv,_ZThn28_N4gg223fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg223fooEv,_ZTv0_n16_N4gg223fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg223fooEv,_ZThn16_N4gg223fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg22 = {  "gg22", // class name
+  bases_gg22, 6,
+  &(vtc_gg22[0]), // expected_vtbl_contents
+  &(vtt_gg22[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg22),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg22),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg22),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names54,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa23  {
+  int a;
+   aa23(); // _ZN4aa23C1Ev
+  virtual void  foo(); // _ZN4aa233fooEv
+  ~aa23(); // tgen
+};
+//SIG(-1 aa23) C1{ v1 Fi}
+
+
+ aa23 ::aa23(){ note_ctor("aa23", this);}
+void  aa23 ::foo(){vfunc_called(this, "_ZN4aa233fooEv");}
+aa23 ::~aa23(){ note_dtor("aa23", this);} // tgen
+
+static void Test_aa23()
+{
+  extern Class_Descriptor cd_aa23;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa23, buf);
+    aa23 *dp, &lv = *(dp=new (buf) aa23());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa23)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa23)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa23.a");
+    test_class_info(&lv, &cd_aa23);
+    dp->~aa23();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa23(Test_aa23, "aa23", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa23C1Ev();
+extern void _ZN4aa23D1Ev();
+Name_Map name_map_aa23[] = {
+  NSPAIR(_ZN4aa23C1Ev),
+  NSPAIR(_ZN4aa23D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa23[];
+extern void _ZN4aa233fooEv();
+static  VTBL_ENTRY vtc_aa23[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa23[0]),
+  (VTBL_ENTRY)&_ZN4aa233fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa23[];
+extern  VTBL_ENTRY _ZTV4aa23[];
+Class_Descriptor cd_aa23 = {  "aa23", // class name
+  0,0,//no base classes
+  &(vtc_aa23[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa23),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa23),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  bb23  {
+  int b;
+   bb23(); // _ZN4bb23C1Ev
+  virtual void  foo(); // _ZN4bb233fooEv
+  ~bb23(); // tgen
+};
+//SIG(-1 bb23) C1{ v1 Fi}
+
+
+ bb23 ::bb23(){ note_ctor("bb23", this);}
+void  bb23 ::foo(){vfunc_called(this, "_ZN4bb233fooEv");}
+bb23 ::~bb23(){ note_dtor("bb23", this);} // tgen
+
+static void Test_bb23()
+{
+  extern Class_Descriptor cd_bb23;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb23, buf);
+    bb23 *dp, &lv = *(dp=new (buf) bb23());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb23)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb23)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb23.b");
+    test_class_info(&lv, &cd_bb23);
+    dp->~bb23();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb23(Test_bb23, "bb23", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb23C1Ev();
+extern void _ZN4bb23D1Ev();
+Name_Map name_map_bb23[] = {
+  NSPAIR(_ZN4bb23C1Ev),
+  NSPAIR(_ZN4bb23D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb23[];
+extern void _ZN4bb233fooEv();
+static  VTBL_ENTRY vtc_bb23[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb23[0]),
+  (VTBL_ENTRY)&_ZN4bb233fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb23[];
+extern  VTBL_ENTRY _ZTV4bb23[];
+Class_Descriptor cd_bb23 = {  "bb23", // class name
+  0,0,//no base classes
+  &(vtc_bb23[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb23),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb23),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  cc23  {
+  int c;
+   cc23(); // _ZN4cc23C1Ev
+  virtual void  foo(); // _ZN4cc233fooEv
+  ~cc23(); // tgen
+};
+//SIG(-1 cc23) C1{ v1 Fi}
+
+
+ cc23 ::cc23(){ note_ctor("cc23", this);}
+void  cc23 ::foo(){vfunc_called(this, "_ZN4cc233fooEv");}
+cc23 ::~cc23(){ note_dtor("cc23", this);} // tgen
+
+static void Test_cc23()
+{
+  extern Class_Descriptor cd_cc23;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc23, buf);
+    cc23 *dp, &lv = *(dp=new (buf) cc23());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc23)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc23)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc23.c");
+    test_class_info(&lv, &cd_cc23);
+    dp->~cc23();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc23(Test_cc23, "cc23", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc23C1Ev();
+extern void _ZN4cc23D1Ev();
+Name_Map name_map_cc23[] = {
+  NSPAIR(_ZN4cc23C1Ev),
+  NSPAIR(_ZN4cc23D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc23[];
+extern void _ZN4cc233fooEv();
+static  VTBL_ENTRY vtc_cc23[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc23[0]),
+  (VTBL_ENTRY)&_ZN4cc233fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc23[];
+extern  VTBL_ENTRY _ZTV4cc23[];
+Class_Descriptor cd_cc23 = {  "cc23", // class name
+  0,0,//no base classes
+  &(vtc_cc23[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc23),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc23),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  dd23  {
+  int d;
+   dd23(); // _ZN4dd23C1Ev
+  virtual void  foo(); // _ZN4dd233fooEv
+  ~dd23(); // tgen
+};
+//SIG(-1 dd23) C1{ v1 Fi}
+
+
+ dd23 ::dd23(){ note_ctor("dd23", this);}
+void  dd23 ::foo(){vfunc_called(this, "_ZN4dd233fooEv");}
+dd23 ::~dd23(){ note_dtor("dd23", this);} // tgen
+
+static void Test_dd23()
+{
+  extern Class_Descriptor cd_dd23;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd23, buf);
+    dd23 *dp, &lv = *(dp=new (buf) dd23());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd23)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd23)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd23.d");
+    test_class_info(&lv, &cd_dd23);
+    dp->~dd23();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd23(Test_dd23, "dd23", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd23C1Ev();
+extern void _ZN4dd23D1Ev();
+Name_Map name_map_dd23[] = {
+  NSPAIR(_ZN4dd23C1Ev),
+  NSPAIR(_ZN4dd23D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd23[];
+extern void _ZN4dd233fooEv();
+static  VTBL_ENTRY vtc_dd23[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd23[0]),
+  (VTBL_ENTRY)&_ZN4dd233fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd23[];
+extern  VTBL_ENTRY _ZTV4dd23[];
+Class_Descriptor cd_dd23 = {  "dd23", // class name
+  0,0,//no base classes
+  &(vtc_dd23[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd23),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd23),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  ee23  : virtual aa23 , virtual bb23 {
+  int e;
+   ee23(const ABISELECT(__tsi64,int) *const *); // _ZN4ee23C2Ev
+  virtual void  foo(); // _ZN4ee233fooEv
+  ~ee23(); // tgen
+  ee23(); // tgen
+};
+//SIG(-1 ee23) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee23 ::ee23(const ABISELECT(__tsi64,int) *const *){}
+void  ee23 ::foo(){vfunc_called(this, "_ZN4ee233fooEv");}
+ee23 ::~ee23(){ note_dtor("ee23", this);} // tgen
+ee23 ::ee23(){ note_ctor("ee23", this);} // tgen
+
+static void Test_ee23()
+{
+  extern Class_Descriptor cd_ee23;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee23, buf);
+    ee23 *dp, &lv = *(dp=new (buf) ee23());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee23)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee23)");
+    check_base_class_offset(lv, (aa23*), ABISELECT(16,8), "ee23");
+    check_base_class_offset(lv, (bb23*), ABISELECT(32,16), "ee23");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee23.e");
+    test_class_info(&lv, &cd_ee23);
+    dp->~ee23();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee23(Test_ee23, "ee23", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ee23C1Ev();
+extern void _ZN4ee23D1Ev();
+Name_Map name_map_ee23[] = {
+  NSPAIR(_ZN4ee23C1Ev),
+  NSPAIR(_ZN4ee23D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa23;
+extern VTBL_ENTRY _ZTI4aa23[];
+extern  VTBL_ENTRY _ZTV4aa23[];
+extern Class_Descriptor cd_bb23;
+extern VTBL_ENTRY _ZTI4bb23[];
+extern  VTBL_ENTRY _ZTV4bb23[];
+static Base_Class bases_ee23[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa23,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb23,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee23[];
+extern void _ZN4ee233fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv)();
+extern void ABISELECT(_ZThn16_N4ee233fooEv,_ZThn8_N4ee233fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv)();
+extern void ABISELECT(_ZThn32_N4ee233fooEv,_ZThn16_N4ee233fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee23[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee23[0]),
+  (VTBL_ENTRY)&_ZN4ee233fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee23[];
+static  VTT_ENTRY vtt_ee23[] = {
+  {&(_ZTV4ee23[4]),  4,13},
+  {&(_ZTV4ee23[8]),  8,13},
+  {&(_ZTV4ee23[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ee23[];
+extern  VTBL_ENTRY _ZTV4ee23[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee23[];
+static VTBL_ENTRY alt_thunk_names55[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee233fooEv,_ZThn16_N4ee233fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee233fooEv,_ZThn8_N4ee233fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee23 = {  "ee23", // class name
+  bases_ee23, 2,
+  &(vtc_ee23[0]), // expected_vtbl_contents
+  &(vtt_ee23[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ee23),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee23),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee23),3, //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  ff23  : virtual cc23 , dd23 {
+  int f;
+   ff23(const ABISELECT(__tsi64,int) *const *); // _ZN4ff23C2Ev
+  virtual void  foo(); // _ZN4ff233fooEv
+  ~ff23(); // tgen
+  ff23(); // tgen
+};
+//SIG(-1 ff23) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff23 ::ff23(const ABISELECT(__tsi64,int) *const *){}
+void  ff23 ::foo(){vfunc_called(this, "_ZN4ff233fooEv");}
+ff23 ::~ff23(){ note_dtor("ff23", this);} // tgen
+ff23 ::ff23(){ note_ctor("ff23", this);} // tgen
+
+static void Test_ff23()
+{
+  extern Class_Descriptor cd_ff23;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff23, buf);
+    ff23 *dp, &lv = *(dp=new (buf) ff23());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff23)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff23)");
+    check_base_class_offset(lv, (cc23*), ABISELECT(16,12), "ff23");
+    check_base_class_offset(lv, (dd23*), 0, "ff23");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff23.f");
+    test_class_info(&lv, &cd_ff23);
+    dp->~ff23();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff23(Test_ff23, "ff23", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff23C1Ev();
+extern void _ZN4ff23D1Ev();
+Name_Map name_map_ff23[] = {
+  NSPAIR(_ZN4ff23C1Ev),
+  NSPAIR(_ZN4ff23D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc23;
+extern VTBL_ENTRY _ZTI4cc23[];
+extern  VTBL_ENTRY _ZTV4cc23[];
+extern Class_Descriptor cd_dd23;
+extern VTBL_ENTRY _ZTI4dd23[];
+extern  VTBL_ENTRY _ZTV4dd23[];
+static Base_Class bases_ff23[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc23,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd23,    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 _ZTI4ff23[];
+extern void _ZN4ff233fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff233fooEv,_ZTv0_n12_N4ff233fooEv)();
+extern void ABISELECT(_ZThn16_N4ff233fooEv,_ZThn12_N4ff233fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff23[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff23[0]),
+  (VTBL_ENTRY)&_ZN4ff233fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff233fooEv,_ZTv0_n12_N4ff233fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff23[];
+static  VTT_ENTRY vtt_ff23[] = {
+  {&(_ZTV4ff23[3]),  3,8},
+  {&(_ZTV4ff23[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff23[];
+extern  VTBL_ENTRY _ZTV4ff23[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff23[];
+static VTBL_ENTRY alt_thunk_names56[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff233fooEv,_ZTv0_n12_N4ff233fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff233fooEv,_ZThn12_N4ff233fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff23 = {  "ff23", // class name
+  bases_ff23, 2,
+  &(vtc_ff23[0]), // expected_vtbl_contents
+  &(vtt_ff23[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff23),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff23),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff23),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names56,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg23  : virtual ee23 , ff23 {
+  int g;
+   gg23(const ABISELECT(__tsi64,int) *const *); // _ZN4gg23C2Ev
+  virtual void  foo(); // _ZN4gg233fooEv
+  ~gg23(); // tgen
+  gg23(); // tgen
+};
+//SIG(1 gg23) C1{ VBC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg23 ::gg23(const ABISELECT(__tsi64,int) *const *){}
+void  gg23 ::foo(){vfunc_called(this, "_ZN4gg233fooEv");}
+gg23 ::~gg23(){ note_dtor("gg23", this);} // tgen
+gg23 ::gg23(){ note_ctor("gg23", this);} // tgen
+
+static void Test_gg23()
+{
+  extern Class_Descriptor cd_gg23;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(12,13)];
+    init_test(&cd_gg23, buf);
+    gg23 *dp, &lv = *(dp=new (buf) gg23());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(88,48), "sizeof(gg23)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg23)");
+    check_base_class_offset(lv, (aa23*)(ee23*), ABISELECT(40,24), "gg23");
+    check_base_class_offset(lv, (bb23*)(ee23*), ABISELECT(56,32), "gg23");
+    check_base_class_offset(lv, (ee23*), ABISELECT(24,16), "gg23");
+    check_base_class_offset(lv, (cc23*)(ff23*), ABISELECT(72,40), "gg23");
+    check_base_class_offset(lv, (dd23*)(ff23*), 0, "gg23");
+    check_base_class_offset(lv, (ff23*), 0, "gg23");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg23.g");
+    test_class_info(&lv, &cd_gg23);
+    dp->~gg23();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg23(Test_gg23, "gg23", ABISELECT(88,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg23C1Ev();
+extern void _ZN4gg23D1Ev();
+Name_Map name_map_gg23[] = {
+  NSPAIR(_ZN4gg23C1Ev),
+  NSPAIR(_ZN4gg23D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa23;
+extern VTBL_ENTRY _ZTI4aa23[];
+extern  VTBL_ENTRY _ZTV4aa23[];
+extern Class_Descriptor cd_bb23;
+extern VTBL_ENTRY _ZTI4bb23[];
+extern  VTBL_ENTRY _ZTV4bb23[];
+extern Class_Descriptor cd_ee23;
+extern VTBL_ENTRY _ZTI4ee23[];
+extern  VTBL_ENTRY _ZTV4ee23[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee23[];
+extern Class_Descriptor cd_cc23;
+extern VTBL_ENTRY _ZTI4cc23[];
+extern  VTBL_ENTRY _ZTV4cc23[];
+extern Class_Descriptor cd_dd23;
+extern VTBL_ENTRY _ZTI4dd23[];
+extern  VTBL_ENTRY _ZTV4dd23[];
+extern Class_Descriptor cd_ff23;
+extern VTBL_ENTRY _ZTI4ff23[];
+extern  VTBL_ENTRY _ZTV4ff23[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff23[];
+static Base_Class bases_gg23[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa23,    ABISELECT(40,24), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb23,    ABISELECT(56,32), //bcp->offset
+    17, //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
+    2, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee23,    ABISELECT(24,16), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc23,    ABISELECT(72,40), //bcp->offset
+    21, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd23,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff23,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg23[];
+extern void _ZN4gg233fooEv();
+extern void ABISELECT(_ZTv0_n40_N4gg233fooEv,_ZTv0_n20_N4gg233fooEv)();
+extern void ABISELECT(_ZThn24_N4gg233fooEv,_ZThn16_N4gg233fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg233fooEv,_ZTv0_n12_N4gg233fooEv)();
+extern void ABISELECT(_ZThn40_N4gg233fooEv,_ZThn24_N4gg233fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg233fooEv,_ZTv0_n12_N4gg233fooEv)();
+extern void ABISELECT(_ZThn56_N4gg233fooEv,_ZThn32_N4gg233fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg233fooEv,_ZTv0_n12_N4gg233fooEv)();
+extern void ABISELECT(_ZThn72_N4gg233fooEv,_ZThn40_N4gg233fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg23[] = {
+  ABISELECT(56,32),
+  ABISELECT(40,24),
+  ABISELECT(24,16),
+  ABISELECT(72,40),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg23[0]),
+  (VTBL_ENTRY)&_ZN4gg233fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N4gg233fooEv,_ZTv0_n20_N4gg233fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg233fooEv,_ZTv0_n12_N4gg233fooEv),
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4gg23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg233fooEv,_ZTv0_n12_N4gg233fooEv),
+  ABISELECT(-72,-40),
+  ABISELECT(-72,-40),
+  (VTBL_ENTRY)&(_ZTI4gg23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg233fooEv,_ZTv0_n12_N4gg233fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg23[];
+extern void _ZN4ff233fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff23__4gg23[] = {
+  ABISELECT(72,40),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff23[0]),
+  (VTBL_ENTRY)&_ZN4ff233fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff233fooEv,_ZTv0_n12_N4ff233fooEv)();
+extern void ABISELECT(_ZThn72_N4ff233fooEv,_ZThn40_N4ff233fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc23__4ff23__4gg23[] = {
+  ABISELECT(-72,-40),
+  ABISELECT(-72,-40),
+  (VTBL_ENTRY)&(_ZTI4ff23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff233fooEv,_ZTv0_n12_N4ff233fooEv),
+};
+extern void _ZN4ee233fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee23__4gg23[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee23[0]),
+  (VTBL_ENTRY)&_ZN4ee233fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv)();
+extern void ABISELECT(_ZThn16_N4ee233fooEv,_ZThn8_N4ee233fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa23__4ee23__4gg23[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv)();
+extern void ABISELECT(_ZThn32_N4ee233fooEv,_ZThn16_N4ee233fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb23__4ee23__4gg23[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee23[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv),
+};
+static  VTT_ENTRY vtt_gg23[] = {
+  {&(_ZTV4gg23[6]),  6,25},
+  {&(_tg__ZTV4ff23__4gg23[3]),  3,4},
+  {&(_tg__ZTV4cc23__4ff23__4gg23[3]),  3,4},
+  {&(_ZTV4gg23[12]),  12,25},
+  {&(_ZTV4gg23[16]),  16,25},
+  {&(_ZTV4gg23[20]),  20,25},
+  {&(_ZTV4gg23[24]),  24,25},
+  {&(_tg__ZTV4ee23__4gg23[4]),  4,5},
+  {&(_tg__ZTV4aa23__4ee23__4gg23[3]),  3,4},
+  {&(_tg__ZTV4bb23__4ee23__4gg23[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg23[];
+extern  VTBL_ENTRY _ZTV4gg23[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg23[];
+static VTBL_ENTRY alt_thunk_names57[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee233fooEv,_ZTv0_n12_N4ee233fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee233fooEv,_ZThn16_N4ee233fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee233fooEv,_ZThn8_N4ee233fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff233fooEv,_ZTv0_n12_N4ff233fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn72_N4ff233fooEv,_ZThn40_N4ff233fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg233fooEv,_ZTv0_n12_N4gg233fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn72_N4gg233fooEv,_ZThn40_N4gg233fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg233fooEv,_ZThn32_N4gg233fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg233fooEv,_ZThn24_N4gg233fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N4gg233fooEv,_ZTv0_n20_N4gg233fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg233fooEv,_ZThn16_N4gg233fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg23 = {  "gg23", // class name
+  bases_gg23, 6,
+  &(vtc_gg23[0]), // expected_vtbl_contents
+  &(vtt_gg23[0]), // expected_vtt_contents
+  ABISELECT(88,48), // object size
+  NSPAIRA(_ZTI4gg23),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg23),25, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg23),10, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names57,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa24  {
+  int a;
+   aa24(); // _ZN4aa24C1Ev
+  virtual void  foo(); // _ZN4aa243fooEv
+  ~aa24(); // tgen
+};
+//SIG(-1 aa24) C1{ v1 Fi}
+
+
+ aa24 ::aa24(){ note_ctor("aa24", this);}
+void  aa24 ::foo(){vfunc_called(this, "_ZN4aa243fooEv");}
+aa24 ::~aa24(){ note_dtor("aa24", this);} // tgen
+
+static void Test_aa24()
+{
+  extern Class_Descriptor cd_aa24;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa24, buf);
+    aa24 *dp, &lv = *(dp=new (buf) aa24());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa24)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa24)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa24.a");
+    test_class_info(&lv, &cd_aa24);
+    dp->~aa24();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa24(Test_aa24, "aa24", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa24C1Ev();
+extern void _ZN4aa24D1Ev();
+Name_Map name_map_aa24[] = {
+  NSPAIR(_ZN4aa24C1Ev),
+  NSPAIR(_ZN4aa24D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa24[];
+extern void _ZN4aa243fooEv();
+static  VTBL_ENTRY vtc_aa24[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa24[0]),
+  (VTBL_ENTRY)&_ZN4aa243fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa24[];
+extern  VTBL_ENTRY _ZTV4aa24[];
+Class_Descriptor cd_aa24 = {  "aa24", // class name
+  0,0,//no base classes
+  &(vtc_aa24[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa24),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa24),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  bb24  {
+  int b;
+   bb24(); // _ZN4bb24C1Ev
+  virtual void  foo(); // _ZN4bb243fooEv
+  ~bb24(); // tgen
+};
+//SIG(-1 bb24) C1{ v1 Fi}
+
+
+ bb24 ::bb24(){ note_ctor("bb24", this);}
+void  bb24 ::foo(){vfunc_called(this, "_ZN4bb243fooEv");}
+bb24 ::~bb24(){ note_dtor("bb24", this);} // tgen
+
+static void Test_bb24()
+{
+  extern Class_Descriptor cd_bb24;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb24, buf);
+    bb24 *dp, &lv = *(dp=new (buf) bb24());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb24)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb24)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb24.b");
+    test_class_info(&lv, &cd_bb24);
+    dp->~bb24();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb24(Test_bb24, "bb24", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb24C1Ev();
+extern void _ZN4bb24D1Ev();
+Name_Map name_map_bb24[] = {
+  NSPAIR(_ZN4bb24C1Ev),
+  NSPAIR(_ZN4bb24D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb24[];
+extern void _ZN4bb243fooEv();
+static  VTBL_ENTRY vtc_bb24[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb24[0]),
+  (VTBL_ENTRY)&_ZN4bb243fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb24[];
+extern  VTBL_ENTRY _ZTV4bb24[];
+Class_Descriptor cd_bb24 = {  "bb24", // class name
+  0,0,//no base classes
+  &(vtc_bb24[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb24),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb24),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  cc24  {
+  int c;
+   cc24(); // _ZN4cc24C1Ev
+  virtual void  foo(); // _ZN4cc243fooEv
+  ~cc24(); // tgen
+};
+//SIG(-1 cc24) C1{ v1 Fi}
+
+
+ cc24 ::cc24(){ note_ctor("cc24", this);}
+void  cc24 ::foo(){vfunc_called(this, "_ZN4cc243fooEv");}
+cc24 ::~cc24(){ note_dtor("cc24", this);} // tgen
+
+static void Test_cc24()
+{
+  extern Class_Descriptor cd_cc24;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc24, buf);
+    cc24 *dp, &lv = *(dp=new (buf) cc24());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc24)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc24)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc24.c");
+    test_class_info(&lv, &cd_cc24);
+    dp->~cc24();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc24(Test_cc24, "cc24", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc24C1Ev();
+extern void _ZN4cc24D1Ev();
+Name_Map name_map_cc24[] = {
+  NSPAIR(_ZN4cc24C1Ev),
+  NSPAIR(_ZN4cc24D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc24[];
+extern void _ZN4cc243fooEv();
+static  VTBL_ENTRY vtc_cc24[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc24[0]),
+  (VTBL_ENTRY)&_ZN4cc243fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc24[];
+extern  VTBL_ENTRY _ZTV4cc24[];
+Class_Descriptor cd_cc24 = {  "cc24", // class name
+  0,0,//no base classes
+  &(vtc_cc24[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc24),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc24),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  dd24  {
+  int d;
+   dd24(); // _ZN4dd24C1Ev
+  virtual void  foo(); // _ZN4dd243fooEv
+  ~dd24(); // tgen
+};
+//SIG(-1 dd24) C1{ v1 Fi}
+
+
+ dd24 ::dd24(){ note_ctor("dd24", this);}
+void  dd24 ::foo(){vfunc_called(this, "_ZN4dd243fooEv");}
+dd24 ::~dd24(){ note_dtor("dd24", this);} // tgen
+
+static void Test_dd24()
+{
+  extern Class_Descriptor cd_dd24;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd24, buf);
+    dd24 *dp, &lv = *(dp=new (buf) dd24());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd24)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd24)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd24.d");
+    test_class_info(&lv, &cd_dd24);
+    dp->~dd24();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd24(Test_dd24, "dd24", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd24C1Ev();
+extern void _ZN4dd24D1Ev();
+Name_Map name_map_dd24[] = {
+  NSPAIR(_ZN4dd24C1Ev),
+  NSPAIR(_ZN4dd24D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd24[];
+extern void _ZN4dd243fooEv();
+static  VTBL_ENTRY vtc_dd24[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd24[0]),
+  (VTBL_ENTRY)&_ZN4dd243fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd24[];
+extern  VTBL_ENTRY _ZTV4dd24[];
+Class_Descriptor cd_dd24 = {  "dd24", // class name
+  0,0,//no base classes
+  &(vtc_dd24[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd24),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd24),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  ee24  : aa24 , bb24 {
+  int e;
+   ee24(); // _ZN4ee24C1Ev
+  virtual void  foo(); // _ZN4ee243fooEv
+  ~ee24(); // tgen
+};
+//SIG(-1 ee24) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee24 ::ee24(){ note_ctor("ee24", this);}
+void  ee24 ::foo(){vfunc_called(this, "_ZN4ee243fooEv");}
+ee24 ::~ee24(){ note_dtor("ee24", this);} // tgen
+
+static void Test_ee24()
+{
+  extern Class_Descriptor cd_ee24;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee24, buf);
+    ee24 *dp, &lv = *(dp=new (buf) ee24());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee24)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee24)");
+    check_base_class_offset(lv, (aa24*), 0, "ee24");
+    check_base_class_offset(lv, (bb24*), ABISELECT(16,8), "ee24");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee24.e");
+    test_class_info(&lv, &cd_ee24);
+    dp->~ee24();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee24(Test_ee24, "ee24", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee24C1Ev();
+extern void _ZN4ee24D1Ev();
+Name_Map name_map_ee24[] = {
+  NSPAIR(_ZN4ee24C1Ev),
+  NSPAIR(_ZN4ee24D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa24;
+extern VTBL_ENTRY _ZTI4aa24[];
+extern  VTBL_ENTRY _ZTV4aa24[];
+extern Class_Descriptor cd_bb24;
+extern VTBL_ENTRY _ZTI4bb24[];
+extern  VTBL_ENTRY _ZTV4bb24[];
+static Base_Class bases_ee24[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa24,    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},
+  {&cd_bb24,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ee24[];
+extern void _ZN4ee243fooEv();
+extern void ABISELECT(_ZThn16_N4ee243fooEv,_ZThn8_N4ee243fooEv)();
+static  VTBL_ENTRY vtc_ee24[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee24[0]),
+  (VTBL_ENTRY)&_ZN4ee243fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee24[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ee243fooEv,_ZThn8_N4ee243fooEv),
+};
+extern VTBL_ENTRY _ZTI4ee24[];
+extern  VTBL_ENTRY _ZTV4ee24[];
+Class_Descriptor cd_ee24 = {  "ee24", // class name
+  bases_ee24, 2,
+  &(vtc_ee24[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee24),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee24),6, //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  ff24  : cc24 , virtual dd24 {
+  int f;
+   ff24(const ABISELECT(__tsi64,int) *const *); // _ZN4ff24C2Ev
+  virtual void  foo(); // _ZN4ff243fooEv
+  ~ff24(); // tgen
+  ff24(); // tgen
+};
+//SIG(-1 ff24) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff24 ::ff24(const ABISELECT(__tsi64,int) *const *){}
+void  ff24 ::foo(){vfunc_called(this, "_ZN4ff243fooEv");}
+ff24 ::~ff24(){ note_dtor("ff24", this);} // tgen
+ff24 ::ff24(){ note_ctor("ff24", this);} // tgen
+
+static void Test_ff24()
+{
+  extern Class_Descriptor cd_ff24;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff24, buf);
+    ff24 *dp, &lv = *(dp=new (buf) ff24());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff24)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff24)");
+    check_base_class_offset(lv, (cc24*), 0, "ff24");
+    check_base_class_offset(lv, (dd24*), ABISELECT(16,12), "ff24");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff24.f");
+    test_class_info(&lv, &cd_ff24);
+    dp->~ff24();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff24(Test_ff24, "ff24", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff24C1Ev();
+extern void _ZN4ff24D1Ev();
+Name_Map name_map_ff24[] = {
+  NSPAIR(_ZN4ff24C1Ev),
+  NSPAIR(_ZN4ff24D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc24;
+extern VTBL_ENTRY _ZTI4cc24[];
+extern  VTBL_ENTRY _ZTV4cc24[];
+extern Class_Descriptor cd_dd24;
+extern VTBL_ENTRY _ZTI4dd24[];
+extern  VTBL_ENTRY _ZTV4dd24[];
+static Base_Class bases_ff24[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc24,    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},
+  {&cd_dd24,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff24[];
+extern void _ZN4ff243fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff243fooEv,_ZTv0_n12_N4ff243fooEv)();
+extern void ABISELECT(_ZThn16_N4ff243fooEv,_ZThn12_N4ff243fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff24[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff24[0]),
+  (VTBL_ENTRY)&_ZN4ff243fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff24[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff243fooEv,_ZTv0_n12_N4ff243fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff24[];
+static  VTT_ENTRY vtt_ff24[] = {
+  {&(_ZTV4ff24[3]),  3,8},
+  {&(_ZTV4ff24[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff24[];
+extern  VTBL_ENTRY _ZTV4ff24[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff24[];
+static VTBL_ENTRY alt_thunk_names58[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff243fooEv,_ZTv0_n12_N4ff243fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff243fooEv,_ZThn12_N4ff243fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff24 = {  "ff24", // class name
+  bases_ff24, 2,
+  &(vtc_ff24[0]), // expected_vtbl_contents
+  &(vtt_ff24[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff24),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff24),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff24),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names58,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg24  : virtual ee24 , ff24 {
+  int g;
+   gg24(const ABISELECT(__tsi64,int) *const *); // _ZN4gg24C2Ev
+  virtual void  foo(); // _ZN4gg243fooEv
+  ~gg24(); // tgen
+  gg24(); // tgen
+};
+//SIG(1 gg24) C1{ VBC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg24 ::gg24(const ABISELECT(__tsi64,int) *const *){}
+void  gg24 ::foo(){vfunc_called(this, "_ZN4gg243fooEv");}
+gg24 ::~gg24(){ note_dtor("gg24", this);} // tgen
+gg24 ::gg24(){ note_ctor("gg24", this);} // tgen
+
+static void Test_gg24()
+{
+  extern Class_Descriptor cd_gg24;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg24, buf);
+    gg24 *dp, &lv = *(dp=new (buf) gg24());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg24)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg24)");
+    check_base_class_offset(lv, (aa24*)(ee24*), ABISELECT(24,16), "gg24");
+    check_base_class_offset(lv, (bb24*)(ee24*), ABISELECT(40,24), "gg24");
+    check_base_class_offset(lv, (ee24*), ABISELECT(24,16), "gg24");
+    check_base_class_offset(lv, (cc24*)(ff24*), 0, "gg24");
+    check_base_class_offset(lv, (dd24*)(ff24*), ABISELECT(56,36), "gg24");
+    check_base_class_offset(lv, (ff24*), 0, "gg24");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg24.g");
+    test_class_info(&lv, &cd_gg24);
+    dp->~gg24();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg24(Test_gg24, "gg24", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg24C1Ev();
+extern void _ZN4gg24D1Ev();
+Name_Map name_map_gg24[] = {
+  NSPAIR(_ZN4gg24C1Ev),
+  NSPAIR(_ZN4gg24D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa24;
+extern VTBL_ENTRY _ZTI4aa24[];
+extern  VTBL_ENTRY _ZTV4aa24[];
+extern Class_Descriptor cd_bb24;
+extern VTBL_ENTRY _ZTI4bb24[];
+extern  VTBL_ENTRY _ZTV4bb24[];
+extern Class_Descriptor cd_ee24;
+extern VTBL_ENTRY _ZTI4ee24[];
+extern  VTBL_ENTRY _ZTV4ee24[];
+extern Class_Descriptor cd_cc24;
+extern VTBL_ENTRY _ZTI4cc24[];
+extern  VTBL_ENTRY _ZTV4cc24[];
+extern Class_Descriptor cd_dd24;
+extern VTBL_ENTRY _ZTI4dd24[];
+extern  VTBL_ENTRY _ZTV4dd24[];
+extern Class_Descriptor cd_ff24;
+extern VTBL_ENTRY _ZTI4ff24[];
+extern  VTBL_ENTRY _ZTV4ff24[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff24[];
+static Base_Class bases_gg24[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa24,    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
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb24,    ABISELECT(40,24), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee24,    ABISELECT(24,16), //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
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc24,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd24,    ABISELECT(56,36), //bcp->offset
+    12, //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
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff24,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg24[];
+extern void _ZN4gg243fooEv();
+extern void ABISELECT(_ZTv0_n24_N4gg243fooEv,_ZTv0_n12_N4gg243fooEv)();
+extern void ABISELECT(_ZThn24_N4gg243fooEv,_ZThn16_N4gg243fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTvn16_n24_N4gg243fooEv,_ZTvn8_n12_N4gg243fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg243fooEv,_ZTv0_n12_N4gg243fooEv)();
+extern void ABISELECT(_ZThn56_N4gg243fooEv,_ZThn36_N4gg243fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg24[] = {
+  ABISELECT(24,16),
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg24[0]),
+  (VTBL_ENTRY)&_ZN4gg243fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg24[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg243fooEv,_ZTv0_n12_N4gg243fooEv),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg24[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n24_N4gg243fooEv,_ZTvn8_n12_N4gg243fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg24[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg243fooEv,_ZTv0_n12_N4gg243fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg24[];
+extern void _ZN4ff243fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff24__4gg24[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff24[0]),
+  (VTBL_ENTRY)&_ZN4ff243fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff243fooEv,_ZTv0_n12_N4ff243fooEv)();
+extern void ABISELECT(_ZThn56_N4ff243fooEv,_ZThn36_N4ff243fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd24__4ff24__4gg24[] = {
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4ff24[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff243fooEv,_ZTv0_n12_N4ff243fooEv),
+};
+static  VTT_ENTRY vtt_gg24[] = {
+  {&(_ZTV4gg24[4]),  4,16},
+  {&(_tg__ZTV4ff24__4gg24[3]),  3,4},
+  {&(_tg__ZTV4dd24__4ff24__4gg24[3]),  3,4},
+  {&(_ZTV4gg24[8]),  8,16},
+  {&(_ZTV4gg24[11]),  11,16},
+  {&(_ZTV4gg24[15]),  15,16},
+};
+extern VTBL_ENTRY _ZTI4gg24[];
+extern  VTBL_ENTRY _ZTV4gg24[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg24[];
+static VTBL_ENTRY alt_thunk_names59[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff243fooEv,_ZTv0_n12_N4ff243fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4ff243fooEv,_ZThn36_N4ff243fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg243fooEv,_ZTv0_n12_N4gg243fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg243fooEv,_ZThn36_N4gg243fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg243fooEv,_ZThn16_N4gg243fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg24 = {  "gg24", // class name
+  bases_gg24, 6,
+  &(vtc_gg24[0]), // expected_vtbl_contents
+  &(vtt_gg24[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg24),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg24),16, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg24),6, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names59,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa25  {
+  int a;
+   aa25(); // _ZN4aa25C1Ev
+  virtual void  foo(); // _ZN4aa253fooEv
+  ~aa25(); // tgen
+};
+//SIG(-1 aa25) C1{ v1 Fi}
+
+
+ aa25 ::aa25(){ note_ctor("aa25", this);}
+void  aa25 ::foo(){vfunc_called(this, "_ZN4aa253fooEv");}
+aa25 ::~aa25(){ note_dtor("aa25", this);} // tgen
+
+static void Test_aa25()
+{
+  extern Class_Descriptor cd_aa25;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa25, buf);
+    aa25 *dp, &lv = *(dp=new (buf) aa25());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa25)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa25)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa25.a");
+    test_class_info(&lv, &cd_aa25);
+    dp->~aa25();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa25(Test_aa25, "aa25", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa25C1Ev();
+extern void _ZN4aa25D1Ev();
+Name_Map name_map_aa25[] = {
+  NSPAIR(_ZN4aa25C1Ev),
+  NSPAIR(_ZN4aa25D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa25[];
+extern void _ZN4aa253fooEv();
+static  VTBL_ENTRY vtc_aa25[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa25[0]),
+  (VTBL_ENTRY)&_ZN4aa253fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa25[];
+extern  VTBL_ENTRY _ZTV4aa25[];
+Class_Descriptor cd_aa25 = {  "aa25", // class name
+  0,0,//no base classes
+  &(vtc_aa25[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa25),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa25),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  bb25  {
+  int b;
+   bb25(); // _ZN4bb25C1Ev
+  virtual void  foo(); // _ZN4bb253fooEv
+  ~bb25(); // tgen
+};
+//SIG(-1 bb25) C1{ v1 Fi}
+
+
+ bb25 ::bb25(){ note_ctor("bb25", this);}
+void  bb25 ::foo(){vfunc_called(this, "_ZN4bb253fooEv");}
+bb25 ::~bb25(){ note_dtor("bb25", this);} // tgen
+
+static void Test_bb25()
+{
+  extern Class_Descriptor cd_bb25;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb25, buf);
+    bb25 *dp, &lv = *(dp=new (buf) bb25());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb25)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb25)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb25.b");
+    test_class_info(&lv, &cd_bb25);
+    dp->~bb25();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb25(Test_bb25, "bb25", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb25C1Ev();
+extern void _ZN4bb25D1Ev();
+Name_Map name_map_bb25[] = {
+  NSPAIR(_ZN4bb25C1Ev),
+  NSPAIR(_ZN4bb25D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb25[];
+extern void _ZN4bb253fooEv();
+static  VTBL_ENTRY vtc_bb25[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb25[0]),
+  (VTBL_ENTRY)&_ZN4bb253fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb25[];
+extern  VTBL_ENTRY _ZTV4bb25[];
+Class_Descriptor cd_bb25 = {  "bb25", // class name
+  0,0,//no base classes
+  &(vtc_bb25[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb25),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb25),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  cc25  {
+  int c;
+   cc25(); // _ZN4cc25C1Ev
+  virtual void  foo(); // _ZN4cc253fooEv
+  ~cc25(); // tgen
+};
+//SIG(-1 cc25) C1{ v1 Fi}
+
+
+ cc25 ::cc25(){ note_ctor("cc25", this);}
+void  cc25 ::foo(){vfunc_called(this, "_ZN4cc253fooEv");}
+cc25 ::~cc25(){ note_dtor("cc25", this);} // tgen
+
+static void Test_cc25()
+{
+  extern Class_Descriptor cd_cc25;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc25, buf);
+    cc25 *dp, &lv = *(dp=new (buf) cc25());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc25)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc25)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc25.c");
+    test_class_info(&lv, &cd_cc25);
+    dp->~cc25();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc25(Test_cc25, "cc25", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc25C1Ev();
+extern void _ZN4cc25D1Ev();
+Name_Map name_map_cc25[] = {
+  NSPAIR(_ZN4cc25C1Ev),
+  NSPAIR(_ZN4cc25D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc25[];
+extern void _ZN4cc253fooEv();
+static  VTBL_ENTRY vtc_cc25[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc25[0]),
+  (VTBL_ENTRY)&_ZN4cc253fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc25[];
+extern  VTBL_ENTRY _ZTV4cc25[];
+Class_Descriptor cd_cc25 = {  "cc25", // class name
+  0,0,//no base classes
+  &(vtc_cc25[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc25),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc25),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  dd25  {
+  int d;
+   dd25(); // _ZN4dd25C1Ev
+  virtual void  foo(); // _ZN4dd253fooEv
+  ~dd25(); // tgen
+};
+//SIG(-1 dd25) C1{ v1 Fi}
+
+
+ dd25 ::dd25(){ note_ctor("dd25", this);}
+void  dd25 ::foo(){vfunc_called(this, "_ZN4dd253fooEv");}
+dd25 ::~dd25(){ note_dtor("dd25", this);} // tgen
+
+static void Test_dd25()
+{
+  extern Class_Descriptor cd_dd25;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd25, buf);
+    dd25 *dp, &lv = *(dp=new (buf) dd25());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd25)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd25)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd25.d");
+    test_class_info(&lv, &cd_dd25);
+    dp->~dd25();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd25(Test_dd25, "dd25", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd25C1Ev();
+extern void _ZN4dd25D1Ev();
+Name_Map name_map_dd25[] = {
+  NSPAIR(_ZN4dd25C1Ev),
+  NSPAIR(_ZN4dd25D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd25[];
+extern void _ZN4dd253fooEv();
+static  VTBL_ENTRY vtc_dd25[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd25[0]),
+  (VTBL_ENTRY)&_ZN4dd253fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd25[];
+extern  VTBL_ENTRY _ZTV4dd25[];
+Class_Descriptor cd_dd25 = {  "dd25", // class name
+  0,0,//no base classes
+  &(vtc_dd25[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd25),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd25),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  ee25  : virtual aa25 , bb25 {
+  int e;
+   ee25(const ABISELECT(__tsi64,int) *const *); // _ZN4ee25C2Ev
+  virtual void  foo(); // _ZN4ee253fooEv
+  ~ee25(); // tgen
+  ee25(); // tgen
+};
+//SIG(-1 ee25) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee25 ::ee25(const ABISELECT(__tsi64,int) *const *){}
+void  ee25 ::foo(){vfunc_called(this, "_ZN4ee253fooEv");}
+ee25 ::~ee25(){ note_dtor("ee25", this);} // tgen
+ee25 ::ee25(){ note_ctor("ee25", this);} // tgen
+
+static void Test_ee25()
+{
+  extern Class_Descriptor cd_ee25;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee25, buf);
+    ee25 *dp, &lv = *(dp=new (buf) ee25());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee25)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee25)");
+    check_base_class_offset(lv, (aa25*), ABISELECT(16,12), "ee25");
+    check_base_class_offset(lv, (bb25*), 0, "ee25");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee25.e");
+    test_class_info(&lv, &cd_ee25);
+    dp->~ee25();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee25(Test_ee25, "ee25", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee25C1Ev();
+extern void _ZN4ee25D1Ev();
+Name_Map name_map_ee25[] = {
+  NSPAIR(_ZN4ee25C1Ev),
+  NSPAIR(_ZN4ee25D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa25;
+extern VTBL_ENTRY _ZTI4aa25[];
+extern  VTBL_ENTRY _ZTV4aa25[];
+extern Class_Descriptor cd_bb25;
+extern VTBL_ENTRY _ZTI4bb25[];
+extern  VTBL_ENTRY _ZTV4bb25[];
+static Base_Class bases_ee25[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa25,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb25,    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 _ZTI4ee25[];
+extern void _ZN4ee253fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee253fooEv,_ZTv0_n12_N4ee253fooEv)();
+extern void ABISELECT(_ZThn16_N4ee253fooEv,_ZThn12_N4ee253fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee25[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee25[0]),
+  (VTBL_ENTRY)&_ZN4ee253fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee25[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee253fooEv,_ZTv0_n12_N4ee253fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee25[];
+static  VTT_ENTRY vtt_ee25[] = {
+  {&(_ZTV4ee25[3]),  3,8},
+  {&(_ZTV4ee25[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee25[];
+extern  VTBL_ENTRY _ZTV4ee25[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee25[];
+static VTBL_ENTRY alt_thunk_names60[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee253fooEv,_ZTv0_n12_N4ee253fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee253fooEv,_ZThn12_N4ee253fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee25 = {  "ee25", // class name
+  bases_ee25, 2,
+  &(vtc_ee25[0]), // expected_vtbl_contents
+  &(vtt_ee25[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee25),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee25),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee25),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names60,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff25  : cc25 , virtual dd25 {
+  int f;
+   ff25(const ABISELECT(__tsi64,int) *const *); // _ZN4ff25C2Ev
+  virtual void  foo(); // _ZN4ff253fooEv
+  ~ff25(); // tgen
+  ff25(); // tgen
+};
+//SIG(-1 ff25) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff25 ::ff25(const ABISELECT(__tsi64,int) *const *){}
+void  ff25 ::foo(){vfunc_called(this, "_ZN4ff253fooEv");}
+ff25 ::~ff25(){ note_dtor("ff25", this);} // tgen
+ff25 ::ff25(){ note_ctor("ff25", this);} // tgen
+
+static void Test_ff25()
+{
+  extern Class_Descriptor cd_ff25;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff25, buf);
+    ff25 *dp, &lv = *(dp=new (buf) ff25());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff25)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff25)");
+    check_base_class_offset(lv, (cc25*), 0, "ff25");
+    check_base_class_offset(lv, (dd25*), ABISELECT(16,12), "ff25");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff25.f");
+    test_class_info(&lv, &cd_ff25);
+    dp->~ff25();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff25(Test_ff25, "ff25", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff25C1Ev();
+extern void _ZN4ff25D1Ev();
+Name_Map name_map_ff25[] = {
+  NSPAIR(_ZN4ff25C1Ev),
+  NSPAIR(_ZN4ff25D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc25;
+extern VTBL_ENTRY _ZTI4cc25[];
+extern  VTBL_ENTRY _ZTV4cc25[];
+extern Class_Descriptor cd_dd25;
+extern VTBL_ENTRY _ZTI4dd25[];
+extern  VTBL_ENTRY _ZTV4dd25[];
+static Base_Class bases_ff25[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc25,    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},
+  {&cd_dd25,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff25[];
+extern void _ZN4ff253fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff253fooEv,_ZTv0_n12_N4ff253fooEv)();
+extern void ABISELECT(_ZThn16_N4ff253fooEv,_ZThn12_N4ff253fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff25[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff25[0]),
+  (VTBL_ENTRY)&_ZN4ff253fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff25[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff253fooEv,_ZTv0_n12_N4ff253fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff25[];
+static  VTT_ENTRY vtt_ff25[] = {
+  {&(_ZTV4ff25[3]),  3,8},
+  {&(_ZTV4ff25[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff25[];
+extern  VTBL_ENTRY _ZTV4ff25[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff25[];
+static VTBL_ENTRY alt_thunk_names61[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff253fooEv,_ZTv0_n12_N4ff253fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff253fooEv,_ZThn12_N4ff253fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff25 = {  "ff25", // class name
+  bases_ff25, 2,
+  &(vtc_ff25[0]), // expected_vtbl_contents
+  &(vtt_ff25[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff25),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff25),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff25),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names61,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg25  : virtual ee25 , ff25 {
+  int g;
+   gg25(const ABISELECT(__tsi64,int) *const *); // _ZN4gg25C2Ev
+  virtual void  foo(); // _ZN4gg253fooEv
+  ~gg25(); // tgen
+  gg25(); // tgen
+};
+//SIG(1 gg25) C1{ VBC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg25 ::gg25(const ABISELECT(__tsi64,int) *const *){}
+void  gg25 ::foo(){vfunc_called(this, "_ZN4gg253fooEv");}
+gg25 ::~gg25(){ note_dtor("gg25", this);} // tgen
+gg25 ::gg25(){ note_ctor("gg25", this);} // tgen
+
+static void Test_gg25()
+{
+  extern Class_Descriptor cd_gg25;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg25, buf);
+    gg25 *dp, &lv = *(dp=new (buf) gg25());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg25)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg25)");
+    check_base_class_offset(lv, (aa25*)(ee25*), ABISELECT(40,28), "gg25");
+    check_base_class_offset(lv, (bb25*)(ee25*), ABISELECT(24,16), "gg25");
+    check_base_class_offset(lv, (ee25*), ABISELECT(24,16), "gg25");
+    check_base_class_offset(lv, (cc25*)(ff25*), 0, "gg25");
+    check_base_class_offset(lv, (dd25*)(ff25*), ABISELECT(56,36), "gg25");
+    check_base_class_offset(lv, (ff25*), 0, "gg25");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg25.g");
+    test_class_info(&lv, &cd_gg25);
+    dp->~gg25();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg25(Test_gg25, "gg25", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg25C1Ev();
+extern void _ZN4gg25D1Ev();
+Name_Map name_map_gg25[] = {
+  NSPAIR(_ZN4gg25C1Ev),
+  NSPAIR(_ZN4gg25D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa25;
+extern VTBL_ENTRY _ZTI4aa25[];
+extern  VTBL_ENTRY _ZTV4aa25[];
+extern Class_Descriptor cd_bb25;
+extern VTBL_ENTRY _ZTI4bb25[];
+extern  VTBL_ENTRY _ZTV4bb25[];
+extern Class_Descriptor cd_ee25;
+extern VTBL_ENTRY _ZTI4ee25[];
+extern  VTBL_ENTRY _ZTV4ee25[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee25[];
+extern Class_Descriptor cd_cc25;
+extern VTBL_ENTRY _ZTI4cc25[];
+extern  VTBL_ENTRY _ZTV4cc25[];
+extern Class_Descriptor cd_dd25;
+extern VTBL_ENTRY _ZTI4dd25[];
+extern  VTBL_ENTRY _ZTV4dd25[];
+extern Class_Descriptor cd_ff25;
+extern VTBL_ENTRY _ZTI4ff25[];
+extern  VTBL_ENTRY _ZTV4ff25[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff25[];
+static Base_Class bases_gg25[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa25,    ABISELECT(40,28), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb25,    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
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee25,    ABISELECT(24,16), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc25,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd25,    ABISELECT(56,36), //bcp->offset
+    15, //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
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff25,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg25[];
+extern void _ZN4gg253fooEv();
+extern void ABISELECT(_ZTv0_n32_N4gg253fooEv,_ZTv0_n16_N4gg253fooEv)();
+extern void ABISELECT(_ZThn24_N4gg253fooEv,_ZThn16_N4gg253fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg253fooEv,_ZTv0_n12_N4gg253fooEv)();
+extern void ABISELECT(_ZThn40_N4gg253fooEv,_ZThn28_N4gg253fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg253fooEv,_ZTv0_n12_N4gg253fooEv)();
+extern void ABISELECT(_ZThn56_N4gg253fooEv,_ZThn36_N4gg253fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg25[] = {
+  ABISELECT(40,28),
+  ABISELECT(24,16),
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg25[0]),
+  (VTBL_ENTRY)&_ZN4gg253fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(16,12),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg25[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg253fooEv,_ZTv0_n16_N4gg253fooEv),
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI4gg25[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg253fooEv,_ZTv0_n12_N4gg253fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg25[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg253fooEv,_ZTv0_n12_N4gg253fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg25[];
+extern void _ZN4ff253fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff25__4gg25[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff25[0]),
+  (VTBL_ENTRY)&_ZN4ff253fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff253fooEv,_ZTv0_n12_N4ff253fooEv)();
+extern void ABISELECT(_ZThn56_N4ff253fooEv,_ZThn36_N4ff253fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd25__4ff25__4gg25[] = {
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4ff25[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff253fooEv,_ZTv0_n12_N4ff253fooEv),
+};
+extern void _ZN4ee253fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee25__4gg25[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee25[0]),
+  (VTBL_ENTRY)&_ZN4ee253fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee253fooEv,_ZTv0_n12_N4ee253fooEv)();
+extern void ABISELECT(_ZThn16_N4ee253fooEv,_ZThn12_N4ee253fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa25__4ee25__4gg25[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee25[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee253fooEv,_ZTv0_n12_N4ee253fooEv),
+};
+static  VTT_ENTRY vtt_gg25[] = {
+  {&(_ZTV4gg25[5]),  5,19},
+  {&(_tg__ZTV4ff25__4gg25[3]),  3,4},
+  {&(_tg__ZTV4dd25__4ff25__4gg25[3]),  3,4},
+  {&(_ZTV4gg25[10]),  10,19},
+  {&(_ZTV4gg25[14]),  14,19},
+  {&(_ZTV4gg25[18]),  18,19},
+  {&(_tg__ZTV4ee25__4gg25[3]),  3,4},
+  {&(_tg__ZTV4aa25__4ee25__4gg25[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg25[];
+extern  VTBL_ENTRY _ZTV4gg25[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg25[];
+static VTBL_ENTRY alt_thunk_names62[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee253fooEv,_ZTv0_n12_N4ee253fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee253fooEv,_ZThn12_N4ee253fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff253fooEv,_ZTv0_n12_N4ff253fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4ff253fooEv,_ZThn36_N4ff253fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg253fooEv,_ZTv0_n12_N4gg253fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg253fooEv,_ZThn36_N4gg253fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg253fooEv,_ZThn28_N4gg253fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg253fooEv,_ZTv0_n16_N4gg253fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg253fooEv,_ZThn16_N4gg253fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg25 = {  "gg25", // class name
+  bases_gg25, 6,
+  &(vtc_gg25[0]), // expected_vtbl_contents
+  &(vtt_gg25[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg25),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg25),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg25),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names62,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa26  {
+  int a;
+   aa26(); // _ZN4aa26C1Ev
+  virtual void  foo(); // _ZN4aa263fooEv
+  ~aa26(); // tgen
+};
+//SIG(-1 aa26) C1{ v1 Fi}
+
+
+ aa26 ::aa26(){ note_ctor("aa26", this);}
+void  aa26 ::foo(){vfunc_called(this, "_ZN4aa263fooEv");}
+aa26 ::~aa26(){ note_dtor("aa26", this);} // tgen
+
+static void Test_aa26()
+{
+  extern Class_Descriptor cd_aa26;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa26, buf);
+    aa26 *dp, &lv = *(dp=new (buf) aa26());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa26)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa26)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa26.a");
+    test_class_info(&lv, &cd_aa26);
+    dp->~aa26();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa26(Test_aa26, "aa26", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa26C1Ev();
+extern void _ZN4aa26D1Ev();
+Name_Map name_map_aa26[] = {
+  NSPAIR(_ZN4aa26C1Ev),
+  NSPAIR(_ZN4aa26D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa26[];
+extern void _ZN4aa263fooEv();
+static  VTBL_ENTRY vtc_aa26[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa26[0]),
+  (VTBL_ENTRY)&_ZN4aa263fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa26[];
+extern  VTBL_ENTRY _ZTV4aa26[];
+Class_Descriptor cd_aa26 = {  "aa26", // class name
+  0,0,//no base classes
+  &(vtc_aa26[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa26),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa26),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  bb26  {
+  int b;
+   bb26(); // _ZN4bb26C1Ev
+  virtual void  foo(); // _ZN4bb263fooEv
+  ~bb26(); // tgen
+};
+//SIG(-1 bb26) C1{ v1 Fi}
+
+
+ bb26 ::bb26(){ note_ctor("bb26", this);}
+void  bb26 ::foo(){vfunc_called(this, "_ZN4bb263fooEv");}
+bb26 ::~bb26(){ note_dtor("bb26", this);} // tgen
+
+static void Test_bb26()
+{
+  extern Class_Descriptor cd_bb26;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb26, buf);
+    bb26 *dp, &lv = *(dp=new (buf) bb26());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb26)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb26)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb26.b");
+    test_class_info(&lv, &cd_bb26);
+    dp->~bb26();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb26(Test_bb26, "bb26", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb26C1Ev();
+extern void _ZN4bb26D1Ev();
+Name_Map name_map_bb26[] = {
+  NSPAIR(_ZN4bb26C1Ev),
+  NSPAIR(_ZN4bb26D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb26[];
+extern void _ZN4bb263fooEv();
+static  VTBL_ENTRY vtc_bb26[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb26[0]),
+  (VTBL_ENTRY)&_ZN4bb263fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb26[];
+extern  VTBL_ENTRY _ZTV4bb26[];
+Class_Descriptor cd_bb26 = {  "bb26", // class name
+  0,0,//no base classes
+  &(vtc_bb26[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb26),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb26),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  cc26  {
+  int c;
+   cc26(); // _ZN4cc26C1Ev
+  virtual void  foo(); // _ZN4cc263fooEv
+  ~cc26(); // tgen
+};
+//SIG(-1 cc26) C1{ v1 Fi}
+
+
+ cc26 ::cc26(){ note_ctor("cc26", this);}
+void  cc26 ::foo(){vfunc_called(this, "_ZN4cc263fooEv");}
+cc26 ::~cc26(){ note_dtor("cc26", this);} // tgen
+
+static void Test_cc26()
+{
+  extern Class_Descriptor cd_cc26;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc26, buf);
+    cc26 *dp, &lv = *(dp=new (buf) cc26());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc26)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc26)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc26.c");
+    test_class_info(&lv, &cd_cc26);
+    dp->~cc26();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc26(Test_cc26, "cc26", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc26C1Ev();
+extern void _ZN4cc26D1Ev();
+Name_Map name_map_cc26[] = {
+  NSPAIR(_ZN4cc26C1Ev),
+  NSPAIR(_ZN4cc26D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc26[];
+extern void _ZN4cc263fooEv();
+static  VTBL_ENTRY vtc_cc26[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc26[0]),
+  (VTBL_ENTRY)&_ZN4cc263fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc26[];
+extern  VTBL_ENTRY _ZTV4cc26[];
+Class_Descriptor cd_cc26 = {  "cc26", // class name
+  0,0,//no base classes
+  &(vtc_cc26[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc26),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc26),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  dd26  {
+  int d;
+   dd26(); // _ZN4dd26C1Ev
+  virtual void  foo(); // _ZN4dd263fooEv
+  ~dd26(); // tgen
+};
+//SIG(-1 dd26) C1{ v1 Fi}
+
+
+ dd26 ::dd26(){ note_ctor("dd26", this);}
+void  dd26 ::foo(){vfunc_called(this, "_ZN4dd263fooEv");}
+dd26 ::~dd26(){ note_dtor("dd26", this);} // tgen
+
+static void Test_dd26()
+{
+  extern Class_Descriptor cd_dd26;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd26, buf);
+    dd26 *dp, &lv = *(dp=new (buf) dd26());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd26)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd26)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd26.d");
+    test_class_info(&lv, &cd_dd26);
+    dp->~dd26();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd26(Test_dd26, "dd26", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd26C1Ev();
+extern void _ZN4dd26D1Ev();
+Name_Map name_map_dd26[] = {
+  NSPAIR(_ZN4dd26C1Ev),
+  NSPAIR(_ZN4dd26D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd26[];
+extern void _ZN4dd263fooEv();
+static  VTBL_ENTRY vtc_dd26[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd26[0]),
+  (VTBL_ENTRY)&_ZN4dd263fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd26[];
+extern  VTBL_ENTRY _ZTV4dd26[];
+Class_Descriptor cd_dd26 = {  "dd26", // class name
+  0,0,//no base classes
+  &(vtc_dd26[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd26),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd26),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  ee26  : aa26 , virtual bb26 {
+  int e;
+   ee26(const ABISELECT(__tsi64,int) *const *); // _ZN4ee26C2Ev
+  virtual void  foo(); // _ZN4ee263fooEv
+  ~ee26(); // tgen
+  ee26(); // tgen
+};
+//SIG(-1 ee26) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee26 ::ee26(const ABISELECT(__tsi64,int) *const *){}
+void  ee26 ::foo(){vfunc_called(this, "_ZN4ee263fooEv");}
+ee26 ::~ee26(){ note_dtor("ee26", this);} // tgen
+ee26 ::ee26(){ note_ctor("ee26", this);} // tgen
+
+static void Test_ee26()
+{
+  extern Class_Descriptor cd_ee26;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee26, buf);
+    ee26 *dp, &lv = *(dp=new (buf) ee26());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee26)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee26)");
+    check_base_class_offset(lv, (aa26*), 0, "ee26");
+    check_base_class_offset(lv, (bb26*), ABISELECT(16,12), "ee26");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee26.e");
+    test_class_info(&lv, &cd_ee26);
+    dp->~ee26();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee26(Test_ee26, "ee26", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee26C1Ev();
+extern void _ZN4ee26D1Ev();
+Name_Map name_map_ee26[] = {
+  NSPAIR(_ZN4ee26C1Ev),
+  NSPAIR(_ZN4ee26D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa26;
+extern VTBL_ENTRY _ZTI4aa26[];
+extern  VTBL_ENTRY _ZTV4aa26[];
+extern Class_Descriptor cd_bb26;
+extern VTBL_ENTRY _ZTI4bb26[];
+extern  VTBL_ENTRY _ZTV4bb26[];
+static Base_Class bases_ee26[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa26,    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},
+  {&cd_bb26,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee26[];
+extern void _ZN4ee263fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee263fooEv,_ZTv0_n12_N4ee263fooEv)();
+extern void ABISELECT(_ZThn16_N4ee263fooEv,_ZThn12_N4ee263fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee26[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee26[0]),
+  (VTBL_ENTRY)&_ZN4ee263fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee26[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee263fooEv,_ZTv0_n12_N4ee263fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee26[];
+static  VTT_ENTRY vtt_ee26[] = {
+  {&(_ZTV4ee26[3]),  3,8},
+  {&(_ZTV4ee26[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee26[];
+extern  VTBL_ENTRY _ZTV4ee26[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee26[];
+static VTBL_ENTRY alt_thunk_names63[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee263fooEv,_ZTv0_n12_N4ee263fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee263fooEv,_ZThn12_N4ee263fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee26 = {  "ee26", // class name
+  bases_ee26, 2,
+  &(vtc_ee26[0]), // expected_vtbl_contents
+  &(vtt_ee26[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee26),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee26),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee26),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names63,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff26  : cc26 , virtual dd26 {
+  int f;
+   ff26(const ABISELECT(__tsi64,int) *const *); // _ZN4ff26C2Ev
+  virtual void  foo(); // _ZN4ff263fooEv
+  ~ff26(); // tgen
+  ff26(); // tgen
+};
+//SIG(-1 ff26) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff26 ::ff26(const ABISELECT(__tsi64,int) *const *){}
+void  ff26 ::foo(){vfunc_called(this, "_ZN4ff263fooEv");}
+ff26 ::~ff26(){ note_dtor("ff26", this);} // tgen
+ff26 ::ff26(){ note_ctor("ff26", this);} // tgen
+
+static void Test_ff26()
+{
+  extern Class_Descriptor cd_ff26;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff26, buf);
+    ff26 *dp, &lv = *(dp=new (buf) ff26());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff26)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff26)");
+    check_base_class_offset(lv, (cc26*), 0, "ff26");
+    check_base_class_offset(lv, (dd26*), ABISELECT(16,12), "ff26");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff26.f");
+    test_class_info(&lv, &cd_ff26);
+    dp->~ff26();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff26(Test_ff26, "ff26", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff26C1Ev();
+extern void _ZN4ff26D1Ev();
+Name_Map name_map_ff26[] = {
+  NSPAIR(_ZN4ff26C1Ev),
+  NSPAIR(_ZN4ff26D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc26;
+extern VTBL_ENTRY _ZTI4cc26[];
+extern  VTBL_ENTRY _ZTV4cc26[];
+extern Class_Descriptor cd_dd26;
+extern VTBL_ENTRY _ZTI4dd26[];
+extern  VTBL_ENTRY _ZTV4dd26[];
+static Base_Class bases_ff26[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc26,    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},
+  {&cd_dd26,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff26[];
+extern void _ZN4ff263fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff263fooEv,_ZTv0_n12_N4ff263fooEv)();
+extern void ABISELECT(_ZThn16_N4ff263fooEv,_ZThn12_N4ff263fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff26[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff26[0]),
+  (VTBL_ENTRY)&_ZN4ff263fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff26[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff263fooEv,_ZTv0_n12_N4ff263fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff26[];
+static  VTT_ENTRY vtt_ff26[] = {
+  {&(_ZTV4ff26[3]),  3,8},
+  {&(_ZTV4ff26[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff26[];
+extern  VTBL_ENTRY _ZTV4ff26[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff26[];
+static VTBL_ENTRY alt_thunk_names64[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff263fooEv,_ZTv0_n12_N4ff263fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff263fooEv,_ZThn12_N4ff263fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff26 = {  "ff26", // class name
+  bases_ff26, 2,
+  &(vtc_ff26[0]), // expected_vtbl_contents
+  &(vtt_ff26[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff26),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff26),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff26),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names64,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg26  : virtual ee26 , ff26 {
+  int g;
+   gg26(const ABISELECT(__tsi64,int) *const *); // _ZN4gg26C2Ev
+  virtual void  foo(); // _ZN4gg263fooEv
+  ~gg26(); // tgen
+  gg26(); // tgen
+};
+//SIG(1 gg26) C1{ VBC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg26 ::gg26(const ABISELECT(__tsi64,int) *const *){}
+void  gg26 ::foo(){vfunc_called(this, "_ZN4gg263fooEv");}
+gg26 ::~gg26(){ note_dtor("gg26", this);} // tgen
+gg26 ::gg26(){ note_ctor("gg26", this);} // tgen
+
+static void Test_gg26()
+{
+  extern Class_Descriptor cd_gg26;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg26, buf);
+    gg26 *dp, &lv = *(dp=new (buf) gg26());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg26)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg26)");
+    check_base_class_offset(lv, (aa26*)(ee26*), ABISELECT(24,16), "gg26");
+    check_base_class_offset(lv, (bb26*)(ee26*), ABISELECT(40,28), "gg26");
+    check_base_class_offset(lv, (ee26*), ABISELECT(24,16), "gg26");
+    check_base_class_offset(lv, (cc26*)(ff26*), 0, "gg26");
+    check_base_class_offset(lv, (dd26*)(ff26*), ABISELECT(56,36), "gg26");
+    check_base_class_offset(lv, (ff26*), 0, "gg26");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg26.g");
+    test_class_info(&lv, &cd_gg26);
+    dp->~gg26();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg26(Test_gg26, "gg26", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg26C1Ev();
+extern void _ZN4gg26D1Ev();
+Name_Map name_map_gg26[] = {
+  NSPAIR(_ZN4gg26C1Ev),
+  NSPAIR(_ZN4gg26D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa26;
+extern VTBL_ENTRY _ZTI4aa26[];
+extern  VTBL_ENTRY _ZTV4aa26[];
+extern Class_Descriptor cd_bb26;
+extern VTBL_ENTRY _ZTI4bb26[];
+extern  VTBL_ENTRY _ZTV4bb26[];
+extern Class_Descriptor cd_ee26;
+extern VTBL_ENTRY _ZTI4ee26[];
+extern  VTBL_ENTRY _ZTV4ee26[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee26[];
+extern Class_Descriptor cd_cc26;
+extern VTBL_ENTRY _ZTI4cc26[];
+extern  VTBL_ENTRY _ZTV4cc26[];
+extern Class_Descriptor cd_dd26;
+extern VTBL_ENTRY _ZTI4dd26[];
+extern  VTBL_ENTRY _ZTV4dd26[];
+extern Class_Descriptor cd_ff26;
+extern VTBL_ENTRY _ZTI4ff26[];
+extern  VTBL_ENTRY _ZTV4ff26[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff26[];
+static Base_Class bases_gg26[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa26,    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
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb26,    ABISELECT(40,28), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee26,    ABISELECT(24,16), //bcp->offset
+    6, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc26,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd26,    ABISELECT(56,36), //bcp->offset
+    15, //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
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff26,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg26[];
+extern void _ZN4gg263fooEv();
+extern void ABISELECT(_ZTv0_n32_N4gg263fooEv,_ZTv0_n16_N4gg263fooEv)();
+extern void ABISELECT(_ZThn24_N4gg263fooEv,_ZThn16_N4gg263fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg263fooEv,_ZTv0_n12_N4gg263fooEv)();
+extern void ABISELECT(_ZThn40_N4gg263fooEv,_ZThn28_N4gg263fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg263fooEv,_ZTv0_n12_N4gg263fooEv)();
+extern void ABISELECT(_ZThn56_N4gg263fooEv,_ZThn36_N4gg263fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg26[] = {
+  ABISELECT(40,28),
+  ABISELECT(24,16),
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg26[0]),
+  (VTBL_ENTRY)&_ZN4gg263fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(16,12),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg26[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg263fooEv,_ZTv0_n16_N4gg263fooEv),
+  ABISELECT(-40,-28),
+  ABISELECT(-40,-28),
+  (VTBL_ENTRY)&(_ZTI4gg26[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg263fooEv,_ZTv0_n12_N4gg263fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg26[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg263fooEv,_ZTv0_n12_N4gg263fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg26[];
+extern void _ZN4ff263fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff26__4gg26[] = {
+  ABISELECT(56,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff26[0]),
+  (VTBL_ENTRY)&_ZN4ff263fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff263fooEv,_ZTv0_n12_N4ff263fooEv)();
+extern void ABISELECT(_ZThn56_N4ff263fooEv,_ZThn36_N4ff263fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd26__4ff26__4gg26[] = {
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4ff26[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff263fooEv,_ZTv0_n12_N4ff263fooEv),
+};
+extern void _ZN4ee263fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee26__4gg26[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee26[0]),
+  (VTBL_ENTRY)&_ZN4ee263fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee263fooEv,_ZTv0_n12_N4ee263fooEv)();
+extern void ABISELECT(_ZThn16_N4ee263fooEv,_ZThn12_N4ee263fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb26__4ee26__4gg26[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee26[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee263fooEv,_ZTv0_n12_N4ee263fooEv),
+};
+static  VTT_ENTRY vtt_gg26[] = {
+  {&(_ZTV4gg26[5]),  5,19},
+  {&(_tg__ZTV4ff26__4gg26[3]),  3,4},
+  {&(_tg__ZTV4dd26__4ff26__4gg26[3]),  3,4},
+  {&(_ZTV4gg26[10]),  10,19},
+  {&(_ZTV4gg26[14]),  14,19},
+  {&(_ZTV4gg26[18]),  18,19},
+  {&(_tg__ZTV4ee26__4gg26[3]),  3,4},
+  {&(_tg__ZTV4bb26__4ee26__4gg26[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg26[];
+extern  VTBL_ENTRY _ZTV4gg26[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg26[];
+static VTBL_ENTRY alt_thunk_names65[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee263fooEv,_ZTv0_n12_N4ee263fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee263fooEv,_ZThn12_N4ee263fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff263fooEv,_ZTv0_n12_N4ff263fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4ff263fooEv,_ZThn36_N4ff263fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg263fooEv,_ZTv0_n12_N4gg263fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg263fooEv,_ZThn36_N4gg263fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg263fooEv,_ZThn28_N4gg263fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg263fooEv,_ZTv0_n16_N4gg263fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg263fooEv,_ZThn16_N4gg263fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg26 = {  "gg26", // class name
+  bases_gg26, 6,
+  &(vtc_gg26[0]), // expected_vtbl_contents
+  &(vtt_gg26[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg26),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg26),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg26),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names65,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa27  {
+  int a;
+   aa27(); // _ZN4aa27C1Ev
+  virtual void  foo(); // _ZN4aa273fooEv
+  ~aa27(); // tgen
+};
+//SIG(-1 aa27) C1{ v1 Fi}
+
+
+ aa27 ::aa27(){ note_ctor("aa27", this);}
+void  aa27 ::foo(){vfunc_called(this, "_ZN4aa273fooEv");}
+aa27 ::~aa27(){ note_dtor("aa27", this);} // tgen
+
+static void Test_aa27()
+{
+  extern Class_Descriptor cd_aa27;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa27, buf);
+    aa27 *dp, &lv = *(dp=new (buf) aa27());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa27)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa27)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa27.a");
+    test_class_info(&lv, &cd_aa27);
+    dp->~aa27();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa27(Test_aa27, "aa27", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa27C1Ev();
+extern void _ZN4aa27D1Ev();
+Name_Map name_map_aa27[] = {
+  NSPAIR(_ZN4aa27C1Ev),
+  NSPAIR(_ZN4aa27D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa27[];
+extern void _ZN4aa273fooEv();
+static  VTBL_ENTRY vtc_aa27[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa27[0]),
+  (VTBL_ENTRY)&_ZN4aa273fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa27[];
+extern  VTBL_ENTRY _ZTV4aa27[];
+Class_Descriptor cd_aa27 = {  "aa27", // class name
+  0,0,//no base classes
+  &(vtc_aa27[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa27),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa27),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  bb27  {
+  int b;
+   bb27(); // _ZN4bb27C1Ev
+  virtual void  foo(); // _ZN4bb273fooEv
+  ~bb27(); // tgen
+};
+//SIG(-1 bb27) C1{ v1 Fi}
+
+
+ bb27 ::bb27(){ note_ctor("bb27", this);}
+void  bb27 ::foo(){vfunc_called(this, "_ZN4bb273fooEv");}
+bb27 ::~bb27(){ note_dtor("bb27", this);} // tgen
+
+static void Test_bb27()
+{
+  extern Class_Descriptor cd_bb27;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb27, buf);
+    bb27 *dp, &lv = *(dp=new (buf) bb27());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb27)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb27)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb27.b");
+    test_class_info(&lv, &cd_bb27);
+    dp->~bb27();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb27(Test_bb27, "bb27", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb27C1Ev();
+extern void _ZN4bb27D1Ev();
+Name_Map name_map_bb27[] = {
+  NSPAIR(_ZN4bb27C1Ev),
+  NSPAIR(_ZN4bb27D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb27[];
+extern void _ZN4bb273fooEv();
+static  VTBL_ENTRY vtc_bb27[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb27[0]),
+  (VTBL_ENTRY)&_ZN4bb273fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb27[];
+extern  VTBL_ENTRY _ZTV4bb27[];
+Class_Descriptor cd_bb27 = {  "bb27", // class name
+  0,0,//no base classes
+  &(vtc_bb27[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb27),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb27),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  cc27  {
+  int c;
+   cc27(); // _ZN4cc27C1Ev
+  virtual void  foo(); // _ZN4cc273fooEv
+  ~cc27(); // tgen
+};
+//SIG(-1 cc27) C1{ v1 Fi}
+
+
+ cc27 ::cc27(){ note_ctor("cc27", this);}
+void  cc27 ::foo(){vfunc_called(this, "_ZN4cc273fooEv");}
+cc27 ::~cc27(){ note_dtor("cc27", this);} // tgen
+
+static void Test_cc27()
+{
+  extern Class_Descriptor cd_cc27;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc27, buf);
+    cc27 *dp, &lv = *(dp=new (buf) cc27());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc27)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc27)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc27.c");
+    test_class_info(&lv, &cd_cc27);
+    dp->~cc27();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc27(Test_cc27, "cc27", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc27C1Ev();
+extern void _ZN4cc27D1Ev();
+Name_Map name_map_cc27[] = {
+  NSPAIR(_ZN4cc27C1Ev),
+  NSPAIR(_ZN4cc27D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc27[];
+extern void _ZN4cc273fooEv();
+static  VTBL_ENTRY vtc_cc27[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc27[0]),
+  (VTBL_ENTRY)&_ZN4cc273fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc27[];
+extern  VTBL_ENTRY _ZTV4cc27[];
+Class_Descriptor cd_cc27 = {  "cc27", // class name
+  0,0,//no base classes
+  &(vtc_cc27[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc27),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc27),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  dd27  {
+  int d;
+   dd27(); // _ZN4dd27C1Ev
+  virtual void  foo(); // _ZN4dd273fooEv
+  ~dd27(); // tgen
+};
+//SIG(-1 dd27) C1{ v1 Fi}
+
+
+ dd27 ::dd27(){ note_ctor("dd27", this);}
+void  dd27 ::foo(){vfunc_called(this, "_ZN4dd273fooEv");}
+dd27 ::~dd27(){ note_dtor("dd27", this);} // tgen
+
+static void Test_dd27()
+{
+  extern Class_Descriptor cd_dd27;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd27, buf);
+    dd27 *dp, &lv = *(dp=new (buf) dd27());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd27)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd27)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd27.d");
+    test_class_info(&lv, &cd_dd27);
+    dp->~dd27();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd27(Test_dd27, "dd27", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd27C1Ev();
+extern void _ZN4dd27D1Ev();
+Name_Map name_map_dd27[] = {
+  NSPAIR(_ZN4dd27C1Ev),
+  NSPAIR(_ZN4dd27D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd27[];
+extern void _ZN4dd273fooEv();
+static  VTBL_ENTRY vtc_dd27[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd27[0]),
+  (VTBL_ENTRY)&_ZN4dd273fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd27[];
+extern  VTBL_ENTRY _ZTV4dd27[];
+Class_Descriptor cd_dd27 = {  "dd27", // class name
+  0,0,//no base classes
+  &(vtc_dd27[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd27),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd27),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  ee27  : virtual aa27 , virtual bb27 {
+  int e;
+   ee27(const ABISELECT(__tsi64,int) *const *); // _ZN4ee27C2Ev
+  virtual void  foo(); // _ZN4ee273fooEv
+  ~ee27(); // tgen
+  ee27(); // tgen
+};
+//SIG(-1 ee27) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee27 ::ee27(const ABISELECT(__tsi64,int) *const *){}
+void  ee27 ::foo(){vfunc_called(this, "_ZN4ee273fooEv");}
+ee27 ::~ee27(){ note_dtor("ee27", this);} // tgen
+ee27 ::ee27(){ note_ctor("ee27", this);} // tgen
+
+static void Test_ee27()
+{
+  extern Class_Descriptor cd_ee27;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee27, buf);
+    ee27 *dp, &lv = *(dp=new (buf) ee27());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee27)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee27)");
+    check_base_class_offset(lv, (aa27*), ABISELECT(16,8), "ee27");
+    check_base_class_offset(lv, (bb27*), ABISELECT(32,16), "ee27");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee27.e");
+    test_class_info(&lv, &cd_ee27);
+    dp->~ee27();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee27(Test_ee27, "ee27", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ee27C1Ev();
+extern void _ZN4ee27D1Ev();
+Name_Map name_map_ee27[] = {
+  NSPAIR(_ZN4ee27C1Ev),
+  NSPAIR(_ZN4ee27D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa27;
+extern VTBL_ENTRY _ZTI4aa27[];
+extern  VTBL_ENTRY _ZTV4aa27[];
+extern Class_Descriptor cd_bb27;
+extern VTBL_ENTRY _ZTI4bb27[];
+extern  VTBL_ENTRY _ZTV4bb27[];
+static Base_Class bases_ee27[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa27,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb27,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee27[];
+extern void _ZN4ee273fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv)();
+extern void ABISELECT(_ZThn16_N4ee273fooEv,_ZThn8_N4ee273fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv)();
+extern void ABISELECT(_ZThn32_N4ee273fooEv,_ZThn16_N4ee273fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee27[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee27[0]),
+  (VTBL_ENTRY)&_ZN4ee273fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee27[];
+static  VTT_ENTRY vtt_ee27[] = {
+  {&(_ZTV4ee27[4]),  4,13},
+  {&(_ZTV4ee27[8]),  8,13},
+  {&(_ZTV4ee27[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ee27[];
+extern  VTBL_ENTRY _ZTV4ee27[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee27[];
+static VTBL_ENTRY alt_thunk_names66[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee273fooEv,_ZThn16_N4ee273fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee273fooEv,_ZThn8_N4ee273fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee27 = {  "ee27", // class name
+  bases_ee27, 2,
+  &(vtc_ee27[0]), // expected_vtbl_contents
+  &(vtt_ee27[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ee27),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee27),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee27),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names66,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff27  : cc27 , virtual dd27 {
+  int f;
+   ff27(const ABISELECT(__tsi64,int) *const *); // _ZN4ff27C2Ev
+  virtual void  foo(); // _ZN4ff273fooEv
+  ~ff27(); // tgen
+  ff27(); // tgen
+};
+//SIG(-1 ff27) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff27 ::ff27(const ABISELECT(__tsi64,int) *const *){}
+void  ff27 ::foo(){vfunc_called(this, "_ZN4ff273fooEv");}
+ff27 ::~ff27(){ note_dtor("ff27", this);} // tgen
+ff27 ::ff27(){ note_ctor("ff27", this);} // tgen
+
+static void Test_ff27()
+{
+  extern Class_Descriptor cd_ff27;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff27, buf);
+    ff27 *dp, &lv = *(dp=new (buf) ff27());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff27)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff27)");
+    check_base_class_offset(lv, (cc27*), 0, "ff27");
+    check_base_class_offset(lv, (dd27*), ABISELECT(16,12), "ff27");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff27.f");
+    test_class_info(&lv, &cd_ff27);
+    dp->~ff27();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff27(Test_ff27, "ff27", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff27C1Ev();
+extern void _ZN4ff27D1Ev();
+Name_Map name_map_ff27[] = {
+  NSPAIR(_ZN4ff27C1Ev),
+  NSPAIR(_ZN4ff27D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc27;
+extern VTBL_ENTRY _ZTI4cc27[];
+extern  VTBL_ENTRY _ZTV4cc27[];
+extern Class_Descriptor cd_dd27;
+extern VTBL_ENTRY _ZTI4dd27[];
+extern  VTBL_ENTRY _ZTV4dd27[];
+static Base_Class bases_ff27[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc27,    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},
+  {&cd_dd27,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff27[];
+extern void _ZN4ff273fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff273fooEv,_ZTv0_n12_N4ff273fooEv)();
+extern void ABISELECT(_ZThn16_N4ff273fooEv,_ZThn12_N4ff273fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff27[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff27[0]),
+  (VTBL_ENTRY)&_ZN4ff273fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff273fooEv,_ZTv0_n12_N4ff273fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff27[];
+static  VTT_ENTRY vtt_ff27[] = {
+  {&(_ZTV4ff27[3]),  3,8},
+  {&(_ZTV4ff27[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff27[];
+extern  VTBL_ENTRY _ZTV4ff27[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff27[];
+static VTBL_ENTRY alt_thunk_names67[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff273fooEv,_ZTv0_n12_N4ff273fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff273fooEv,_ZThn12_N4ff273fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff27 = {  "ff27", // class name
+  bases_ff27, 2,
+  &(vtc_ff27[0]), // expected_vtbl_contents
+  &(vtt_ff27[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff27),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff27),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff27),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names67,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg27  : virtual ee27 , ff27 {
+  int g;
+   gg27(const ABISELECT(__tsi64,int) *const *); // _ZN4gg27C2Ev
+  virtual void  foo(); // _ZN4gg273fooEv
+  ~gg27(); // tgen
+  gg27(); // tgen
+};
+//SIG(1 gg27) C1{ VBC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ BC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg27 ::gg27(const ABISELECT(__tsi64,int) *const *){}
+void  gg27 ::foo(){vfunc_called(this, "_ZN4gg273fooEv");}
+gg27 ::~gg27(){ note_dtor("gg27", this);} // tgen
+gg27 ::gg27(){ note_ctor("gg27", this);} // tgen
+
+static void Test_gg27()
+{
+  extern Class_Descriptor cd_gg27;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(12,13)];
+    init_test(&cd_gg27, buf);
+    gg27 *dp, &lv = *(dp=new (buf) gg27());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(88,48), "sizeof(gg27)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg27)");
+    check_base_class_offset(lv, (aa27*)(ee27*), ABISELECT(40,24), "gg27");
+    check_base_class_offset(lv, (bb27*)(ee27*), ABISELECT(56,32), "gg27");
+    check_base_class_offset(lv, (ee27*), ABISELECT(24,16), "gg27");
+    check_base_class_offset(lv, (cc27*)(ff27*), 0, "gg27");
+    check_base_class_offset(lv, (dd27*)(ff27*), ABISELECT(72,40), "gg27");
+    check_base_class_offset(lv, (ff27*), 0, "gg27");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg27.g");
+    test_class_info(&lv, &cd_gg27);
+    dp->~gg27();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg27(Test_gg27, "gg27", ABISELECT(88,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg27C1Ev();
+extern void _ZN4gg27D1Ev();
+Name_Map name_map_gg27[] = {
+  NSPAIR(_ZN4gg27C1Ev),
+  NSPAIR(_ZN4gg27D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa27;
+extern VTBL_ENTRY _ZTI4aa27[];
+extern  VTBL_ENTRY _ZTV4aa27[];
+extern Class_Descriptor cd_bb27;
+extern VTBL_ENTRY _ZTI4bb27[];
+extern  VTBL_ENTRY _ZTV4bb27[];
+extern Class_Descriptor cd_ee27;
+extern VTBL_ENTRY _ZTI4ee27[];
+extern  VTBL_ENTRY _ZTV4ee27[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee27[];
+extern Class_Descriptor cd_cc27;
+extern VTBL_ENTRY _ZTI4cc27[];
+extern  VTBL_ENTRY _ZTV4cc27[];
+extern Class_Descriptor cd_dd27;
+extern VTBL_ENTRY _ZTI4dd27[];
+extern  VTBL_ENTRY _ZTV4dd27[];
+extern Class_Descriptor cd_ff27;
+extern VTBL_ENTRY _ZTI4ff27[];
+extern  VTBL_ENTRY _ZTV4ff27[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff27[];
+static Base_Class bases_gg27[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa27,    ABISELECT(40,24), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb27,    ABISELECT(56,32), //bcp->offset
+    17, //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
+    2, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee27,    ABISELECT(24,16), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    4, //bcp->index_in_construction_vtbl_array
+    8, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc27,    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
+    5, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd27,    ABISELECT(72,40), //bcp->offset
+    21, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff27,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg27[];
+extern void _ZN4gg273fooEv();
+extern void ABISELECT(_ZTv0_n40_N4gg273fooEv,_ZTv0_n20_N4gg273fooEv)();
+extern void ABISELECT(_ZThn24_N4gg273fooEv,_ZThn16_N4gg273fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg273fooEv,_ZTv0_n12_N4gg273fooEv)();
+extern void ABISELECT(_ZThn40_N4gg273fooEv,_ZThn24_N4gg273fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg273fooEv,_ZTv0_n12_N4gg273fooEv)();
+extern void ABISELECT(_ZThn56_N4gg273fooEv,_ZThn32_N4gg273fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg273fooEv,_ZTv0_n12_N4gg273fooEv)();
+extern void ABISELECT(_ZThn72_N4gg273fooEv,_ZThn40_N4gg273fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg27[] = {
+  ABISELECT(56,32),
+  ABISELECT(40,24),
+  ABISELECT(24,16),
+  ABISELECT(72,40),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg27[0]),
+  (VTBL_ENTRY)&_ZN4gg273fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N4gg273fooEv,_ZTv0_n20_N4gg273fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg273fooEv,_ZTv0_n12_N4gg273fooEv),
+  ABISELECT(-56,-32),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4gg27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg273fooEv,_ZTv0_n12_N4gg273fooEv),
+  ABISELECT(-72,-40),
+  ABISELECT(-72,-40),
+  (VTBL_ENTRY)&(_ZTI4gg27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg273fooEv,_ZTv0_n12_N4gg273fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg27[];
+extern void _ZN4ff273fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff27__4gg27[] = {
+  ABISELECT(72,40),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff27[0]),
+  (VTBL_ENTRY)&_ZN4ff273fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff273fooEv,_ZTv0_n12_N4ff273fooEv)();
+extern void ABISELECT(_ZThn72_N4ff273fooEv,_ZThn40_N4ff273fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd27__4ff27__4gg27[] = {
+  ABISELECT(-72,-40),
+  ABISELECT(-72,-40),
+  (VTBL_ENTRY)&(_ZTI4ff27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff273fooEv,_ZTv0_n12_N4ff273fooEv),
+};
+extern void _ZN4ee273fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee27__4gg27[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee27[0]),
+  (VTBL_ENTRY)&_ZN4ee273fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv)();
+extern void ABISELECT(_ZThn16_N4ee273fooEv,_ZThn8_N4ee273fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa27__4ee27__4gg27[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv)();
+extern void ABISELECT(_ZThn32_N4ee273fooEv,_ZThn16_N4ee273fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb27__4ee27__4gg27[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee27[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv),
+};
+static  VTT_ENTRY vtt_gg27[] = {
+  {&(_ZTV4gg27[6]),  6,25},
+  {&(_tg__ZTV4ff27__4gg27[3]),  3,4},
+  {&(_tg__ZTV4dd27__4ff27__4gg27[3]),  3,4},
+  {&(_ZTV4gg27[12]),  12,25},
+  {&(_ZTV4gg27[16]),  16,25},
+  {&(_ZTV4gg27[20]),  20,25},
+  {&(_ZTV4gg27[24]),  24,25},
+  {&(_tg__ZTV4ee27__4gg27[4]),  4,5},
+  {&(_tg__ZTV4aa27__4ee27__4gg27[3]),  3,4},
+  {&(_tg__ZTV4bb27__4ee27__4gg27[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg27[];
+extern  VTBL_ENTRY _ZTV4gg27[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg27[];
+static VTBL_ENTRY alt_thunk_names68[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee273fooEv,_ZTv0_n12_N4ee273fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee273fooEv,_ZThn16_N4ee273fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee273fooEv,_ZThn8_N4ee273fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff273fooEv,_ZTv0_n12_N4ff273fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn72_N4ff273fooEv,_ZThn40_N4ff273fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg273fooEv,_ZTv0_n12_N4gg273fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn72_N4gg273fooEv,_ZThn40_N4gg273fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg273fooEv,_ZThn32_N4gg273fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg273fooEv,_ZThn24_N4gg273fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N4gg273fooEv,_ZTv0_n20_N4gg273fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg273fooEv,_ZThn16_N4gg273fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg27 = {  "gg27", // class name
+  bases_gg27, 6,
+  &(vtc_gg27[0]), // expected_vtbl_contents
+  &(vtt_gg27[0]), // expected_vtt_contents
+  ABISELECT(88,48), // object size
+  NSPAIRA(_ZTI4gg27),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg27),25, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg27),10, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names68,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa28  {
+  int a;
+   aa28(); // _ZN4aa28C1Ev
+  virtual void  foo(); // _ZN4aa283fooEv
+  ~aa28(); // tgen
+};
+//SIG(-1 aa28) C1{ v1 Fi}
+
+
+ aa28 ::aa28(){ note_ctor("aa28", this);}
+void  aa28 ::foo(){vfunc_called(this, "_ZN4aa283fooEv");}
+aa28 ::~aa28(){ note_dtor("aa28", this);} // tgen
+
+static void Test_aa28()
+{
+  extern Class_Descriptor cd_aa28;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa28, buf);
+    aa28 *dp, &lv = *(dp=new (buf) aa28());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa28)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa28)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa28.a");
+    test_class_info(&lv, &cd_aa28);
+    dp->~aa28();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa28(Test_aa28, "aa28", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa28C1Ev();
+extern void _ZN4aa28D1Ev();
+Name_Map name_map_aa28[] = {
+  NSPAIR(_ZN4aa28C1Ev),
+  NSPAIR(_ZN4aa28D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa28[];
+extern void _ZN4aa283fooEv();
+static  VTBL_ENTRY vtc_aa28[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa28[0]),
+  (VTBL_ENTRY)&_ZN4aa283fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa28[];
+extern  VTBL_ENTRY _ZTV4aa28[];
+Class_Descriptor cd_aa28 = {  "aa28", // class name
+  0,0,//no base classes
+  &(vtc_aa28[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa28),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa28),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  bb28  {
+  int b;
+   bb28(); // _ZN4bb28C1Ev
+  virtual void  foo(); // _ZN4bb283fooEv
+  ~bb28(); // tgen
+};
+//SIG(-1 bb28) C1{ v1 Fi}
+
+
+ bb28 ::bb28(){ note_ctor("bb28", this);}
+void  bb28 ::foo(){vfunc_called(this, "_ZN4bb283fooEv");}
+bb28 ::~bb28(){ note_dtor("bb28", this);} // tgen
+
+static void Test_bb28()
+{
+  extern Class_Descriptor cd_bb28;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb28, buf);
+    bb28 *dp, &lv = *(dp=new (buf) bb28());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb28)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb28)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb28.b");
+    test_class_info(&lv, &cd_bb28);
+    dp->~bb28();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb28(Test_bb28, "bb28", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb28C1Ev();
+extern void _ZN4bb28D1Ev();
+Name_Map name_map_bb28[] = {
+  NSPAIR(_ZN4bb28C1Ev),
+  NSPAIR(_ZN4bb28D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb28[];
+extern void _ZN4bb283fooEv();
+static  VTBL_ENTRY vtc_bb28[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb28[0]),
+  (VTBL_ENTRY)&_ZN4bb283fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb28[];
+extern  VTBL_ENTRY _ZTV4bb28[];
+Class_Descriptor cd_bb28 = {  "bb28", // class name
+  0,0,//no base classes
+  &(vtc_bb28[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb28),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb28),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  cc28  {
+  int c;
+   cc28(); // _ZN4cc28C1Ev
+  virtual void  foo(); // _ZN4cc283fooEv
+  ~cc28(); // tgen
+};
+//SIG(-1 cc28) C1{ v1 Fi}
+
+
+ cc28 ::cc28(){ note_ctor("cc28", this);}
+void  cc28 ::foo(){vfunc_called(this, "_ZN4cc283fooEv");}
+cc28 ::~cc28(){ note_dtor("cc28", this);} // tgen
+
+static void Test_cc28()
+{
+  extern Class_Descriptor cd_cc28;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc28, buf);
+    cc28 *dp, &lv = *(dp=new (buf) cc28());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc28)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc28)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc28.c");
+    test_class_info(&lv, &cd_cc28);
+    dp->~cc28();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc28(Test_cc28, "cc28", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc28C1Ev();
+extern void _ZN4cc28D1Ev();
+Name_Map name_map_cc28[] = {
+  NSPAIR(_ZN4cc28C1Ev),
+  NSPAIR(_ZN4cc28D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc28[];
+extern void _ZN4cc283fooEv();
+static  VTBL_ENTRY vtc_cc28[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc28[0]),
+  (VTBL_ENTRY)&_ZN4cc283fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc28[];
+extern  VTBL_ENTRY _ZTV4cc28[];
+Class_Descriptor cd_cc28 = {  "cc28", // class name
+  0,0,//no base classes
+  &(vtc_cc28[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc28),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc28),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  dd28  {
+  int d;
+   dd28(); // _ZN4dd28C1Ev
+  virtual void  foo(); // _ZN4dd283fooEv
+  ~dd28(); // tgen
+};
+//SIG(-1 dd28) C1{ v1 Fi}
+
+
+ dd28 ::dd28(){ note_ctor("dd28", this);}
+void  dd28 ::foo(){vfunc_called(this, "_ZN4dd283fooEv");}
+dd28 ::~dd28(){ note_dtor("dd28", this);} // tgen
+
+static void Test_dd28()
+{
+  extern Class_Descriptor cd_dd28;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd28, buf);
+    dd28 *dp, &lv = *(dp=new (buf) dd28());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd28)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd28)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd28.d");
+    test_class_info(&lv, &cd_dd28);
+    dp->~dd28();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd28(Test_dd28, "dd28", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd28C1Ev();
+extern void _ZN4dd28D1Ev();
+Name_Map name_map_dd28[] = {
+  NSPAIR(_ZN4dd28C1Ev),
+  NSPAIR(_ZN4dd28D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd28[];
+extern void _ZN4dd283fooEv();
+static  VTBL_ENTRY vtc_dd28[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd28[0]),
+  (VTBL_ENTRY)&_ZN4dd283fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd28[];
+extern  VTBL_ENTRY _ZTV4dd28[];
+Class_Descriptor cd_dd28 = {  "dd28", // class name
+  0,0,//no base classes
+  &(vtc_dd28[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd28),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd28),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  ee28  : aa28 , bb28 {
+  int e;
+   ee28(); // _ZN4ee28C1Ev
+  virtual void  foo(); // _ZN4ee283fooEv
+  ~ee28(); // tgen
+};
+//SIG(-1 ee28) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee28 ::ee28(){ note_ctor("ee28", this);}
+void  ee28 ::foo(){vfunc_called(this, "_ZN4ee283fooEv");}
+ee28 ::~ee28(){ note_dtor("ee28", this);} // tgen
+
+static void Test_ee28()
+{
+  extern Class_Descriptor cd_ee28;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee28, buf);
+    ee28 *dp, &lv = *(dp=new (buf) ee28());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee28)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee28)");
+    check_base_class_offset(lv, (aa28*), 0, "ee28");
+    check_base_class_offset(lv, (bb28*), ABISELECT(16,8), "ee28");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee28.e");
+    test_class_info(&lv, &cd_ee28);
+    dp->~ee28();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee28(Test_ee28, "ee28", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee28C1Ev();
+extern void _ZN4ee28D1Ev();
+Name_Map name_map_ee28[] = {
+  NSPAIR(_ZN4ee28C1Ev),
+  NSPAIR(_ZN4ee28D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa28;
+extern VTBL_ENTRY _ZTI4aa28[];
+extern  VTBL_ENTRY _ZTV4aa28[];
+extern Class_Descriptor cd_bb28;
+extern VTBL_ENTRY _ZTI4bb28[];
+extern  VTBL_ENTRY _ZTV4bb28[];
+static Base_Class bases_ee28[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa28,    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},
+  {&cd_bb28,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ee28[];
+extern void _ZN4ee283fooEv();
+extern void ABISELECT(_ZThn16_N4ee283fooEv,_ZThn8_N4ee283fooEv)();
+static  VTBL_ENTRY vtc_ee28[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee28[0]),
+  (VTBL_ENTRY)&_ZN4ee283fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee28[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ee283fooEv,_ZThn8_N4ee283fooEv),
+};
+extern VTBL_ENTRY _ZTI4ee28[];
+extern  VTBL_ENTRY _ZTV4ee28[];
+Class_Descriptor cd_ee28 = {  "ee28", // class name
+  bases_ee28, 2,
+  &(vtc_ee28[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee28),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee28),6, //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  ff28  : virtual cc28 , virtual dd28 {
+  int f;
+   ff28(const ABISELECT(__tsi64,int) *const *); // _ZN4ff28C2Ev
+  virtual void  foo(); // _ZN4ff283fooEv
+  ~ff28(); // tgen
+  ff28(); // tgen
+};
+//SIG(-1 ff28) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff28 ::ff28(const ABISELECT(__tsi64,int) *const *){}
+void  ff28 ::foo(){vfunc_called(this, "_ZN4ff283fooEv");}
+ff28 ::~ff28(){ note_dtor("ff28", this);} // tgen
+ff28 ::ff28(){ note_ctor("ff28", this);} // tgen
+
+static void Test_ff28()
+{
+  extern Class_Descriptor cd_ff28;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ff28, buf);
+    ff28 *dp, &lv = *(dp=new (buf) ff28());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ff28)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff28)");
+    check_base_class_offset(lv, (cc28*), ABISELECT(16,8), "ff28");
+    check_base_class_offset(lv, (dd28*), ABISELECT(32,16), "ff28");
+    check_field_offset(lv, f, ABISELECT(8,4), "ff28.f");
+    test_class_info(&lv, &cd_ff28);
+    dp->~ff28();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff28(Test_ff28, "ff28", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ff28C1Ev();
+extern void _ZN4ff28D1Ev();
+Name_Map name_map_ff28[] = {
+  NSPAIR(_ZN4ff28C1Ev),
+  NSPAIR(_ZN4ff28D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc28;
+extern VTBL_ENTRY _ZTI4cc28[];
+extern  VTBL_ENTRY _ZTV4cc28[];
+extern Class_Descriptor cd_dd28;
+extern VTBL_ENTRY _ZTI4dd28[];
+extern  VTBL_ENTRY _ZTV4dd28[];
+static Base_Class bases_ff28[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc28,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd28,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff28[];
+extern void _ZN4ff283fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv)();
+extern void ABISELECT(_ZThn16_N4ff283fooEv,_ZThn8_N4ff283fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv)();
+extern void ABISELECT(_ZThn32_N4ff283fooEv,_ZThn16_N4ff283fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff28[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff28[0]),
+  (VTBL_ENTRY)&_ZN4ff283fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff28[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ff28[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff28[];
+static  VTT_ENTRY vtt_ff28[] = {
+  {&(_ZTV4ff28[4]),  4,13},
+  {&(_ZTV4ff28[8]),  8,13},
+  {&(_ZTV4ff28[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ff28[];
+extern  VTBL_ENTRY _ZTV4ff28[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff28[];
+static VTBL_ENTRY alt_thunk_names69[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff283fooEv,_ZThn16_N4ff283fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff283fooEv,_ZThn8_N4ff283fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff28 = {  "ff28", // class name
+  bases_ff28, 2,
+  &(vtc_ff28[0]), // expected_vtbl_contents
+  &(vtt_ff28[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ff28),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff28),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff28),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names69,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg28  : virtual ee28 , ff28 {
+  int g;
+   gg28(const ABISELECT(__tsi64,int) *const *); // _ZN4gg28C2Ev
+  virtual void  foo(); // _ZN4gg283fooEv
+  ~gg28(); // tgen
+  gg28(); // tgen
+};
+//SIG(1 gg28) C1{ VBC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg28 ::gg28(const ABISELECT(__tsi64,int) *const *){}
+void  gg28 ::foo(){vfunc_called(this, "_ZN4gg283fooEv");}
+gg28 ::~gg28(){ note_dtor("gg28", this);} // tgen
+gg28 ::gg28(){ note_ctor("gg28", this);} // tgen
+
+static void Test_gg28()
+{
+  extern Class_Descriptor cd_gg28;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(11,13)];
+    init_test(&cd_gg28, buf);
+    gg28 *dp, &lv = *(dp=new (buf) gg28());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(80,48), "sizeof(gg28)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg28)");
+    check_base_class_offset(lv, (aa28*)(ee28*), ABISELECT(16,12), "gg28");
+    check_base_class_offset(lv, (bb28*)(ee28*), ABISELECT(32,20), "gg28");
+    check_base_class_offset(lv, (ee28*), ABISELECT(16,12), "gg28");
+    check_base_class_offset(lv, (cc28*)(ff28*), ABISELECT(48,32), "gg28");
+    check_base_class_offset(lv, (dd28*)(ff28*), ABISELECT(64,40), "gg28");
+    check_base_class_offset(lv, (ff28*), 0, "gg28");
+    check_field_offset(lv, g, ABISELECT(12,8), "gg28.g");
+    test_class_info(&lv, &cd_gg28);
+    dp->~gg28();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg28(Test_gg28, "gg28", ABISELECT(80,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg28C1Ev();
+extern void _ZN4gg28D1Ev();
+Name_Map name_map_gg28[] = {
+  NSPAIR(_ZN4gg28C1Ev),
+  NSPAIR(_ZN4gg28D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa28;
+extern VTBL_ENTRY _ZTI4aa28[];
+extern  VTBL_ENTRY _ZTV4aa28[];
+extern Class_Descriptor cd_bb28;
+extern VTBL_ENTRY _ZTI4bb28[];
+extern  VTBL_ENTRY _ZTV4bb28[];
+extern Class_Descriptor cd_ee28;
+extern VTBL_ENTRY _ZTI4ee28[];
+extern  VTBL_ENTRY _ZTV4ee28[];
+extern Class_Descriptor cd_cc28;
+extern VTBL_ENTRY _ZTI4cc28[];
+extern  VTBL_ENTRY _ZTV4cc28[];
+extern Class_Descriptor cd_dd28;
+extern VTBL_ENTRY _ZTI4dd28[];
+extern  VTBL_ENTRY _ZTV4dd28[];
+extern Class_Descriptor cd_ff28;
+extern VTBL_ENTRY _ZTI4ff28[];
+extern  VTBL_ENTRY _ZTV4ff28[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff28[];
+static Base_Class bases_gg28[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa28,    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_bb28,    ABISELECT(32,20), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee28,    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
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc28,    ABISELECT(48,32), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd28,    ABISELECT(64,40), //bcp->offset
+    17, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff28,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg28[];
+extern void _ZN4gg283fooEv();
+extern void ABISELECT(_ZTv0_n24_N4gg283fooEv,_ZTv0_n12_N4gg283fooEv)();
+extern void ABISELECT(_ZThn16_N4gg283fooEv,_ZThn12_N4gg283fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTvn16_n24_N4gg283fooEv,_ZTvn8_n12_N4gg283fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg283fooEv,_ZTv0_n12_N4gg283fooEv)();
+extern void ABISELECT(_ZThn48_N4gg283fooEv,_ZThn32_N4gg283fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg283fooEv,_ZTv0_n12_N4gg283fooEv)();
+extern void ABISELECT(_ZThn64_N4gg283fooEv,_ZThn40_N4gg283fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg28[] = {
+  ABISELECT(16,12),
+  ABISELECT(64,40),
+  ABISELECT(48,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg28[0]),
+  (VTBL_ENTRY)&_ZN4gg283fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4gg28[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg283fooEv,_ZTv0_n12_N4gg283fooEv),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4gg28[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n24_N4gg283fooEv,_ZTvn8_n12_N4gg283fooEv),
+  ABISELECT(-48,-32),
+  ABISELECT(-48,-32),
+  (VTBL_ENTRY)&(_ZTI4gg28[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg283fooEv,_ZTv0_n12_N4gg283fooEv),
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4gg28[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg283fooEv,_ZTv0_n12_N4gg283fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg28[];
+extern void _ZN4ff283fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff28__4gg28[] = {
+  ABISELECT(64,40),
+  ABISELECT(48,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff28[0]),
+  (VTBL_ENTRY)&_ZN4ff283fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv)();
+extern void ABISELECT(_ZThn48_N4ff283fooEv,_ZThn32_N4ff283fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc28__4ff28__4gg28[] = {
+  ABISELECT(-48,-32),
+  ABISELECT(-48,-32),
+  (VTBL_ENTRY)&(_ZTI4ff28[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv)();
+extern void ABISELECT(_ZThn64_N4ff283fooEv,_ZThn40_N4ff283fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd28__4ff28__4gg28[] = {
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4ff28[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv),
+};
+static  VTT_ENTRY vtt_gg28[] = {
+  {&(_ZTV4gg28[5]),  5,21},
+  {&(_tg__ZTV4ff28__4gg28[4]),  4,5},
+  {&(_tg__ZTV4cc28__4ff28__4gg28[3]),  3,4},
+  {&(_tg__ZTV4dd28__4ff28__4gg28[3]),  3,4},
+  {&(_ZTV4gg28[9]),  9,21},
+  {&(_ZTV4gg28[12]),  12,21},
+  {&(_ZTV4gg28[16]),  16,21},
+  {&(_ZTV4gg28[20]),  20,21},
+};
+extern VTBL_ENTRY _ZTI4gg28[];
+extern  VTBL_ENTRY _ZTV4gg28[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg28[];
+static VTBL_ENTRY alt_thunk_names70[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff283fooEv,_ZTv0_n12_N4ff283fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4ff283fooEv,_ZThn40_N4ff283fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4ff283fooEv,_ZThn32_N4ff283fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg283fooEv,_ZTv0_n12_N4gg283fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4gg283fooEv,_ZThn40_N4gg283fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg283fooEv,_ZThn32_N4gg283fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4gg283fooEv,_ZThn12_N4gg283fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg28 = {  "gg28", // class name
+  bases_gg28, 6,
+  &(vtc_gg28[0]), // expected_vtbl_contents
+  &(vtt_gg28[0]), // expected_vtt_contents
+  ABISELECT(80,48), // object size
+  NSPAIRA(_ZTI4gg28),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg28),21, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg28),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names70,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa29  {
+  int a;
+   aa29(); // _ZN4aa29C1Ev
+  virtual void  foo(); // _ZN4aa293fooEv
+  ~aa29(); // tgen
+};
+//SIG(-1 aa29) C1{ v1 Fi}
+
+
+ aa29 ::aa29(){ note_ctor("aa29", this);}
+void  aa29 ::foo(){vfunc_called(this, "_ZN4aa293fooEv");}
+aa29 ::~aa29(){ note_dtor("aa29", this);} // tgen
+
+static void Test_aa29()
+{
+  extern Class_Descriptor cd_aa29;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa29, buf);
+    aa29 *dp, &lv = *(dp=new (buf) aa29());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa29)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa29)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa29.a");
+    test_class_info(&lv, &cd_aa29);
+    dp->~aa29();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa29(Test_aa29, "aa29", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa29C1Ev();
+extern void _ZN4aa29D1Ev();
+Name_Map name_map_aa29[] = {
+  NSPAIR(_ZN4aa29C1Ev),
+  NSPAIR(_ZN4aa29D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa29[];
+extern void _ZN4aa293fooEv();
+static  VTBL_ENTRY vtc_aa29[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa29[0]),
+  (VTBL_ENTRY)&_ZN4aa293fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa29[];
+extern  VTBL_ENTRY _ZTV4aa29[];
+Class_Descriptor cd_aa29 = {  "aa29", // class name
+  0,0,//no base classes
+  &(vtc_aa29[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa29),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa29),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  bb29  {
+  int b;
+   bb29(); // _ZN4bb29C1Ev
+  virtual void  foo(); // _ZN4bb293fooEv
+  ~bb29(); // tgen
+};
+//SIG(-1 bb29) C1{ v1 Fi}
+
+
+ bb29 ::bb29(){ note_ctor("bb29", this);}
+void  bb29 ::foo(){vfunc_called(this, "_ZN4bb293fooEv");}
+bb29 ::~bb29(){ note_dtor("bb29", this);} // tgen
+
+static void Test_bb29()
+{
+  extern Class_Descriptor cd_bb29;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb29, buf);
+    bb29 *dp, &lv = *(dp=new (buf) bb29());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb29)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb29)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb29.b");
+    test_class_info(&lv, &cd_bb29);
+    dp->~bb29();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb29(Test_bb29, "bb29", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb29C1Ev();
+extern void _ZN4bb29D1Ev();
+Name_Map name_map_bb29[] = {
+  NSPAIR(_ZN4bb29C1Ev),
+  NSPAIR(_ZN4bb29D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb29[];
+extern void _ZN4bb293fooEv();
+static  VTBL_ENTRY vtc_bb29[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb29[0]),
+  (VTBL_ENTRY)&_ZN4bb293fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb29[];
+extern  VTBL_ENTRY _ZTV4bb29[];
+Class_Descriptor cd_bb29 = {  "bb29", // class name
+  0,0,//no base classes
+  &(vtc_bb29[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb29),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb29),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  cc29  {
+  int c;
+   cc29(); // _ZN4cc29C1Ev
+  virtual void  foo(); // _ZN4cc293fooEv
+  ~cc29(); // tgen
+};
+//SIG(-1 cc29) C1{ v1 Fi}
+
+
+ cc29 ::cc29(){ note_ctor("cc29", this);}
+void  cc29 ::foo(){vfunc_called(this, "_ZN4cc293fooEv");}
+cc29 ::~cc29(){ note_dtor("cc29", this);} // tgen
+
+static void Test_cc29()
+{
+  extern Class_Descriptor cd_cc29;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc29, buf);
+    cc29 *dp, &lv = *(dp=new (buf) cc29());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc29)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc29)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc29.c");
+    test_class_info(&lv, &cd_cc29);
+    dp->~cc29();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc29(Test_cc29, "cc29", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc29C1Ev();
+extern void _ZN4cc29D1Ev();
+Name_Map name_map_cc29[] = {
+  NSPAIR(_ZN4cc29C1Ev),
+  NSPAIR(_ZN4cc29D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc29[];
+extern void _ZN4cc293fooEv();
+static  VTBL_ENTRY vtc_cc29[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc29[0]),
+  (VTBL_ENTRY)&_ZN4cc293fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc29[];
+extern  VTBL_ENTRY _ZTV4cc29[];
+Class_Descriptor cd_cc29 = {  "cc29", // class name
+  0,0,//no base classes
+  &(vtc_cc29[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc29),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc29),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  dd29  {
+  int d;
+   dd29(); // _ZN4dd29C1Ev
+  virtual void  foo(); // _ZN4dd293fooEv
+  ~dd29(); // tgen
+};
+//SIG(-1 dd29) C1{ v1 Fi}
+
+
+ dd29 ::dd29(){ note_ctor("dd29", this);}
+void  dd29 ::foo(){vfunc_called(this, "_ZN4dd293fooEv");}
+dd29 ::~dd29(){ note_dtor("dd29", this);} // tgen
+
+static void Test_dd29()
+{
+  extern Class_Descriptor cd_dd29;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd29, buf);
+    dd29 *dp, &lv = *(dp=new (buf) dd29());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd29)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd29)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd29.d");
+    test_class_info(&lv, &cd_dd29);
+    dp->~dd29();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd29(Test_dd29, "dd29", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd29C1Ev();
+extern void _ZN4dd29D1Ev();
+Name_Map name_map_dd29[] = {
+  NSPAIR(_ZN4dd29C1Ev),
+  NSPAIR(_ZN4dd29D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd29[];
+extern void _ZN4dd293fooEv();
+static  VTBL_ENTRY vtc_dd29[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd29[0]),
+  (VTBL_ENTRY)&_ZN4dd293fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd29[];
+extern  VTBL_ENTRY _ZTV4dd29[];
+Class_Descriptor cd_dd29 = {  "dd29", // class name
+  0,0,//no base classes
+  &(vtc_dd29[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd29),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd29),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  ee29  : virtual aa29 , bb29 {
+  int e;
+   ee29(const ABISELECT(__tsi64,int) *const *); // _ZN4ee29C2Ev
+  virtual void  foo(); // _ZN4ee293fooEv
+  ~ee29(); // tgen
+  ee29(); // tgen
+};
+//SIG(-1 ee29) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee29 ::ee29(const ABISELECT(__tsi64,int) *const *){}
+void  ee29 ::foo(){vfunc_called(this, "_ZN4ee293fooEv");}
+ee29 ::~ee29(){ note_dtor("ee29", this);} // tgen
+ee29 ::ee29(){ note_ctor("ee29", this);} // tgen
+
+static void Test_ee29()
+{
+  extern Class_Descriptor cd_ee29;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee29, buf);
+    ee29 *dp, &lv = *(dp=new (buf) ee29());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee29)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee29)");
+    check_base_class_offset(lv, (aa29*), ABISELECT(16,12), "ee29");
+    check_base_class_offset(lv, (bb29*), 0, "ee29");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee29.e");
+    test_class_info(&lv, &cd_ee29);
+    dp->~ee29();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee29(Test_ee29, "ee29", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee29C1Ev();
+extern void _ZN4ee29D1Ev();
+Name_Map name_map_ee29[] = {
+  NSPAIR(_ZN4ee29C1Ev),
+  NSPAIR(_ZN4ee29D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa29;
+extern VTBL_ENTRY _ZTI4aa29[];
+extern  VTBL_ENTRY _ZTV4aa29[];
+extern Class_Descriptor cd_bb29;
+extern VTBL_ENTRY _ZTI4bb29[];
+extern  VTBL_ENTRY _ZTV4bb29[];
+static Base_Class bases_ee29[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa29,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb29,    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 _ZTI4ee29[];
+extern void _ZN4ee293fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee293fooEv,_ZTv0_n12_N4ee293fooEv)();
+extern void ABISELECT(_ZThn16_N4ee293fooEv,_ZThn12_N4ee293fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee29[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee29[0]),
+  (VTBL_ENTRY)&_ZN4ee293fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee293fooEv,_ZTv0_n12_N4ee293fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee29[];
+static  VTT_ENTRY vtt_ee29[] = {
+  {&(_ZTV4ee29[3]),  3,8},
+  {&(_ZTV4ee29[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee29[];
+extern  VTBL_ENTRY _ZTV4ee29[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee29[];
+static VTBL_ENTRY alt_thunk_names71[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee293fooEv,_ZTv0_n12_N4ee293fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee293fooEv,_ZThn12_N4ee293fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee29 = {  "ee29", // class name
+  bases_ee29, 2,
+  &(vtc_ee29[0]), // expected_vtbl_contents
+  &(vtt_ee29[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee29),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee29),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee29),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names71,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff29  : virtual cc29 , virtual dd29 {
+  int f;
+   ff29(const ABISELECT(__tsi64,int) *const *); // _ZN4ff29C2Ev
+  virtual void  foo(); // _ZN4ff293fooEv
+  ~ff29(); // tgen
+  ff29(); // tgen
+};
+//SIG(-1 ff29) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff29 ::ff29(const ABISELECT(__tsi64,int) *const *){}
+void  ff29 ::foo(){vfunc_called(this, "_ZN4ff293fooEv");}
+ff29 ::~ff29(){ note_dtor("ff29", this);} // tgen
+ff29 ::ff29(){ note_ctor("ff29", this);} // tgen
+
+static void Test_ff29()
+{
+  extern Class_Descriptor cd_ff29;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ff29, buf);
+    ff29 *dp, &lv = *(dp=new (buf) ff29());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ff29)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff29)");
+    check_base_class_offset(lv, (cc29*), ABISELECT(16,8), "ff29");
+    check_base_class_offset(lv, (dd29*), ABISELECT(32,16), "ff29");
+    check_field_offset(lv, f, ABISELECT(8,4), "ff29.f");
+    test_class_info(&lv, &cd_ff29);
+    dp->~ff29();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff29(Test_ff29, "ff29", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ff29C1Ev();
+extern void _ZN4ff29D1Ev();
+Name_Map name_map_ff29[] = {
+  NSPAIR(_ZN4ff29C1Ev),
+  NSPAIR(_ZN4ff29D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc29;
+extern VTBL_ENTRY _ZTI4cc29[];
+extern  VTBL_ENTRY _ZTV4cc29[];
+extern Class_Descriptor cd_dd29;
+extern VTBL_ENTRY _ZTI4dd29[];
+extern  VTBL_ENTRY _ZTV4dd29[];
+static Base_Class bases_ff29[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc29,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd29,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff29[];
+extern void _ZN4ff293fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv)();
+extern void ABISELECT(_ZThn16_N4ff293fooEv,_ZThn8_N4ff293fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv)();
+extern void ABISELECT(_ZThn32_N4ff293fooEv,_ZThn16_N4ff293fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff29[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff29[0]),
+  (VTBL_ENTRY)&_ZN4ff293fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ff29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff29[];
+static  VTT_ENTRY vtt_ff29[] = {
+  {&(_ZTV4ff29[4]),  4,13},
+  {&(_ZTV4ff29[8]),  8,13},
+  {&(_ZTV4ff29[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ff29[];
+extern  VTBL_ENTRY _ZTV4ff29[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff29[];
+static VTBL_ENTRY alt_thunk_names72[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff293fooEv,_ZThn16_N4ff293fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff293fooEv,_ZThn8_N4ff293fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff29 = {  "ff29", // class name
+  bases_ff29, 2,
+  &(vtc_ff29[0]), // expected_vtbl_contents
+  &(vtt_ff29[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ff29),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff29),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff29),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names72,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg29  : virtual ee29 , ff29 {
+  int g;
+   gg29(const ABISELECT(__tsi64,int) *const *); // _ZN4gg29C2Ev
+  virtual void  foo(); // _ZN4gg293fooEv
+  ~gg29(); // tgen
+  gg29(); // tgen
+};
+//SIG(1 gg29) C1{ VBC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg29 ::gg29(const ABISELECT(__tsi64,int) *const *){}
+void  gg29 ::foo(){vfunc_called(this, "_ZN4gg293fooEv");}
+gg29 ::~gg29(){ note_dtor("gg29", this);} // tgen
+gg29 ::gg29(){ note_ctor("gg29", this);} // tgen
+
+static void Test_gg29()
+{
+  extern Class_Descriptor cd_gg29;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(11,13)];
+    init_test(&cd_gg29, buf);
+    gg29 *dp, &lv = *(dp=new (buf) gg29());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(80,48), "sizeof(gg29)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg29)");
+    check_base_class_offset(lv, (aa29*)(ee29*), ABISELECT(32,24), "gg29");
+    check_base_class_offset(lv, (bb29*)(ee29*), ABISELECT(16,12), "gg29");
+    check_base_class_offset(lv, (ee29*), ABISELECT(16,12), "gg29");
+    check_base_class_offset(lv, (cc29*)(ff29*), ABISELECT(48,32), "gg29");
+    check_base_class_offset(lv, (dd29*)(ff29*), ABISELECT(64,40), "gg29");
+    check_base_class_offset(lv, (ff29*), 0, "gg29");
+    check_field_offset(lv, g, ABISELECT(12,8), "gg29.g");
+    test_class_info(&lv, &cd_gg29);
+    dp->~gg29();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg29(Test_gg29, "gg29", ABISELECT(80,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg29C1Ev();
+extern void _ZN4gg29D1Ev();
+Name_Map name_map_gg29[] = {
+  NSPAIR(_ZN4gg29C1Ev),
+  NSPAIR(_ZN4gg29D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa29;
+extern VTBL_ENTRY _ZTI4aa29[];
+extern  VTBL_ENTRY _ZTV4aa29[];
+extern Class_Descriptor cd_bb29;
+extern VTBL_ENTRY _ZTI4bb29[];
+extern  VTBL_ENTRY _ZTV4bb29[];
+extern Class_Descriptor cd_ee29;
+extern VTBL_ENTRY _ZTI4ee29[];
+extern  VTBL_ENTRY _ZTV4ee29[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee29[];
+extern Class_Descriptor cd_cc29;
+extern VTBL_ENTRY _ZTI4cc29[];
+extern  VTBL_ENTRY _ZTV4cc29[];
+extern Class_Descriptor cd_dd29;
+extern VTBL_ENTRY _ZTI4dd29[];
+extern  VTBL_ENTRY _ZTV4dd29[];
+extern Class_Descriptor cd_ff29;
+extern VTBL_ENTRY _ZTI4ff29[];
+extern  VTBL_ENTRY _ZTV4ff29[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff29[];
+static Base_Class bases_gg29[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa29,    ABISELECT(32,24), //bcp->offset
+    12, //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_bb29,    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
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee29,    ABISELECT(16,12), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    9, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc29,    ABISELECT(48,32), //bcp->offset
+    16, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd29,    ABISELECT(64,40), //bcp->offset
+    20, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff29,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg29[];
+extern void _ZN4gg293fooEv();
+extern void ABISELECT(_ZTv0_n32_N4gg293fooEv,_ZTv0_n16_N4gg293fooEv)();
+extern void ABISELECT(_ZThn16_N4gg293fooEv,_ZThn12_N4gg293fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg293fooEv,_ZTv0_n12_N4gg293fooEv)();
+extern void ABISELECT(_ZThn32_N4gg293fooEv,_ZThn24_N4gg293fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg293fooEv,_ZTv0_n12_N4gg293fooEv)();
+extern void ABISELECT(_ZThn48_N4gg293fooEv,_ZThn32_N4gg293fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg293fooEv,_ZTv0_n12_N4gg293fooEv)();
+extern void ABISELECT(_ZThn64_N4gg293fooEv,_ZThn40_N4gg293fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg29[] = {
+  ABISELECT(32,24),
+  ABISELECT(16,12),
+  ABISELECT(64,40),
+  ABISELECT(48,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg29[0]),
+  (VTBL_ENTRY)&_ZN4gg293fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(16,12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4gg29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg293fooEv,_ZTv0_n16_N4gg293fooEv),
+  ABISELECT(-32,-24),
+  ABISELECT(-32,-24),
+  (VTBL_ENTRY)&(_ZTI4gg29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg293fooEv,_ZTv0_n12_N4gg293fooEv),
+  ABISELECT(-48,-32),
+  ABISELECT(-48,-32),
+  (VTBL_ENTRY)&(_ZTI4gg29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg293fooEv,_ZTv0_n12_N4gg293fooEv),
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4gg29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg293fooEv,_ZTv0_n12_N4gg293fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg29[];
+extern void _ZN4ff293fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff29__4gg29[] = {
+  ABISELECT(64,40),
+  ABISELECT(48,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff29[0]),
+  (VTBL_ENTRY)&_ZN4ff293fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv)();
+extern void ABISELECT(_ZThn48_N4ff293fooEv,_ZThn32_N4ff293fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc29__4ff29__4gg29[] = {
+  ABISELECT(-48,-32),
+  ABISELECT(-48,-32),
+  (VTBL_ENTRY)&(_ZTI4ff29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv)();
+extern void ABISELECT(_ZThn64_N4ff293fooEv,_ZThn40_N4ff293fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd29__4ff29__4gg29[] = {
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4ff29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv),
+};
+extern void _ZN4ee293fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee29__4gg29[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee29[0]),
+  (VTBL_ENTRY)&_ZN4ee293fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee293fooEv,_ZTv0_n12_N4ee293fooEv)();
+extern void ABISELECT(_ZThn16_N4ee293fooEv,_ZThn12_N4ee293fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa29__4ee29__4gg29[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee29[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee293fooEv,_ZTv0_n12_N4ee293fooEv),
+};
+static  VTT_ENTRY vtt_gg29[] = {
+  {&(_ZTV4gg29[6]),  6,24},
+  {&(_tg__ZTV4ff29__4gg29[4]),  4,5},
+  {&(_tg__ZTV4cc29__4ff29__4gg29[3]),  3,4},
+  {&(_tg__ZTV4dd29__4ff29__4gg29[3]),  3,4},
+  {&(_ZTV4gg29[11]),  11,24},
+  {&(_ZTV4gg29[15]),  15,24},
+  {&(_ZTV4gg29[19]),  19,24},
+  {&(_ZTV4gg29[23]),  23,24},
+  {&(_tg__ZTV4ee29__4gg29[3]),  3,4},
+  {&(_tg__ZTV4aa29__4ee29__4gg29[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg29[];
+extern  VTBL_ENTRY _ZTV4gg29[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg29[];
+static VTBL_ENTRY alt_thunk_names73[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee293fooEv,_ZTv0_n12_N4ee293fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee293fooEv,_ZThn12_N4ee293fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff293fooEv,_ZTv0_n12_N4ff293fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4ff293fooEv,_ZThn40_N4ff293fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4ff293fooEv,_ZThn32_N4ff293fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg293fooEv,_ZTv0_n12_N4gg293fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4gg293fooEv,_ZThn40_N4gg293fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg293fooEv,_ZThn32_N4gg293fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4gg293fooEv,_ZThn24_N4gg293fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg293fooEv,_ZTv0_n16_N4gg293fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4gg293fooEv,_ZThn12_N4gg293fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg29 = {  "gg29", // class name
+  bases_gg29, 6,
+  &(vtc_gg29[0]), // expected_vtbl_contents
+  &(vtt_gg29[0]), // expected_vtt_contents
+  ABISELECT(80,48), // object size
+  NSPAIRA(_ZTI4gg29),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg29),24, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg29),10, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names73,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa30  {
+  int a;
+   aa30(); // _ZN4aa30C1Ev
+  virtual void  foo(); // _ZN4aa303fooEv
+  ~aa30(); // tgen
+};
+//SIG(-1 aa30) C1{ v1 Fi}
+
+
+ aa30 ::aa30(){ note_ctor("aa30", this);}
+void  aa30 ::foo(){vfunc_called(this, "_ZN4aa303fooEv");}
+aa30 ::~aa30(){ note_dtor("aa30", this);} // tgen
+
+static void Test_aa30()
+{
+  extern Class_Descriptor cd_aa30;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa30, buf);
+    aa30 *dp, &lv = *(dp=new (buf) aa30());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa30)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa30)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa30.a");
+    test_class_info(&lv, &cd_aa30);
+    dp->~aa30();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa30(Test_aa30, "aa30", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa30C1Ev();
+extern void _ZN4aa30D1Ev();
+Name_Map name_map_aa30[] = {
+  NSPAIR(_ZN4aa30C1Ev),
+  NSPAIR(_ZN4aa30D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa30[];
+extern void _ZN4aa303fooEv();
+static  VTBL_ENTRY vtc_aa30[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa30[0]),
+  (VTBL_ENTRY)&_ZN4aa303fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa30[];
+extern  VTBL_ENTRY _ZTV4aa30[];
+Class_Descriptor cd_aa30 = {  "aa30", // class name
+  0,0,//no base classes
+  &(vtc_aa30[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa30),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa30),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  bb30  {
+  int b;
+   bb30(); // _ZN4bb30C1Ev
+  virtual void  foo(); // _ZN4bb303fooEv
+  ~bb30(); // tgen
+};
+//SIG(-1 bb30) C1{ v1 Fi}
+
+
+ bb30 ::bb30(){ note_ctor("bb30", this);}
+void  bb30 ::foo(){vfunc_called(this, "_ZN4bb303fooEv");}
+bb30 ::~bb30(){ note_dtor("bb30", this);} // tgen
+
+static void Test_bb30()
+{
+  extern Class_Descriptor cd_bb30;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb30, buf);
+    bb30 *dp, &lv = *(dp=new (buf) bb30());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb30)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb30)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb30.b");
+    test_class_info(&lv, &cd_bb30);
+    dp->~bb30();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb30(Test_bb30, "bb30", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb30C1Ev();
+extern void _ZN4bb30D1Ev();
+Name_Map name_map_bb30[] = {
+  NSPAIR(_ZN4bb30C1Ev),
+  NSPAIR(_ZN4bb30D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb30[];
+extern void _ZN4bb303fooEv();
+static  VTBL_ENTRY vtc_bb30[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb30[0]),
+  (VTBL_ENTRY)&_ZN4bb303fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb30[];
+extern  VTBL_ENTRY _ZTV4bb30[];
+Class_Descriptor cd_bb30 = {  "bb30", // class name
+  0,0,//no base classes
+  &(vtc_bb30[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb30),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb30),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  cc30  {
+  int c;
+   cc30(); // _ZN4cc30C1Ev
+  virtual void  foo(); // _ZN4cc303fooEv
+  ~cc30(); // tgen
+};
+//SIG(-1 cc30) C1{ v1 Fi}
+
+
+ cc30 ::cc30(){ note_ctor("cc30", this);}
+void  cc30 ::foo(){vfunc_called(this, "_ZN4cc303fooEv");}
+cc30 ::~cc30(){ note_dtor("cc30", this);} // tgen
+
+static void Test_cc30()
+{
+  extern Class_Descriptor cd_cc30;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc30, buf);
+    cc30 *dp, &lv = *(dp=new (buf) cc30());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc30)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc30)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc30.c");
+    test_class_info(&lv, &cd_cc30);
+    dp->~cc30();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc30(Test_cc30, "cc30", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc30C1Ev();
+extern void _ZN4cc30D1Ev();
+Name_Map name_map_cc30[] = {
+  NSPAIR(_ZN4cc30C1Ev),
+  NSPAIR(_ZN4cc30D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc30[];
+extern void _ZN4cc303fooEv();
+static  VTBL_ENTRY vtc_cc30[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc30[0]),
+  (VTBL_ENTRY)&_ZN4cc303fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc30[];
+extern  VTBL_ENTRY _ZTV4cc30[];
+Class_Descriptor cd_cc30 = {  "cc30", // class name
+  0,0,//no base classes
+  &(vtc_cc30[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc30),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc30),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  dd30  {
+  int d;
+   dd30(); // _ZN4dd30C1Ev
+  virtual void  foo(); // _ZN4dd303fooEv
+  ~dd30(); // tgen
+};
+//SIG(-1 dd30) C1{ v1 Fi}
+
+
+ dd30 ::dd30(){ note_ctor("dd30", this);}
+void  dd30 ::foo(){vfunc_called(this, "_ZN4dd303fooEv");}
+dd30 ::~dd30(){ note_dtor("dd30", this);} // tgen
+
+static void Test_dd30()
+{
+  extern Class_Descriptor cd_dd30;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd30, buf);
+    dd30 *dp, &lv = *(dp=new (buf) dd30());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd30)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd30)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd30.d");
+    test_class_info(&lv, &cd_dd30);
+    dp->~dd30();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd30(Test_dd30, "dd30", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd30C1Ev();
+extern void _ZN4dd30D1Ev();
+Name_Map name_map_dd30[] = {
+  NSPAIR(_ZN4dd30C1Ev),
+  NSPAIR(_ZN4dd30D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd30[];
+extern void _ZN4dd303fooEv();
+static  VTBL_ENTRY vtc_dd30[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd30[0]),
+  (VTBL_ENTRY)&_ZN4dd303fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd30[];
+extern  VTBL_ENTRY _ZTV4dd30[];
+Class_Descriptor cd_dd30 = {  "dd30", // class name
+  0,0,//no base classes
+  &(vtc_dd30[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd30),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd30),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  ee30  : aa30 , virtual bb30 {
+  int e;
+   ee30(const ABISELECT(__tsi64,int) *const *); // _ZN4ee30C2Ev
+  virtual void  foo(); // _ZN4ee303fooEv
+  ~ee30(); // tgen
+  ee30(); // tgen
+};
+//SIG(-1 ee30) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee30 ::ee30(const ABISELECT(__tsi64,int) *const *){}
+void  ee30 ::foo(){vfunc_called(this, "_ZN4ee303fooEv");}
+ee30 ::~ee30(){ note_dtor("ee30", this);} // tgen
+ee30 ::ee30(){ note_ctor("ee30", this);} // tgen
+
+static void Test_ee30()
+{
+  extern Class_Descriptor cd_ee30;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee30, buf);
+    ee30 *dp, &lv = *(dp=new (buf) ee30());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee30)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee30)");
+    check_base_class_offset(lv, (aa30*), 0, "ee30");
+    check_base_class_offset(lv, (bb30*), ABISELECT(16,12), "ee30");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee30.e");
+    test_class_info(&lv, &cd_ee30);
+    dp->~ee30();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee30(Test_ee30, "ee30", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee30C1Ev();
+extern void _ZN4ee30D1Ev();
+Name_Map name_map_ee30[] = {
+  NSPAIR(_ZN4ee30C1Ev),
+  NSPAIR(_ZN4ee30D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa30;
+extern VTBL_ENTRY _ZTI4aa30[];
+extern  VTBL_ENTRY _ZTV4aa30[];
+extern Class_Descriptor cd_bb30;
+extern VTBL_ENTRY _ZTI4bb30[];
+extern  VTBL_ENTRY _ZTV4bb30[];
+static Base_Class bases_ee30[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa30,    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},
+  {&cd_bb30,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee30[];
+extern void _ZN4ee303fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee303fooEv,_ZTv0_n12_N4ee303fooEv)();
+extern void ABISELECT(_ZThn16_N4ee303fooEv,_ZThn12_N4ee303fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee30[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee30[0]),
+  (VTBL_ENTRY)&_ZN4ee303fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee303fooEv,_ZTv0_n12_N4ee303fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee30[];
+static  VTT_ENTRY vtt_ee30[] = {
+  {&(_ZTV4ee30[3]),  3,8},
+  {&(_ZTV4ee30[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee30[];
+extern  VTBL_ENTRY _ZTV4ee30[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee30[];
+static VTBL_ENTRY alt_thunk_names74[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee303fooEv,_ZTv0_n12_N4ee303fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee303fooEv,_ZThn12_N4ee303fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee30 = {  "ee30", // class name
+  bases_ee30, 2,
+  &(vtc_ee30[0]), // expected_vtbl_contents
+  &(vtt_ee30[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee30),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee30),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee30),2, //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  ff30  : virtual cc30 , virtual dd30 {
+  int f;
+   ff30(const ABISELECT(__tsi64,int) *const *); // _ZN4ff30C2Ev
+  virtual void  foo(); // _ZN4ff303fooEv
+  ~ff30(); // tgen
+  ff30(); // tgen
+};
+//SIG(-1 ff30) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff30 ::ff30(const ABISELECT(__tsi64,int) *const *){}
+void  ff30 ::foo(){vfunc_called(this, "_ZN4ff303fooEv");}
+ff30 ::~ff30(){ note_dtor("ff30", this);} // tgen
+ff30 ::ff30(){ note_ctor("ff30", this);} // tgen
+
+static void Test_ff30()
+{
+  extern Class_Descriptor cd_ff30;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ff30, buf);
+    ff30 *dp, &lv = *(dp=new (buf) ff30());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ff30)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff30)");
+    check_base_class_offset(lv, (cc30*), ABISELECT(16,8), "ff30");
+    check_base_class_offset(lv, (dd30*), ABISELECT(32,16), "ff30");
+    check_field_offset(lv, f, ABISELECT(8,4), "ff30.f");
+    test_class_info(&lv, &cd_ff30);
+    dp->~ff30();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff30(Test_ff30, "ff30", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ff30C1Ev();
+extern void _ZN4ff30D1Ev();
+Name_Map name_map_ff30[] = {
+  NSPAIR(_ZN4ff30C1Ev),
+  NSPAIR(_ZN4ff30D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc30;
+extern VTBL_ENTRY _ZTI4cc30[];
+extern  VTBL_ENTRY _ZTV4cc30[];
+extern Class_Descriptor cd_dd30;
+extern VTBL_ENTRY _ZTI4dd30[];
+extern  VTBL_ENTRY _ZTV4dd30[];
+static Base_Class bases_ff30[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc30,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd30,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff30[];
+extern void _ZN4ff303fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv)();
+extern void ABISELECT(_ZThn16_N4ff303fooEv,_ZThn8_N4ff303fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv)();
+extern void ABISELECT(_ZThn32_N4ff303fooEv,_ZThn16_N4ff303fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff30[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff30[0]),
+  (VTBL_ENTRY)&_ZN4ff303fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ff30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff30[];
+static  VTT_ENTRY vtt_ff30[] = {
+  {&(_ZTV4ff30[4]),  4,13},
+  {&(_ZTV4ff30[8]),  8,13},
+  {&(_ZTV4ff30[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ff30[];
+extern  VTBL_ENTRY _ZTV4ff30[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff30[];
+static VTBL_ENTRY alt_thunk_names75[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff303fooEv,_ZThn16_N4ff303fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff303fooEv,_ZThn8_N4ff303fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff30 = {  "ff30", // class name
+  bases_ff30, 2,
+  &(vtc_ff30[0]), // expected_vtbl_contents
+  &(vtt_ff30[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ff30),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff30),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff30),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names75,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg30  : virtual ee30 , ff30 {
+  int g;
+   gg30(const ABISELECT(__tsi64,int) *const *); // _ZN4gg30C2Ev
+  virtual void  foo(); // _ZN4gg303fooEv
+  ~gg30(); // tgen
+  gg30(); // tgen
+};
+//SIG(1 gg30) C1{ VBC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg30 ::gg30(const ABISELECT(__tsi64,int) *const *){}
+void  gg30 ::foo(){vfunc_called(this, "_ZN4gg303fooEv");}
+gg30 ::~gg30(){ note_dtor("gg30", this);} // tgen
+gg30 ::gg30(){ note_ctor("gg30", this);} // tgen
+
+static void Test_gg30()
+{
+  extern Class_Descriptor cd_gg30;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(11,13)];
+    init_test(&cd_gg30, buf);
+    gg30 *dp, &lv = *(dp=new (buf) gg30());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(80,48), "sizeof(gg30)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg30)");
+    check_base_class_offset(lv, (aa30*)(ee30*), ABISELECT(16,12), "gg30");
+    check_base_class_offset(lv, (bb30*)(ee30*), ABISELECT(32,24), "gg30");
+    check_base_class_offset(lv, (ee30*), ABISELECT(16,12), "gg30");
+    check_base_class_offset(lv, (cc30*)(ff30*), ABISELECT(48,32), "gg30");
+    check_base_class_offset(lv, (dd30*)(ff30*), ABISELECT(64,40), "gg30");
+    check_base_class_offset(lv, (ff30*), 0, "gg30");
+    check_field_offset(lv, g, ABISELECT(12,8), "gg30.g");
+    test_class_info(&lv, &cd_gg30);
+    dp->~gg30();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg30(Test_gg30, "gg30", ABISELECT(80,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg30C1Ev();
+extern void _ZN4gg30D1Ev();
+Name_Map name_map_gg30[] = {
+  NSPAIR(_ZN4gg30C1Ev),
+  NSPAIR(_ZN4gg30D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa30;
+extern VTBL_ENTRY _ZTI4aa30[];
+extern  VTBL_ENTRY _ZTV4aa30[];
+extern Class_Descriptor cd_bb30;
+extern VTBL_ENTRY _ZTI4bb30[];
+extern  VTBL_ENTRY _ZTV4bb30[];
+extern Class_Descriptor cd_ee30;
+extern VTBL_ENTRY _ZTI4ee30[];
+extern  VTBL_ENTRY _ZTV4ee30[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee30[];
+extern Class_Descriptor cd_cc30;
+extern VTBL_ENTRY _ZTI4cc30[];
+extern  VTBL_ENTRY _ZTV4cc30[];
+extern Class_Descriptor cd_dd30;
+extern VTBL_ENTRY _ZTI4dd30[];
+extern  VTBL_ENTRY _ZTV4dd30[];
+extern Class_Descriptor cd_ff30;
+extern VTBL_ENTRY _ZTI4ff30[];
+extern  VTBL_ENTRY _ZTV4ff30[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff30[];
+static Base_Class bases_gg30[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa30,    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
+    2, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb30,    ABISELECT(32,24), //bcp->offset
+    12, //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_ee30,    ABISELECT(16,12), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    9, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc30,    ABISELECT(48,32), //bcp->offset
+    16, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd30,    ABISELECT(64,40), //bcp->offset
+    20, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff30,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg30[];
+extern void _ZN4gg303fooEv();
+extern void ABISELECT(_ZTv0_n32_N4gg303fooEv,_ZTv0_n16_N4gg303fooEv)();
+extern void ABISELECT(_ZThn16_N4gg303fooEv,_ZThn12_N4gg303fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg303fooEv,_ZTv0_n12_N4gg303fooEv)();
+extern void ABISELECT(_ZThn32_N4gg303fooEv,_ZThn24_N4gg303fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg303fooEv,_ZTv0_n12_N4gg303fooEv)();
+extern void ABISELECT(_ZThn48_N4gg303fooEv,_ZThn32_N4gg303fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg303fooEv,_ZTv0_n12_N4gg303fooEv)();
+extern void ABISELECT(_ZThn64_N4gg303fooEv,_ZThn40_N4gg303fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg30[] = {
+  ABISELECT(32,24),
+  ABISELECT(16,12),
+  ABISELECT(64,40),
+  ABISELECT(48,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg30[0]),
+  (VTBL_ENTRY)&_ZN4gg303fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(16,12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4gg30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg303fooEv,_ZTv0_n16_N4gg303fooEv),
+  ABISELECT(-32,-24),
+  ABISELECT(-32,-24),
+  (VTBL_ENTRY)&(_ZTI4gg30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg303fooEv,_ZTv0_n12_N4gg303fooEv),
+  ABISELECT(-48,-32),
+  ABISELECT(-48,-32),
+  (VTBL_ENTRY)&(_ZTI4gg30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg303fooEv,_ZTv0_n12_N4gg303fooEv),
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4gg30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg303fooEv,_ZTv0_n12_N4gg303fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg30[];
+extern void _ZN4ff303fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff30__4gg30[] = {
+  ABISELECT(64,40),
+  ABISELECT(48,32),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff30[0]),
+  (VTBL_ENTRY)&_ZN4ff303fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv)();
+extern void ABISELECT(_ZThn48_N4ff303fooEv,_ZThn32_N4ff303fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc30__4ff30__4gg30[] = {
+  ABISELECT(-48,-32),
+  ABISELECT(-48,-32),
+  (VTBL_ENTRY)&(_ZTI4ff30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv)();
+extern void ABISELECT(_ZThn64_N4ff303fooEv,_ZThn40_N4ff303fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd30__4ff30__4gg30[] = {
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4ff30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv),
+};
+extern void _ZN4ee303fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee30__4gg30[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee30[0]),
+  (VTBL_ENTRY)&_ZN4ee303fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee303fooEv,_ZTv0_n12_N4ee303fooEv)();
+extern void ABISELECT(_ZThn16_N4ee303fooEv,_ZThn12_N4ee303fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb30__4ee30__4gg30[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee30[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee303fooEv,_ZTv0_n12_N4ee303fooEv),
+};
+static  VTT_ENTRY vtt_gg30[] = {
+  {&(_ZTV4gg30[6]),  6,24},
+  {&(_tg__ZTV4ff30__4gg30[4]),  4,5},
+  {&(_tg__ZTV4cc30__4ff30__4gg30[3]),  3,4},
+  {&(_tg__ZTV4dd30__4ff30__4gg30[3]),  3,4},
+  {&(_ZTV4gg30[11]),  11,24},
+  {&(_ZTV4gg30[15]),  15,24},
+  {&(_ZTV4gg30[19]),  19,24},
+  {&(_ZTV4gg30[23]),  23,24},
+  {&(_tg__ZTV4ee30__4gg30[3]),  3,4},
+  {&(_tg__ZTV4bb30__4ee30__4gg30[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg30[];
+extern  VTBL_ENTRY _ZTV4gg30[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg30[];
+static VTBL_ENTRY alt_thunk_names76[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee303fooEv,_ZTv0_n12_N4ee303fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee303fooEv,_ZThn12_N4ee303fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff303fooEv,_ZTv0_n12_N4ff303fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4ff303fooEv,_ZThn40_N4ff303fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4ff303fooEv,_ZThn32_N4ff303fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg303fooEv,_ZTv0_n12_N4gg303fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4gg303fooEv,_ZThn40_N4gg303fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg303fooEv,_ZThn32_N4gg303fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4gg303fooEv,_ZThn24_N4gg303fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg303fooEv,_ZTv0_n16_N4gg303fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4gg303fooEv,_ZThn12_N4gg303fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg30 = {  "gg30", // class name
+  bases_gg30, 6,
+  &(vtc_gg30[0]), // expected_vtbl_contents
+  &(vtt_gg30[0]), // expected_vtt_contents
+  ABISELECT(80,48), // object size
+  NSPAIRA(_ZTI4gg30),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg30),24, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg30),10, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names76,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa31  {
+  int a;
+   aa31(); // _ZN4aa31C1Ev
+  virtual void  foo(); // _ZN4aa313fooEv
+  ~aa31(); // tgen
+};
+//SIG(-1 aa31) C1{ v1 Fi}
+
+
+ aa31 ::aa31(){ note_ctor("aa31", this);}
+void  aa31 ::foo(){vfunc_called(this, "_ZN4aa313fooEv");}
+aa31 ::~aa31(){ note_dtor("aa31", this);} // tgen
+
+static void Test_aa31()
+{
+  extern Class_Descriptor cd_aa31;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa31, buf);
+    aa31 *dp, &lv = *(dp=new (buf) aa31());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa31)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa31)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa31.a");
+    test_class_info(&lv, &cd_aa31);
+    dp->~aa31();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa31(Test_aa31, "aa31", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa31C1Ev();
+extern void _ZN4aa31D1Ev();
+Name_Map name_map_aa31[] = {
+  NSPAIR(_ZN4aa31C1Ev),
+  NSPAIR(_ZN4aa31D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa31[];
+extern void _ZN4aa313fooEv();
+static  VTBL_ENTRY vtc_aa31[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa31[0]),
+  (VTBL_ENTRY)&_ZN4aa313fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa31[];
+extern  VTBL_ENTRY _ZTV4aa31[];
+Class_Descriptor cd_aa31 = {  "aa31", // class name
+  0,0,//no base classes
+  &(vtc_aa31[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa31),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa31),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  bb31  {
+  int b;
+   bb31(); // _ZN4bb31C1Ev
+  virtual void  foo(); // _ZN4bb313fooEv
+  ~bb31(); // tgen
+};
+//SIG(-1 bb31) C1{ v1 Fi}
+
+
+ bb31 ::bb31(){ note_ctor("bb31", this);}
+void  bb31 ::foo(){vfunc_called(this, "_ZN4bb313fooEv");}
+bb31 ::~bb31(){ note_dtor("bb31", this);} // tgen
+
+static void Test_bb31()
+{
+  extern Class_Descriptor cd_bb31;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb31, buf);
+    bb31 *dp, &lv = *(dp=new (buf) bb31());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb31)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb31)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb31.b");
+    test_class_info(&lv, &cd_bb31);
+    dp->~bb31();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb31(Test_bb31, "bb31", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb31C1Ev();
+extern void _ZN4bb31D1Ev();
+Name_Map name_map_bb31[] = {
+  NSPAIR(_ZN4bb31C1Ev),
+  NSPAIR(_ZN4bb31D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb31[];
+extern void _ZN4bb313fooEv();
+static  VTBL_ENTRY vtc_bb31[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb31[0]),
+  (VTBL_ENTRY)&_ZN4bb313fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb31[];
+extern  VTBL_ENTRY _ZTV4bb31[];
+Class_Descriptor cd_bb31 = {  "bb31", // class name
+  0,0,//no base classes
+  &(vtc_bb31[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb31),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb31),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  cc31  {
+  int c;
+   cc31(); // _ZN4cc31C1Ev
+  virtual void  foo(); // _ZN4cc313fooEv
+  ~cc31(); // tgen
+};
+//SIG(-1 cc31) C1{ v1 Fi}
+
+
+ cc31 ::cc31(){ note_ctor("cc31", this);}
+void  cc31 ::foo(){vfunc_called(this, "_ZN4cc313fooEv");}
+cc31 ::~cc31(){ note_dtor("cc31", this);} // tgen
+
+static void Test_cc31()
+{
+  extern Class_Descriptor cd_cc31;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc31, buf);
+    cc31 *dp, &lv = *(dp=new (buf) cc31());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc31)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc31)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc31.c");
+    test_class_info(&lv, &cd_cc31);
+    dp->~cc31();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc31(Test_cc31, "cc31", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc31C1Ev();
+extern void _ZN4cc31D1Ev();
+Name_Map name_map_cc31[] = {
+  NSPAIR(_ZN4cc31C1Ev),
+  NSPAIR(_ZN4cc31D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc31[];
+extern void _ZN4cc313fooEv();
+static  VTBL_ENTRY vtc_cc31[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc31[0]),
+  (VTBL_ENTRY)&_ZN4cc313fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc31[];
+extern  VTBL_ENTRY _ZTV4cc31[];
+Class_Descriptor cd_cc31 = {  "cc31", // class name
+  0,0,//no base classes
+  &(vtc_cc31[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc31),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc31),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  dd31  {
+  int d;
+   dd31(); // _ZN4dd31C1Ev
+  virtual void  foo(); // _ZN4dd313fooEv
+  ~dd31(); // tgen
+};
+//SIG(-1 dd31) C1{ v1 Fi}
+
+
+ dd31 ::dd31(){ note_ctor("dd31", this);}
+void  dd31 ::foo(){vfunc_called(this, "_ZN4dd313fooEv");}
+dd31 ::~dd31(){ note_dtor("dd31", this);} // tgen
+
+static void Test_dd31()
+{
+  extern Class_Descriptor cd_dd31;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd31, buf);
+    dd31 *dp, &lv = *(dp=new (buf) dd31());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd31)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd31)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd31.d");
+    test_class_info(&lv, &cd_dd31);
+    dp->~dd31();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd31(Test_dd31, "dd31", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd31C1Ev();
+extern void _ZN4dd31D1Ev();
+Name_Map name_map_dd31[] = {
+  NSPAIR(_ZN4dd31C1Ev),
+  NSPAIR(_ZN4dd31D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd31[];
+extern void _ZN4dd313fooEv();
+static  VTBL_ENTRY vtc_dd31[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd31[0]),
+  (VTBL_ENTRY)&_ZN4dd313fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd31[];
+extern  VTBL_ENTRY _ZTV4dd31[];
+Class_Descriptor cd_dd31 = {  "dd31", // class name
+  0,0,//no base classes
+  &(vtc_dd31[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd31),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd31),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  ee31  : virtual aa31 , virtual bb31 {
+  int e;
+   ee31(const ABISELECT(__tsi64,int) *const *); // _ZN4ee31C2Ev
+  virtual void  foo(); // _ZN4ee313fooEv
+  ~ee31(); // tgen
+  ee31(); // tgen
+};
+//SIG(-1 ee31) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee31 ::ee31(const ABISELECT(__tsi64,int) *const *){}
+void  ee31 ::foo(){vfunc_called(this, "_ZN4ee313fooEv");}
+ee31 ::~ee31(){ note_dtor("ee31", this);} // tgen
+ee31 ::ee31(){ note_ctor("ee31", this);} // tgen
+
+static void Test_ee31()
+{
+  extern Class_Descriptor cd_ee31;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee31, buf);
+    ee31 *dp, &lv = *(dp=new (buf) ee31());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee31)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee31)");
+    check_base_class_offset(lv, (aa31*), ABISELECT(16,8), "ee31");
+    check_base_class_offset(lv, (bb31*), ABISELECT(32,16), "ee31");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee31.e");
+    test_class_info(&lv, &cd_ee31);
+    dp->~ee31();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee31(Test_ee31, "ee31", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ee31C1Ev();
+extern void _ZN4ee31D1Ev();
+Name_Map name_map_ee31[] = {
+  NSPAIR(_ZN4ee31C1Ev),
+  NSPAIR(_ZN4ee31D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa31;
+extern VTBL_ENTRY _ZTI4aa31[];
+extern  VTBL_ENTRY _ZTV4aa31[];
+extern Class_Descriptor cd_bb31;
+extern VTBL_ENTRY _ZTI4bb31[];
+extern  VTBL_ENTRY _ZTV4bb31[];
+static Base_Class bases_ee31[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa31,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb31,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee31[];
+extern void _ZN4ee313fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv)();
+extern void ABISELECT(_ZThn16_N4ee313fooEv,_ZThn8_N4ee313fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv)();
+extern void ABISELECT(_ZThn32_N4ee313fooEv,_ZThn16_N4ee313fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee31[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee31[0]),
+  (VTBL_ENTRY)&_ZN4ee313fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee31[];
+static  VTT_ENTRY vtt_ee31[] = {
+  {&(_ZTV4ee31[4]),  4,13},
+  {&(_ZTV4ee31[8]),  8,13},
+  {&(_ZTV4ee31[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ee31[];
+extern  VTBL_ENTRY _ZTV4ee31[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee31[];
+static VTBL_ENTRY alt_thunk_names77[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee313fooEv,_ZThn16_N4ee313fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee313fooEv,_ZThn8_N4ee313fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee31 = {  "ee31", // class name
+  bases_ee31, 2,
+  &(vtc_ee31[0]), // expected_vtbl_contents
+  &(vtt_ee31[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ee31),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee31),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee31),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names77,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff31  : virtual cc31 , virtual dd31 {
+  int f;
+   ff31(const ABISELECT(__tsi64,int) *const *); // _ZN4ff31C2Ev
+  virtual void  foo(); // _ZN4ff313fooEv
+  ~ff31(); // tgen
+  ff31(); // tgen
+};
+//SIG(-1 ff31) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff31 ::ff31(const ABISELECT(__tsi64,int) *const *){}
+void  ff31 ::foo(){vfunc_called(this, "_ZN4ff313fooEv");}
+ff31 ::~ff31(){ note_dtor("ff31", this);} // tgen
+ff31 ::ff31(){ note_ctor("ff31", this);} // tgen
+
+static void Test_ff31()
+{
+  extern Class_Descriptor cd_ff31;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ff31, buf);
+    ff31 *dp, &lv = *(dp=new (buf) ff31());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ff31)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff31)");
+    check_base_class_offset(lv, (cc31*), ABISELECT(16,8), "ff31");
+    check_base_class_offset(lv, (dd31*), ABISELECT(32,16), "ff31");
+    check_field_offset(lv, f, ABISELECT(8,4), "ff31.f");
+    test_class_info(&lv, &cd_ff31);
+    dp->~ff31();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff31(Test_ff31, "ff31", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ff31C1Ev();
+extern void _ZN4ff31D1Ev();
+Name_Map name_map_ff31[] = {
+  NSPAIR(_ZN4ff31C1Ev),
+  NSPAIR(_ZN4ff31D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc31;
+extern VTBL_ENTRY _ZTI4cc31[];
+extern  VTBL_ENTRY _ZTV4cc31[];
+extern Class_Descriptor cd_dd31;
+extern VTBL_ENTRY _ZTI4dd31[];
+extern  VTBL_ENTRY _ZTV4dd31[];
+static Base_Class bases_ff31[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc31,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd31,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff31[];
+extern void _ZN4ff313fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv)();
+extern void ABISELECT(_ZThn16_N4ff313fooEv,_ZThn8_N4ff313fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv)();
+extern void ABISELECT(_ZThn32_N4ff313fooEv,_ZThn16_N4ff313fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff31[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff31[0]),
+  (VTBL_ENTRY)&_ZN4ff313fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ff31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff31[];
+static  VTT_ENTRY vtt_ff31[] = {
+  {&(_ZTV4ff31[4]),  4,13},
+  {&(_ZTV4ff31[8]),  8,13},
+  {&(_ZTV4ff31[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ff31[];
+extern  VTBL_ENTRY _ZTV4ff31[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff31[];
+static VTBL_ENTRY alt_thunk_names78[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ff313fooEv,_ZThn16_N4ff313fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff313fooEv,_ZThn8_N4ff313fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff31 = {  "ff31", // class name
+  bases_ff31, 2,
+  &(vtc_ff31[0]), // expected_vtbl_contents
+  &(vtt_ff31[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ff31),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff31),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff31),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names78,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg31  : virtual ee31 , ff31 {
+  int g;
+   gg31(const ABISELECT(__tsi64,int) *const *); // _ZN4gg31C2Ev
+  virtual void  foo(); // _ZN4gg313fooEv
+  ~gg31(); // tgen
+  gg31(); // tgen
+};
+//SIG(1 gg31) C1{ VBC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} BC5{ VBC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg31 ::gg31(const ABISELECT(__tsi64,int) *const *){}
+void  gg31 ::foo(){vfunc_called(this, "_ZN4gg313fooEv");}
+gg31 ::~gg31(){ note_dtor("gg31", this);} // tgen
+gg31 ::gg31(){ note_ctor("gg31", this);} // tgen
+
+static void Test_gg31()
+{
+  extern Class_Descriptor cd_gg31;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(13,14)];
+    init_test(&cd_gg31, buf);
+    gg31 *dp, &lv = *(dp=new (buf) gg31());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(96,52), "sizeof(gg31)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg31)");
+    check_base_class_offset(lv, (aa31*)(ee31*), ABISELECT(32,20), "gg31");
+    check_base_class_offset(lv, (bb31*)(ee31*), ABISELECT(48,28), "gg31");
+    check_base_class_offset(lv, (ee31*), ABISELECT(16,12), "gg31");
+    check_base_class_offset(lv, (cc31*)(ff31*), ABISELECT(64,36), "gg31");
+    check_base_class_offset(lv, (dd31*)(ff31*), ABISELECT(80,44), "gg31");
+    check_base_class_offset(lv, (ff31*), 0, "gg31");
+    check_field_offset(lv, g, ABISELECT(12,8), "gg31.g");
+    test_class_info(&lv, &cd_gg31);
+    dp->~gg31();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg31(Test_gg31, "gg31", ABISELECT(96,52));
+
+#else // __cplusplus
+
+extern void _ZN4gg31C1Ev();
+extern void _ZN4gg31D1Ev();
+Name_Map name_map_gg31[] = {
+  NSPAIR(_ZN4gg31C1Ev),
+  NSPAIR(_ZN4gg31D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa31;
+extern VTBL_ENTRY _ZTI4aa31[];
+extern  VTBL_ENTRY _ZTV4aa31[];
+extern Class_Descriptor cd_bb31;
+extern VTBL_ENTRY _ZTI4bb31[];
+extern  VTBL_ENTRY _ZTV4bb31[];
+extern Class_Descriptor cd_ee31;
+extern VTBL_ENTRY _ZTI4ee31[];
+extern  VTBL_ENTRY _ZTV4ee31[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee31[];
+extern Class_Descriptor cd_cc31;
+extern VTBL_ENTRY _ZTI4cc31[];
+extern  VTBL_ENTRY _ZTV4cc31[];
+extern Class_Descriptor cd_dd31;
+extern VTBL_ENTRY _ZTI4dd31[];
+extern  VTBL_ENTRY _ZTV4dd31[];
+extern Class_Descriptor cd_ff31;
+extern VTBL_ENTRY _ZTI4ff31[];
+extern  VTBL_ENTRY _ZTV4ff31[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff31[];
+static Base_Class bases_gg31[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa31,    ABISELECT(32,20), //bcp->offset
+    14, //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_bb31,    ABISELECT(48,28), //bcp->offset
+    18, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    2, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee31,    ABISELECT(16,12), //bcp->offset
+    8, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    10, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_cc31,    ABISELECT(64,36), //bcp->offset
+    22, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd31,    ABISELECT(80,44), //bcp->offset
+    26, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    9, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff31,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg31[];
+extern void _ZN4gg313fooEv();
+extern void ABISELECT(_ZTv0_n40_N4gg313fooEv,_ZTv0_n20_N4gg313fooEv)();
+extern void ABISELECT(_ZThn16_N4gg313fooEv,_ZThn12_N4gg313fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg313fooEv,_ZTv0_n12_N4gg313fooEv)();
+extern void ABISELECT(_ZThn32_N4gg313fooEv,_ZThn20_N4gg313fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg313fooEv,_ZTv0_n12_N4gg313fooEv)();
+extern void ABISELECT(_ZThn48_N4gg313fooEv,_ZThn28_N4gg313fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg313fooEv,_ZTv0_n12_N4gg313fooEv)();
+extern void ABISELECT(_ZThn64_N4gg313fooEv,_ZThn36_N4gg313fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg313fooEv,_ZTv0_n12_N4gg313fooEv)();
+extern void ABISELECT(_ZThn80_N4gg313fooEv,_ZThn44_N4gg313fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg31[] = {
+  ABISELECT(48,28),
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  ABISELECT(80,44),
+  ABISELECT(64,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg31[0]),
+  (VTBL_ENTRY)&_ZN4gg313fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4gg31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N4gg313fooEv,_ZTv0_n20_N4gg313fooEv),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4gg31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg313fooEv,_ZTv0_n12_N4gg313fooEv),
+  ABISELECT(-48,-28),
+  ABISELECT(-48,-28),
+  (VTBL_ENTRY)&(_ZTI4gg31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg313fooEv,_ZTv0_n12_N4gg313fooEv),
+  ABISELECT(-64,-36),
+  ABISELECT(-64,-36),
+  (VTBL_ENTRY)&(_ZTI4gg31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg313fooEv,_ZTv0_n12_N4gg313fooEv),
+  ABISELECT(-80,-44),
+  ABISELECT(-80,-44),
+  (VTBL_ENTRY)&(_ZTI4gg31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg313fooEv,_ZTv0_n12_N4gg313fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg31[];
+extern void _ZN4ff313fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff31__4gg31[] = {
+  ABISELECT(80,44),
+  ABISELECT(64,36),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff31[0]),
+  (VTBL_ENTRY)&_ZN4ff313fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv)();
+extern void ABISELECT(_ZThn64_N4ff313fooEv,_ZThn36_N4ff313fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc31__4ff31__4gg31[] = {
+  ABISELECT(-64,-36),
+  ABISELECT(-64,-36),
+  (VTBL_ENTRY)&(_ZTI4ff31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv)();
+extern void ABISELECT(_ZThn80_N4ff313fooEv,_ZThn44_N4ff313fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd31__4ff31__4gg31[] = {
+  ABISELECT(-80,-44),
+  ABISELECT(-80,-44),
+  (VTBL_ENTRY)&(_ZTI4ff31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv),
+};
+extern void _ZN4ee313fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee31__4gg31[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee31[0]),
+  (VTBL_ENTRY)&_ZN4ee313fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv)();
+extern void ABISELECT(_ZThn16_N4ee313fooEv,_ZThn8_N4ee313fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa31__4ee31__4gg31[] = {
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv)();
+extern void ABISELECT(_ZThn32_N4ee313fooEv,_ZThn16_N4ee313fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb31__4ee31__4gg31[] = {
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee31[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv),
+};
+static  VTT_ENTRY vtt_gg31[] = {
+  {&(_ZTV4gg31[7]),  7,30},
+  {&(_tg__ZTV4ff31__4gg31[4]),  4,5},
+  {&(_tg__ZTV4cc31__4ff31__4gg31[3]),  3,4},
+  {&(_tg__ZTV4dd31__4ff31__4gg31[3]),  3,4},
+  {&(_ZTV4gg31[13]),  13,30},
+  {&(_ZTV4gg31[17]),  17,30},
+  {&(_ZTV4gg31[21]),  21,30},
+  {&(_ZTV4gg31[25]),  25,30},
+  {&(_ZTV4gg31[29]),  29,30},
+  {&(_tg__ZTV4ee31__4gg31[4]),  4,5},
+  {&(_tg__ZTV4aa31__4ee31__4gg31[3]),  3,4},
+  {&(_tg__ZTV4bb31__4ee31__4gg31[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg31[];
+extern  VTBL_ENTRY _ZTV4gg31[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg31[];
+static VTBL_ENTRY alt_thunk_names79[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee313fooEv,_ZTv0_n12_N4ee313fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee313fooEv,_ZThn16_N4ee313fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee313fooEv,_ZThn8_N4ee313fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff313fooEv,_ZTv0_n12_N4ff313fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn80_N4ff313fooEv,_ZThn44_N4ff313fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4ff313fooEv,_ZThn36_N4ff313fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg313fooEv,_ZTv0_n12_N4gg313fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn80_N4gg313fooEv,_ZThn44_N4gg313fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4gg313fooEv,_ZThn36_N4gg313fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg313fooEv,_ZThn28_N4gg313fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4gg313fooEv,_ZThn20_N4gg313fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N4gg313fooEv,_ZTv0_n20_N4gg313fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4gg313fooEv,_ZThn12_N4gg313fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg31 = {  "gg31", // class name
+  bases_gg31, 6,
+  &(vtc_gg31[0]), // expected_vtbl_contents
+  &(vtt_gg31[0]), // expected_vtt_contents
+  ABISELECT(96,52), // object size
+  NSPAIRA(_ZTI4gg31),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg31),30, //virtual function table var
+  7, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg31),12, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names79,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa32  {
+  int a;
+   aa32(); // _ZN4aa32C1Ev
+  virtual void  foo(); // _ZN4aa323fooEv
+  ~aa32(); // tgen
+};
+//SIG(-1 aa32) C1{ v1 Fi}
+
+
+ aa32 ::aa32(){ note_ctor("aa32", this);}
+void  aa32 ::foo(){vfunc_called(this, "_ZN4aa323fooEv");}
+aa32 ::~aa32(){ note_dtor("aa32", this);} // tgen
+
+static void Test_aa32()
+{
+  extern Class_Descriptor cd_aa32;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa32, buf);
+    aa32 *dp, &lv = *(dp=new (buf) aa32());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa32)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa32)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa32.a");
+    test_class_info(&lv, &cd_aa32);
+    dp->~aa32();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa32(Test_aa32, "aa32", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa32C1Ev();
+extern void _ZN4aa32D1Ev();
+Name_Map name_map_aa32[] = {
+  NSPAIR(_ZN4aa32C1Ev),
+  NSPAIR(_ZN4aa32D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa32[];
+extern void _ZN4aa323fooEv();
+static  VTBL_ENTRY vtc_aa32[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa32[0]),
+  (VTBL_ENTRY)&_ZN4aa323fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa32[];
+extern  VTBL_ENTRY _ZTV4aa32[];
+Class_Descriptor cd_aa32 = {  "aa32", // class name
+  0,0,//no base classes
+  &(vtc_aa32[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa32),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa32),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  bb32  {
+  int b;
+   bb32(); // _ZN4bb32C1Ev
+  virtual void  foo(); // _ZN4bb323fooEv
+  ~bb32(); // tgen
+};
+//SIG(-1 bb32) C1{ v1 Fi}
+
+
+ bb32 ::bb32(){ note_ctor("bb32", this);}
+void  bb32 ::foo(){vfunc_called(this, "_ZN4bb323fooEv");}
+bb32 ::~bb32(){ note_dtor("bb32", this);} // tgen
+
+static void Test_bb32()
+{
+  extern Class_Descriptor cd_bb32;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb32, buf);
+    bb32 *dp, &lv = *(dp=new (buf) bb32());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb32)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb32)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb32.b");
+    test_class_info(&lv, &cd_bb32);
+    dp->~bb32();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb32(Test_bb32, "bb32", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb32C1Ev();
+extern void _ZN4bb32D1Ev();
+Name_Map name_map_bb32[] = {
+  NSPAIR(_ZN4bb32C1Ev),
+  NSPAIR(_ZN4bb32D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb32[];
+extern void _ZN4bb323fooEv();
+static  VTBL_ENTRY vtc_bb32[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb32[0]),
+  (VTBL_ENTRY)&_ZN4bb323fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb32[];
+extern  VTBL_ENTRY _ZTV4bb32[];
+Class_Descriptor cd_bb32 = {  "bb32", // class name
+  0,0,//no base classes
+  &(vtc_bb32[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb32),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb32),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  cc32  {
+  int c;
+   cc32(); // _ZN4cc32C1Ev
+  virtual void  foo(); // _ZN4cc323fooEv
+  ~cc32(); // tgen
+};
+//SIG(-1 cc32) C1{ v1 Fi}
+
+
+ cc32 ::cc32(){ note_ctor("cc32", this);}
+void  cc32 ::foo(){vfunc_called(this, "_ZN4cc323fooEv");}
+cc32 ::~cc32(){ note_dtor("cc32", this);} // tgen
+
+static void Test_cc32()
+{
+  extern Class_Descriptor cd_cc32;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc32, buf);
+    cc32 *dp, &lv = *(dp=new (buf) cc32());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc32)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc32)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc32.c");
+    test_class_info(&lv, &cd_cc32);
+    dp->~cc32();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc32(Test_cc32, "cc32", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc32C1Ev();
+extern void _ZN4cc32D1Ev();
+Name_Map name_map_cc32[] = {
+  NSPAIR(_ZN4cc32C1Ev),
+  NSPAIR(_ZN4cc32D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc32[];
+extern void _ZN4cc323fooEv();
+static  VTBL_ENTRY vtc_cc32[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc32[0]),
+  (VTBL_ENTRY)&_ZN4cc323fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc32[];
+extern  VTBL_ENTRY _ZTV4cc32[];
+Class_Descriptor cd_cc32 = {  "cc32", // class name
+  0,0,//no base classes
+  &(vtc_cc32[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc32),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc32),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  dd32  {
+  int d;
+   dd32(); // _ZN4dd32C1Ev
+  virtual void  foo(); // _ZN4dd323fooEv
+  ~dd32(); // tgen
+};
+//SIG(-1 dd32) C1{ v1 Fi}
+
+
+ dd32 ::dd32(){ note_ctor("dd32", this);}
+void  dd32 ::foo(){vfunc_called(this, "_ZN4dd323fooEv");}
+dd32 ::~dd32(){ note_dtor("dd32", this);} // tgen
+
+static void Test_dd32()
+{
+  extern Class_Descriptor cd_dd32;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd32, buf);
+    dd32 *dp, &lv = *(dp=new (buf) dd32());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd32)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd32)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd32.d");
+    test_class_info(&lv, &cd_dd32);
+    dp->~dd32();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd32(Test_dd32, "dd32", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd32C1Ev();
+extern void _ZN4dd32D1Ev();
+Name_Map name_map_dd32[] = {
+  NSPAIR(_ZN4dd32C1Ev),
+  NSPAIR(_ZN4dd32D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd32[];
+extern void _ZN4dd323fooEv();
+static  VTBL_ENTRY vtc_dd32[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd32[0]),
+  (VTBL_ENTRY)&_ZN4dd323fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd32[];
+extern  VTBL_ENTRY _ZTV4dd32[];
+Class_Descriptor cd_dd32 = {  "dd32", // class name
+  0,0,//no base classes
+  &(vtc_dd32[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd32),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd32),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  ee32  : aa32 , bb32 {
+  int e;
+   ee32(); // _ZN4ee32C1Ev
+  virtual void  foo(); // _ZN4ee323fooEv
+  ~ee32(); // tgen
+};
+//SIG(-1 ee32) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee32 ::ee32(){ note_ctor("ee32", this);}
+void  ee32 ::foo(){vfunc_called(this, "_ZN4ee323fooEv");}
+ee32 ::~ee32(){ note_dtor("ee32", this);} // tgen
+
+static void Test_ee32()
+{
+  extern Class_Descriptor cd_ee32;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee32, buf);
+    ee32 *dp, &lv = *(dp=new (buf) ee32());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee32)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee32)");
+    check_base_class_offset(lv, (aa32*), 0, "ee32");
+    check_base_class_offset(lv, (bb32*), ABISELECT(16,8), "ee32");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee32.e");
+    test_class_info(&lv, &cd_ee32);
+    dp->~ee32();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee32(Test_ee32, "ee32", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee32C1Ev();
+extern void _ZN4ee32D1Ev();
+Name_Map name_map_ee32[] = {
+  NSPAIR(_ZN4ee32C1Ev),
+  NSPAIR(_ZN4ee32D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa32;
+extern VTBL_ENTRY _ZTI4aa32[];
+extern  VTBL_ENTRY _ZTV4aa32[];
+extern Class_Descriptor cd_bb32;
+extern VTBL_ENTRY _ZTI4bb32[];
+extern  VTBL_ENTRY _ZTV4bb32[];
+static Base_Class bases_ee32[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa32,    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},
+  {&cd_bb32,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ee32[];
+extern void _ZN4ee323fooEv();
+extern void ABISELECT(_ZThn16_N4ee323fooEv,_ZThn8_N4ee323fooEv)();
+static  VTBL_ENTRY vtc_ee32[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee32[0]),
+  (VTBL_ENTRY)&_ZN4ee323fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee32[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ee323fooEv,_ZThn8_N4ee323fooEv),
+};
+extern VTBL_ENTRY _ZTI4ee32[];
+extern  VTBL_ENTRY _ZTV4ee32[];
+Class_Descriptor cd_ee32 = {  "ee32", // class name
+  bases_ee32, 2,
+  &(vtc_ee32[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee32),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee32),6, //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  ff32  : cc32 , dd32 {
+  int f;
+   ff32(); // _ZN4ff32C1Ev
+  virtual void  foo(); // _ZN4ff323fooEv
+  ~ff32(); // tgen
+};
+//SIG(-1 ff32) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff32 ::ff32(){ note_ctor("ff32", this);}
+void  ff32 ::foo(){vfunc_called(this, "_ZN4ff323fooEv");}
+ff32 ::~ff32(){ note_dtor("ff32", this);} // tgen
+
+static void Test_ff32()
+{
+  extern Class_Descriptor cd_ff32;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff32, buf);
+    ff32 *dp, &lv = *(dp=new (buf) ff32());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff32)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff32)");
+    check_base_class_offset(lv, (cc32*), 0, "ff32");
+    check_base_class_offset(lv, (dd32*), ABISELECT(16,8), "ff32");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff32.f");
+    test_class_info(&lv, &cd_ff32);
+    dp->~ff32();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff32(Test_ff32, "ff32", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff32C1Ev();
+extern void _ZN4ff32D1Ev();
+Name_Map name_map_ff32[] = {
+  NSPAIR(_ZN4ff32C1Ev),
+  NSPAIR(_ZN4ff32D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc32;
+extern VTBL_ENTRY _ZTI4cc32[];
+extern  VTBL_ENTRY _ZTV4cc32[];
+extern Class_Descriptor cd_dd32;
+extern VTBL_ENTRY _ZTI4dd32[];
+extern  VTBL_ENTRY _ZTV4dd32[];
+static Base_Class bases_ff32[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc32,    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},
+  {&cd_dd32,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ff32[];
+extern void _ZN4ff323fooEv();
+extern void ABISELECT(_ZThn16_N4ff323fooEv,_ZThn8_N4ff323fooEv)();
+static  VTBL_ENTRY vtc_ff32[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff32[0]),
+  (VTBL_ENTRY)&_ZN4ff323fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff32[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ff323fooEv,_ZThn8_N4ff323fooEv),
+};
+extern VTBL_ENTRY _ZTI4ff32[];
+extern  VTBL_ENTRY _ZTV4ff32[];
+Class_Descriptor cd_ff32 = {  "ff32", // class name
+  bases_ff32, 2,
+  &(vtc_ff32[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff32),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff32),6, //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  gg32  : ee32 , virtual ff32 {
+  int g;
+   gg32(const ABISELECT(__tsi64,int) *const *); // _ZN4gg32C2Ev
+  virtual void  foo(); // _ZN4gg323fooEv
+  ~gg32(); // tgen
+  gg32(); // tgen
+};
+//SIG(1 gg32) C1{ BC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} VBC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg32 ::gg32(const ABISELECT(__tsi64,int) *const *){}
+void  gg32 ::foo(){vfunc_called(this, "_ZN4gg323fooEv");}
+gg32 ::~gg32(){ note_dtor("gg32", this);} // tgen
+gg32 ::gg32(){ note_ctor("gg32", this);} // tgen
+
+static void Test_gg32()
+{
+  extern Class_Descriptor cd_gg32;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg32, buf);
+    gg32 *dp, &lv = *(dp=new (buf) gg32());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg32)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg32)");
+    check_base_class_offset(lv, (aa32*)(ee32*), 0, "gg32");
+    check_base_class_offset(lv, (bb32*)(ee32*), ABISELECT(16,8), "gg32");
+    check_base_class_offset(lv, (ee32*), 0, "gg32");
+    check_base_class_offset(lv, (cc32*)(ff32*), ABISELECT(40,24), "gg32");
+    check_base_class_offset(lv, (dd32*)(ff32*), ABISELECT(56,32), "gg32");
+    check_base_class_offset(lv, (ff32*), ABISELECT(40,24), "gg32");
+    check_field_offset(lv, g, ABISELECT(32,20), "gg32.g");
+    test_class_info(&lv, &cd_gg32);
+    dp->~gg32();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg32(Test_gg32, "gg32", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg32C1Ev();
+extern void _ZN4gg32D1Ev();
+Name_Map name_map_gg32[] = {
+  NSPAIR(_ZN4gg32C1Ev),
+  NSPAIR(_ZN4gg32D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa32;
+extern VTBL_ENTRY _ZTI4aa32[];
+extern  VTBL_ENTRY _ZTV4aa32[];
+extern Class_Descriptor cd_bb32;
+extern VTBL_ENTRY _ZTI4bb32[];
+extern  VTBL_ENTRY _ZTV4bb32[];
+extern Class_Descriptor cd_ee32;
+extern VTBL_ENTRY _ZTI4ee32[];
+extern  VTBL_ENTRY _ZTV4ee32[];
+extern Class_Descriptor cd_cc32;
+extern VTBL_ENTRY _ZTI4cc32[];
+extern  VTBL_ENTRY _ZTV4cc32[];
+extern Class_Descriptor cd_dd32;
+extern VTBL_ENTRY _ZTI4dd32[];
+extern  VTBL_ENTRY _ZTV4dd32[];
+extern Class_Descriptor cd_ff32;
+extern VTBL_ENTRY _ZTI4ff32[];
+extern  VTBL_ENTRY _ZTV4ff32[];
+static Base_Class bases_gg32[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa32,    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
+    4, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb32,    ABISELECT(16,8), //bcp->offset
+    4, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee32,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc32,    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
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd32,    ABISELECT(56,32), //bcp->offset
+    11, //bcp->virtual_function_table_offset
+    2, //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
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff32,    ABISELECT(40,24), //bcp->offset
+    7, //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 _ZTI4gg32[];
+extern void _ZN4gg323fooEv();
+extern void ABISELECT(_ZThn16_N4gg323fooEv,_ZThn8_N4gg323fooEv)();
+extern void ABISELECT(_ZTv0_n24_N4gg323fooEv,_ZTv0_n12_N4gg323fooEv)();
+extern void ABISELECT(_ZThn40_N4gg323fooEv,_ZThn24_N4gg323fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTvn16_n24_N4gg323fooEv,_ZTvn8_n12_N4gg323fooEv)();
+static  VTBL_ENTRY vtc_gg32[] = {
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg32[0]),
+  (VTBL_ENTRY)&_ZN4gg323fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg32[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg323fooEv,_ZThn8_N4gg323fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg32[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg323fooEv,_ZTv0_n12_N4gg323fooEv),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4gg32[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n24_N4gg323fooEv,_ZTvn8_n12_N4gg323fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg32[];
+static  VTT_ENTRY vtt_gg32[] = {
+  {&(_ZTV4gg32[3]),  3,14},
+  {&(_ZTV4gg32[10]),  10,14},
+  {&(_ZTV4gg32[13]),  13,14},
+};
+extern VTBL_ENTRY _ZTI4gg32[];
+extern  VTBL_ENTRY _ZTV4gg32[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg32[];
+static VTBL_ENTRY alt_thunk_names80[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg323fooEv,_ZTv0_n12_N4gg323fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg323fooEv,_ZThn24_N4gg323fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg32 = {  "gg32", // class name
+  bases_gg32, 6,
+  &(vtc_gg32[0]), // expected_vtbl_contents
+  &(vtt_gg32[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg32),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg32),14, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg32),3, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names80,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa33  {
+  int a;
+   aa33(); // _ZN4aa33C1Ev
+  virtual void  foo(); // _ZN4aa333fooEv
+  ~aa33(); // tgen
+};
+//SIG(-1 aa33) C1{ v1 Fi}
+
+
+ aa33 ::aa33(){ note_ctor("aa33", this);}
+void  aa33 ::foo(){vfunc_called(this, "_ZN4aa333fooEv");}
+aa33 ::~aa33(){ note_dtor("aa33", this);} // tgen
+
+static void Test_aa33()
+{
+  extern Class_Descriptor cd_aa33;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa33, buf);
+    aa33 *dp, &lv = *(dp=new (buf) aa33());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa33)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa33)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa33.a");
+    test_class_info(&lv, &cd_aa33);
+    dp->~aa33();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa33(Test_aa33, "aa33", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa33C1Ev();
+extern void _ZN4aa33D1Ev();
+Name_Map name_map_aa33[] = {
+  NSPAIR(_ZN4aa33C1Ev),
+  NSPAIR(_ZN4aa33D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa33[];
+extern void _ZN4aa333fooEv();
+static  VTBL_ENTRY vtc_aa33[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa33[0]),
+  (VTBL_ENTRY)&_ZN4aa333fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa33[];
+extern  VTBL_ENTRY _ZTV4aa33[];
+Class_Descriptor cd_aa33 = {  "aa33", // class name
+  0,0,//no base classes
+  &(vtc_aa33[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa33),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa33),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  bb33  {
+  int b;
+   bb33(); // _ZN4bb33C1Ev
+  virtual void  foo(); // _ZN4bb333fooEv
+  ~bb33(); // tgen
+};
+//SIG(-1 bb33) C1{ v1 Fi}
+
+
+ bb33 ::bb33(){ note_ctor("bb33", this);}
+void  bb33 ::foo(){vfunc_called(this, "_ZN4bb333fooEv");}
+bb33 ::~bb33(){ note_dtor("bb33", this);} // tgen
+
+static void Test_bb33()
+{
+  extern Class_Descriptor cd_bb33;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb33, buf);
+    bb33 *dp, &lv = *(dp=new (buf) bb33());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb33)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb33)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb33.b");
+    test_class_info(&lv, &cd_bb33);
+    dp->~bb33();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb33(Test_bb33, "bb33", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb33C1Ev();
+extern void _ZN4bb33D1Ev();
+Name_Map name_map_bb33[] = {
+  NSPAIR(_ZN4bb33C1Ev),
+  NSPAIR(_ZN4bb33D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb33[];
+extern void _ZN4bb333fooEv();
+static  VTBL_ENTRY vtc_bb33[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb33[0]),
+  (VTBL_ENTRY)&_ZN4bb333fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb33[];
+extern  VTBL_ENTRY _ZTV4bb33[];
+Class_Descriptor cd_bb33 = {  "bb33", // class name
+  0,0,//no base classes
+  &(vtc_bb33[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb33),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb33),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  cc33  {
+  int c;
+   cc33(); // _ZN4cc33C1Ev
+  virtual void  foo(); // _ZN4cc333fooEv
+  ~cc33(); // tgen
+};
+//SIG(-1 cc33) C1{ v1 Fi}
+
+
+ cc33 ::cc33(){ note_ctor("cc33", this);}
+void  cc33 ::foo(){vfunc_called(this, "_ZN4cc333fooEv");}
+cc33 ::~cc33(){ note_dtor("cc33", this);} // tgen
+
+static void Test_cc33()
+{
+  extern Class_Descriptor cd_cc33;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc33, buf);
+    cc33 *dp, &lv = *(dp=new (buf) cc33());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc33)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc33)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc33.c");
+    test_class_info(&lv, &cd_cc33);
+    dp->~cc33();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc33(Test_cc33, "cc33", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc33C1Ev();
+extern void _ZN4cc33D1Ev();
+Name_Map name_map_cc33[] = {
+  NSPAIR(_ZN4cc33C1Ev),
+  NSPAIR(_ZN4cc33D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc33[];
+extern void _ZN4cc333fooEv();
+static  VTBL_ENTRY vtc_cc33[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc33[0]),
+  (VTBL_ENTRY)&_ZN4cc333fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc33[];
+extern  VTBL_ENTRY _ZTV4cc33[];
+Class_Descriptor cd_cc33 = {  "cc33", // class name
+  0,0,//no base classes
+  &(vtc_cc33[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc33),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc33),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  dd33  {
+  int d;
+   dd33(); // _ZN4dd33C1Ev
+  virtual void  foo(); // _ZN4dd333fooEv
+  ~dd33(); // tgen
+};
+//SIG(-1 dd33) C1{ v1 Fi}
+
+
+ dd33 ::dd33(){ note_ctor("dd33", this);}
+void  dd33 ::foo(){vfunc_called(this, "_ZN4dd333fooEv");}
+dd33 ::~dd33(){ note_dtor("dd33", this);} // tgen
+
+static void Test_dd33()
+{
+  extern Class_Descriptor cd_dd33;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd33, buf);
+    dd33 *dp, &lv = *(dp=new (buf) dd33());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd33)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd33)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd33.d");
+    test_class_info(&lv, &cd_dd33);
+    dp->~dd33();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd33(Test_dd33, "dd33", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd33C1Ev();
+extern void _ZN4dd33D1Ev();
+Name_Map name_map_dd33[] = {
+  NSPAIR(_ZN4dd33C1Ev),
+  NSPAIR(_ZN4dd33D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd33[];
+extern void _ZN4dd333fooEv();
+static  VTBL_ENTRY vtc_dd33[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd33[0]),
+  (VTBL_ENTRY)&_ZN4dd333fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd33[];
+extern  VTBL_ENTRY _ZTV4dd33[];
+Class_Descriptor cd_dd33 = {  "dd33", // class name
+  0,0,//no base classes
+  &(vtc_dd33[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd33),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd33),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  ee33  : virtual aa33 , bb33 {
+  int e;
+   ee33(const ABISELECT(__tsi64,int) *const *); // _ZN4ee33C2Ev
+  virtual void  foo(); // _ZN4ee333fooEv
+  ~ee33(); // tgen
+  ee33(); // tgen
+};
+//SIG(-1 ee33) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee33 ::ee33(const ABISELECT(__tsi64,int) *const *){}
+void  ee33 ::foo(){vfunc_called(this, "_ZN4ee333fooEv");}
+ee33 ::~ee33(){ note_dtor("ee33", this);} // tgen
+ee33 ::ee33(){ note_ctor("ee33", this);} // tgen
+
+static void Test_ee33()
+{
+  extern Class_Descriptor cd_ee33;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee33, buf);
+    ee33 *dp, &lv = *(dp=new (buf) ee33());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee33)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee33)");
+    check_base_class_offset(lv, (aa33*), ABISELECT(16,12), "ee33");
+    check_base_class_offset(lv, (bb33*), 0, "ee33");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee33.e");
+    test_class_info(&lv, &cd_ee33);
+    dp->~ee33();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee33(Test_ee33, "ee33", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee33C1Ev();
+extern void _ZN4ee33D1Ev();
+Name_Map name_map_ee33[] = {
+  NSPAIR(_ZN4ee33C1Ev),
+  NSPAIR(_ZN4ee33D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa33;
+extern VTBL_ENTRY _ZTI4aa33[];
+extern  VTBL_ENTRY _ZTV4aa33[];
+extern Class_Descriptor cd_bb33;
+extern VTBL_ENTRY _ZTI4bb33[];
+extern  VTBL_ENTRY _ZTV4bb33[];
+static Base_Class bases_ee33[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa33,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb33,    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 _ZTI4ee33[];
+extern void _ZN4ee333fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee333fooEv,_ZTv0_n12_N4ee333fooEv)();
+extern void ABISELECT(_ZThn16_N4ee333fooEv,_ZThn12_N4ee333fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee33[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee33[0]),
+  (VTBL_ENTRY)&_ZN4ee333fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee33[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee333fooEv,_ZTv0_n12_N4ee333fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee33[];
+static  VTT_ENTRY vtt_ee33[] = {
+  {&(_ZTV4ee33[3]),  3,8},
+  {&(_ZTV4ee33[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee33[];
+extern  VTBL_ENTRY _ZTV4ee33[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee33[];
+static VTBL_ENTRY alt_thunk_names81[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee333fooEv,_ZTv0_n12_N4ee333fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee333fooEv,_ZThn12_N4ee333fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee33 = {  "ee33", // class name
+  bases_ee33, 2,
+  &(vtc_ee33[0]), // expected_vtbl_contents
+  &(vtt_ee33[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee33),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee33),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee33),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names81,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff33  : cc33 , dd33 {
+  int f;
+   ff33(); // _ZN4ff33C1Ev
+  virtual void  foo(); // _ZN4ff333fooEv
+  ~ff33(); // tgen
+};
+//SIG(-1 ff33) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff33 ::ff33(){ note_ctor("ff33", this);}
+void  ff33 ::foo(){vfunc_called(this, "_ZN4ff333fooEv");}
+ff33 ::~ff33(){ note_dtor("ff33", this);} // tgen
+
+static void Test_ff33()
+{
+  extern Class_Descriptor cd_ff33;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff33, buf);
+    ff33 *dp, &lv = *(dp=new (buf) ff33());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff33)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff33)");
+    check_base_class_offset(lv, (cc33*), 0, "ff33");
+    check_base_class_offset(lv, (dd33*), ABISELECT(16,8), "ff33");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff33.f");
+    test_class_info(&lv, &cd_ff33);
+    dp->~ff33();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff33(Test_ff33, "ff33", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff33C1Ev();
+extern void _ZN4ff33D1Ev();
+Name_Map name_map_ff33[] = {
+  NSPAIR(_ZN4ff33C1Ev),
+  NSPAIR(_ZN4ff33D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc33;
+extern VTBL_ENTRY _ZTI4cc33[];
+extern  VTBL_ENTRY _ZTV4cc33[];
+extern Class_Descriptor cd_dd33;
+extern VTBL_ENTRY _ZTI4dd33[];
+extern  VTBL_ENTRY _ZTV4dd33[];
+static Base_Class bases_ff33[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc33,    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},
+  {&cd_dd33,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ff33[];
+extern void _ZN4ff333fooEv();
+extern void ABISELECT(_ZThn16_N4ff333fooEv,_ZThn8_N4ff333fooEv)();
+static  VTBL_ENTRY vtc_ff33[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff33[0]),
+  (VTBL_ENTRY)&_ZN4ff333fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff33[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ff333fooEv,_ZThn8_N4ff333fooEv),
+};
+extern VTBL_ENTRY _ZTI4ff33[];
+extern  VTBL_ENTRY _ZTV4ff33[];
+Class_Descriptor cd_ff33 = {  "ff33", // class name
+  bases_ff33, 2,
+  &(vtc_ff33[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff33),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff33),6, //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  gg33  : ee33 , virtual ff33 {
+  int g;
+   gg33(const ABISELECT(__tsi64,int) *const *); // _ZN4gg33C2Ev
+  virtual void  foo(); // _ZN4gg333fooEv
+  ~gg33(); // tgen
+  gg33(); // tgen
+};
+//SIG(1 gg33) C1{ BC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} VBC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg33 ::gg33(const ABISELECT(__tsi64,int) *const *){}
+void  gg33 ::foo(){vfunc_called(this, "_ZN4gg333fooEv");}
+gg33 ::~gg33(){ note_dtor("gg33", this);} // tgen
+gg33 ::gg33(){ note_ctor("gg33", this);} // tgen
+
+static void Test_gg33()
+{
+  extern Class_Descriptor cd_gg33;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg33, buf);
+    gg33 *dp, &lv = *(dp=new (buf) gg33());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg33)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg33)");
+    check_base_class_offset(lv, (aa33*)(ee33*), ABISELECT(24,16), "gg33");
+    check_base_class_offset(lv, (bb33*)(ee33*), 0, "gg33");
+    check_base_class_offset(lv, (ee33*), 0, "gg33");
+    check_base_class_offset(lv, (cc33*)(ff33*), ABISELECT(40,24), "gg33");
+    check_base_class_offset(lv, (dd33*)(ff33*), ABISELECT(56,32), "gg33");
+    check_base_class_offset(lv, (ff33*), ABISELECT(40,24), "gg33");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg33.g");
+    test_class_info(&lv, &cd_gg33);
+    dp->~gg33();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg33(Test_gg33, "gg33", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg33C1Ev();
+extern void _ZN4gg33D1Ev();
+Name_Map name_map_gg33[] = {
+  NSPAIR(_ZN4gg33C1Ev),
+  NSPAIR(_ZN4gg33D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa33;
+extern VTBL_ENTRY _ZTI4aa33[];
+extern  VTBL_ENTRY _ZTV4aa33[];
+extern Class_Descriptor cd_bb33;
+extern VTBL_ENTRY _ZTI4bb33[];
+extern  VTBL_ENTRY _ZTV4bb33[];
+extern Class_Descriptor cd_ee33;
+extern VTBL_ENTRY _ZTI4ee33[];
+extern  VTBL_ENTRY _ZTV4ee33[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee33[];
+extern Class_Descriptor cd_cc33;
+extern VTBL_ENTRY _ZTI4cc33[];
+extern  VTBL_ENTRY _ZTV4cc33[];
+extern Class_Descriptor cd_dd33;
+extern VTBL_ENTRY _ZTI4dd33[];
+extern  VTBL_ENTRY _ZTV4dd33[];
+extern Class_Descriptor cd_ff33;
+extern VTBL_ENTRY _ZTI4ff33[];
+extern  VTBL_ENTRY _ZTV4ff33[];
+static Base_Class bases_gg33[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa33,    ABISELECT(24,16), //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_bb33,    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
+    5, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee33,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc33,    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
+    2, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd33,    ABISELECT(56,32), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff33,    ABISELECT(40,24), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg33[];
+extern void _ZN4gg333fooEv();
+extern void ABISELECT(_ZTv0_n24_N4gg333fooEv,_ZTv0_n12_N4gg333fooEv)();
+extern void ABISELECT(_ZThn24_N4gg333fooEv,_ZThn16_N4gg333fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg333fooEv,_ZTv0_n12_N4gg333fooEv)();
+extern void ABISELECT(_ZThn40_N4gg333fooEv,_ZThn24_N4gg333fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTvn16_n24_N4gg333fooEv,_ZTvn8_n12_N4gg333fooEv)();
+static  VTBL_ENTRY vtc_gg33[] = {
+  ABISELECT(40,24),
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg33[0]),
+  (VTBL_ENTRY)&_ZN4gg333fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg33[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg333fooEv,_ZTv0_n12_N4gg333fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg33[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg333fooEv,_ZTv0_n12_N4gg333fooEv),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4gg33[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n24_N4gg333fooEv,_ZTvn8_n12_N4gg333fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg33[];
+extern void _ZN4ee333fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee33__4gg33[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee33[0]),
+  (VTBL_ENTRY)&_ZN4ee333fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee333fooEv,_ZTv0_n12_N4ee333fooEv)();
+extern void ABISELECT(_ZThn24_N4ee333fooEv,_ZThn16_N4ee333fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa33__4ee33__4gg33[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4ee33[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee333fooEv,_ZTv0_n12_N4ee333fooEv),
+};
+static  VTT_ENTRY vtt_gg33[] = {
+  {&(_ZTV4gg33[4]),  4,16},
+  {&(_tg__ZTV4ee33__4gg33[3]),  3,4},
+  {&(_tg__ZTV4aa33__4ee33__4gg33[3]),  3,4},
+  {&(_ZTV4gg33[8]),  8,16},
+  {&(_ZTV4gg33[12]),  12,16},
+  {&(_ZTV4gg33[15]),  15,16},
+};
+extern VTBL_ENTRY _ZTI4gg33[];
+extern  VTBL_ENTRY _ZTV4gg33[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg33[];
+static VTBL_ENTRY alt_thunk_names82[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee333fooEv,_ZTv0_n12_N4ee333fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4ee333fooEv,_ZThn16_N4ee333fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg333fooEv,_ZTv0_n12_N4gg333fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg333fooEv,_ZThn24_N4gg333fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg333fooEv,_ZThn16_N4gg333fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg33 = {  "gg33", // class name
+  bases_gg33, 6,
+  &(vtc_gg33[0]), // expected_vtbl_contents
+  &(vtt_gg33[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg33),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg33),16, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg33),6, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names82,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa34  {
+  int a;
+   aa34(); // _ZN4aa34C1Ev
+  virtual void  foo(); // _ZN4aa343fooEv
+  ~aa34(); // tgen
+};
+//SIG(-1 aa34) C1{ v1 Fi}
+
+
+ aa34 ::aa34(){ note_ctor("aa34", this);}
+void  aa34 ::foo(){vfunc_called(this, "_ZN4aa343fooEv");}
+aa34 ::~aa34(){ note_dtor("aa34", this);} // tgen
+
+static void Test_aa34()
+{
+  extern Class_Descriptor cd_aa34;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa34, buf);
+    aa34 *dp, &lv = *(dp=new (buf) aa34());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa34)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa34)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa34.a");
+    test_class_info(&lv, &cd_aa34);
+    dp->~aa34();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa34(Test_aa34, "aa34", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa34C1Ev();
+extern void _ZN4aa34D1Ev();
+Name_Map name_map_aa34[] = {
+  NSPAIR(_ZN4aa34C1Ev),
+  NSPAIR(_ZN4aa34D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa34[];
+extern void _ZN4aa343fooEv();
+static  VTBL_ENTRY vtc_aa34[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa34[0]),
+  (VTBL_ENTRY)&_ZN4aa343fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa34[];
+extern  VTBL_ENTRY _ZTV4aa34[];
+Class_Descriptor cd_aa34 = {  "aa34", // class name
+  0,0,//no base classes
+  &(vtc_aa34[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa34),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa34),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  bb34  {
+  int b;
+   bb34(); // _ZN4bb34C1Ev
+  virtual void  foo(); // _ZN4bb343fooEv
+  ~bb34(); // tgen
+};
+//SIG(-1 bb34) C1{ v1 Fi}
+
+
+ bb34 ::bb34(){ note_ctor("bb34", this);}
+void  bb34 ::foo(){vfunc_called(this, "_ZN4bb343fooEv");}
+bb34 ::~bb34(){ note_dtor("bb34", this);} // tgen
+
+static void Test_bb34()
+{
+  extern Class_Descriptor cd_bb34;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb34, buf);
+    bb34 *dp, &lv = *(dp=new (buf) bb34());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb34)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb34)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb34.b");
+    test_class_info(&lv, &cd_bb34);
+    dp->~bb34();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb34(Test_bb34, "bb34", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb34C1Ev();
+extern void _ZN4bb34D1Ev();
+Name_Map name_map_bb34[] = {
+  NSPAIR(_ZN4bb34C1Ev),
+  NSPAIR(_ZN4bb34D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb34[];
+extern void _ZN4bb343fooEv();
+static  VTBL_ENTRY vtc_bb34[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb34[0]),
+  (VTBL_ENTRY)&_ZN4bb343fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb34[];
+extern  VTBL_ENTRY _ZTV4bb34[];
+Class_Descriptor cd_bb34 = {  "bb34", // class name
+  0,0,//no base classes
+  &(vtc_bb34[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb34),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb34),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  cc34  {
+  int c;
+   cc34(); // _ZN4cc34C1Ev
+  virtual void  foo(); // _ZN4cc343fooEv
+  ~cc34(); // tgen
+};
+//SIG(-1 cc34) C1{ v1 Fi}
+
+
+ cc34 ::cc34(){ note_ctor("cc34", this);}
+void  cc34 ::foo(){vfunc_called(this, "_ZN4cc343fooEv");}
+cc34 ::~cc34(){ note_dtor("cc34", this);} // tgen
+
+static void Test_cc34()
+{
+  extern Class_Descriptor cd_cc34;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc34, buf);
+    cc34 *dp, &lv = *(dp=new (buf) cc34());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc34)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc34)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc34.c");
+    test_class_info(&lv, &cd_cc34);
+    dp->~cc34();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc34(Test_cc34, "cc34", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc34C1Ev();
+extern void _ZN4cc34D1Ev();
+Name_Map name_map_cc34[] = {
+  NSPAIR(_ZN4cc34C1Ev),
+  NSPAIR(_ZN4cc34D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc34[];
+extern void _ZN4cc343fooEv();
+static  VTBL_ENTRY vtc_cc34[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc34[0]),
+  (VTBL_ENTRY)&_ZN4cc343fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc34[];
+extern  VTBL_ENTRY _ZTV4cc34[];
+Class_Descriptor cd_cc34 = {  "cc34", // class name
+  0,0,//no base classes
+  &(vtc_cc34[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc34),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc34),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  dd34  {
+  int d;
+   dd34(); // _ZN4dd34C1Ev
+  virtual void  foo(); // _ZN4dd343fooEv
+  ~dd34(); // tgen
+};
+//SIG(-1 dd34) C1{ v1 Fi}
+
+
+ dd34 ::dd34(){ note_ctor("dd34", this);}
+void  dd34 ::foo(){vfunc_called(this, "_ZN4dd343fooEv");}
+dd34 ::~dd34(){ note_dtor("dd34", this);} // tgen
+
+static void Test_dd34()
+{
+  extern Class_Descriptor cd_dd34;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd34, buf);
+    dd34 *dp, &lv = *(dp=new (buf) dd34());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd34)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd34)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd34.d");
+    test_class_info(&lv, &cd_dd34);
+    dp->~dd34();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd34(Test_dd34, "dd34", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd34C1Ev();
+extern void _ZN4dd34D1Ev();
+Name_Map name_map_dd34[] = {
+  NSPAIR(_ZN4dd34C1Ev),
+  NSPAIR(_ZN4dd34D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd34[];
+extern void _ZN4dd343fooEv();
+static  VTBL_ENTRY vtc_dd34[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd34[0]),
+  (VTBL_ENTRY)&_ZN4dd343fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd34[];
+extern  VTBL_ENTRY _ZTV4dd34[];
+Class_Descriptor cd_dd34 = {  "dd34", // class name
+  0,0,//no base classes
+  &(vtc_dd34[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd34),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd34),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  ee34  : aa34 , virtual bb34 {
+  int e;
+   ee34(const ABISELECT(__tsi64,int) *const *); // _ZN4ee34C2Ev
+  virtual void  foo(); // _ZN4ee343fooEv
+  ~ee34(); // tgen
+  ee34(); // tgen
+};
+//SIG(-1 ee34) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee34 ::ee34(const ABISELECT(__tsi64,int) *const *){}
+void  ee34 ::foo(){vfunc_called(this, "_ZN4ee343fooEv");}
+ee34 ::~ee34(){ note_dtor("ee34", this);} // tgen
+ee34 ::ee34(){ note_ctor("ee34", this);} // tgen
+
+static void Test_ee34()
+{
+  extern Class_Descriptor cd_ee34;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee34, buf);
+    ee34 *dp, &lv = *(dp=new (buf) ee34());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee34)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee34)");
+    check_base_class_offset(lv, (aa34*), 0, "ee34");
+    check_base_class_offset(lv, (bb34*), ABISELECT(16,12), "ee34");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee34.e");
+    test_class_info(&lv, &cd_ee34);
+    dp->~ee34();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee34(Test_ee34, "ee34", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee34C1Ev();
+extern void _ZN4ee34D1Ev();
+Name_Map name_map_ee34[] = {
+  NSPAIR(_ZN4ee34C1Ev),
+  NSPAIR(_ZN4ee34D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa34;
+extern VTBL_ENTRY _ZTI4aa34[];
+extern  VTBL_ENTRY _ZTV4aa34[];
+extern Class_Descriptor cd_bb34;
+extern VTBL_ENTRY _ZTI4bb34[];
+extern  VTBL_ENTRY _ZTV4bb34[];
+static Base_Class bases_ee34[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa34,    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},
+  {&cd_bb34,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee34[];
+extern void _ZN4ee343fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee343fooEv,_ZTv0_n12_N4ee343fooEv)();
+extern void ABISELECT(_ZThn16_N4ee343fooEv,_ZThn12_N4ee343fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee34[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee34[0]),
+  (VTBL_ENTRY)&_ZN4ee343fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee34[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee343fooEv,_ZTv0_n12_N4ee343fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee34[];
+static  VTT_ENTRY vtt_ee34[] = {
+  {&(_ZTV4ee34[3]),  3,8},
+  {&(_ZTV4ee34[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee34[];
+extern  VTBL_ENTRY _ZTV4ee34[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee34[];
+static VTBL_ENTRY alt_thunk_names83[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee343fooEv,_ZTv0_n12_N4ee343fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee343fooEv,_ZThn12_N4ee343fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee34 = {  "ee34", // class name
+  bases_ee34, 2,
+  &(vtc_ee34[0]), // expected_vtbl_contents
+  &(vtt_ee34[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee34),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee34),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee34),2, //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  ff34  : cc34 , dd34 {
+  int f;
+   ff34(); // _ZN4ff34C1Ev
+  virtual void  foo(); // _ZN4ff343fooEv
+  ~ff34(); // tgen
+};
+//SIG(-1 ff34) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff34 ::ff34(){ note_ctor("ff34", this);}
+void  ff34 ::foo(){vfunc_called(this, "_ZN4ff343fooEv");}
+ff34 ::~ff34(){ note_dtor("ff34", this);} // tgen
+
+static void Test_ff34()
+{
+  extern Class_Descriptor cd_ff34;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff34, buf);
+    ff34 *dp, &lv = *(dp=new (buf) ff34());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff34)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff34)");
+    check_base_class_offset(lv, (cc34*), 0, "ff34");
+    check_base_class_offset(lv, (dd34*), ABISELECT(16,8), "ff34");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff34.f");
+    test_class_info(&lv, &cd_ff34);
+    dp->~ff34();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff34(Test_ff34, "ff34", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff34C1Ev();
+extern void _ZN4ff34D1Ev();
+Name_Map name_map_ff34[] = {
+  NSPAIR(_ZN4ff34C1Ev),
+  NSPAIR(_ZN4ff34D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc34;
+extern VTBL_ENTRY _ZTI4cc34[];
+extern  VTBL_ENTRY _ZTV4cc34[];
+extern Class_Descriptor cd_dd34;
+extern VTBL_ENTRY _ZTI4dd34[];
+extern  VTBL_ENTRY _ZTV4dd34[];
+static Base_Class bases_ff34[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc34,    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},
+  {&cd_dd34,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ff34[];
+extern void _ZN4ff343fooEv();
+extern void ABISELECT(_ZThn16_N4ff343fooEv,_ZThn8_N4ff343fooEv)();
+static  VTBL_ENTRY vtc_ff34[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff34[0]),
+  (VTBL_ENTRY)&_ZN4ff343fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff34[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ff343fooEv,_ZThn8_N4ff343fooEv),
+};
+extern VTBL_ENTRY _ZTI4ff34[];
+extern  VTBL_ENTRY _ZTV4ff34[];
+Class_Descriptor cd_ff34 = {  "ff34", // class name
+  bases_ff34, 2,
+  &(vtc_ff34[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff34),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff34),6, //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  gg34  : ee34 , virtual ff34 {
+  int g;
+   gg34(const ABISELECT(__tsi64,int) *const *); // _ZN4gg34C2Ev
+  virtual void  foo(); // _ZN4gg343fooEv
+  ~gg34(); // tgen
+  gg34(); // tgen
+};
+//SIG(1 gg34) C1{ BC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} VBC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg34 ::gg34(const ABISELECT(__tsi64,int) *const *){}
+void  gg34 ::foo(){vfunc_called(this, "_ZN4gg343fooEv");}
+gg34 ::~gg34(){ note_dtor("gg34", this);} // tgen
+gg34 ::gg34(){ note_ctor("gg34", this);} // tgen
+
+static void Test_gg34()
+{
+  extern Class_Descriptor cd_gg34;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg34, buf);
+    gg34 *dp, &lv = *(dp=new (buf) gg34());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg34)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg34)");
+    check_base_class_offset(lv, (aa34*)(ee34*), 0, "gg34");
+    check_base_class_offset(lv, (bb34*)(ee34*), ABISELECT(24,16), "gg34");
+    check_base_class_offset(lv, (ee34*), 0, "gg34");
+    check_base_class_offset(lv, (cc34*)(ff34*), ABISELECT(40,24), "gg34");
+    check_base_class_offset(lv, (dd34*)(ff34*), ABISELECT(56,32), "gg34");
+    check_base_class_offset(lv, (ff34*), ABISELECT(40,24), "gg34");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg34.g");
+    test_class_info(&lv, &cd_gg34);
+    dp->~gg34();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg34(Test_gg34, "gg34", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg34C1Ev();
+extern void _ZN4gg34D1Ev();
+Name_Map name_map_gg34[] = {
+  NSPAIR(_ZN4gg34C1Ev),
+  NSPAIR(_ZN4gg34D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa34;
+extern VTBL_ENTRY _ZTI4aa34[];
+extern  VTBL_ENTRY _ZTV4aa34[];
+extern Class_Descriptor cd_bb34;
+extern VTBL_ENTRY _ZTI4bb34[];
+extern  VTBL_ENTRY _ZTV4bb34[];
+extern Class_Descriptor cd_ee34;
+extern VTBL_ENTRY _ZTI4ee34[];
+extern  VTBL_ENTRY _ZTV4ee34[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee34[];
+extern Class_Descriptor cd_cc34;
+extern VTBL_ENTRY _ZTI4cc34[];
+extern  VTBL_ENTRY _ZTV4cc34[];
+extern Class_Descriptor cd_dd34;
+extern VTBL_ENTRY _ZTI4dd34[];
+extern  VTBL_ENTRY _ZTV4dd34[];
+extern Class_Descriptor cd_ff34;
+extern VTBL_ENTRY _ZTI4ff34[];
+extern  VTBL_ENTRY _ZTV4ff34[];
+static Base_Class bases_gg34[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa34,    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
+    5, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb34,    ABISELECT(24,16), //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_ee34,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc34,    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
+    2, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd34,    ABISELECT(56,32), //bcp->offset
+    13, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    6, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff34,    ABISELECT(40,24), //bcp->offset
+    9, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg34[];
+extern void _ZN4gg343fooEv();
+extern void ABISELECT(_ZTv0_n24_N4gg343fooEv,_ZTv0_n12_N4gg343fooEv)();
+extern void ABISELECT(_ZThn24_N4gg343fooEv,_ZThn16_N4gg343fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg343fooEv,_ZTv0_n12_N4gg343fooEv)();
+extern void ABISELECT(_ZThn40_N4gg343fooEv,_ZThn24_N4gg343fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTvn16_n24_N4gg343fooEv,_ZTvn8_n12_N4gg343fooEv)();
+static  VTBL_ENTRY vtc_gg34[] = {
+  ABISELECT(40,24),
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg34[0]),
+  (VTBL_ENTRY)&_ZN4gg343fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg34[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg343fooEv,_ZTv0_n12_N4gg343fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg34[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg343fooEv,_ZTv0_n12_N4gg343fooEv),
+  ABISELECT(-56,-32),
+  (VTBL_ENTRY)&(_ZTI4gg34[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n24_N4gg343fooEv,_ZTvn8_n12_N4gg343fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg34[];
+extern void _ZN4ee343fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee34__4gg34[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee34[0]),
+  (VTBL_ENTRY)&_ZN4ee343fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee343fooEv,_ZTv0_n12_N4ee343fooEv)();
+extern void ABISELECT(_ZThn24_N4ee343fooEv,_ZThn16_N4ee343fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb34__4ee34__4gg34[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4ee34[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee343fooEv,_ZTv0_n12_N4ee343fooEv),
+};
+static  VTT_ENTRY vtt_gg34[] = {
+  {&(_ZTV4gg34[4]),  4,16},
+  {&(_tg__ZTV4ee34__4gg34[3]),  3,4},
+  {&(_tg__ZTV4bb34__4ee34__4gg34[3]),  3,4},
+  {&(_ZTV4gg34[8]),  8,16},
+  {&(_ZTV4gg34[12]),  12,16},
+  {&(_ZTV4gg34[15]),  15,16},
+};
+extern VTBL_ENTRY _ZTI4gg34[];
+extern  VTBL_ENTRY _ZTV4gg34[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg34[];
+static VTBL_ENTRY alt_thunk_names84[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee343fooEv,_ZTv0_n12_N4ee343fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4ee343fooEv,_ZThn16_N4ee343fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg343fooEv,_ZTv0_n12_N4gg343fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg343fooEv,_ZThn24_N4gg343fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg343fooEv,_ZThn16_N4gg343fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg34 = {  "gg34", // class name
+  bases_gg34, 6,
+  &(vtc_gg34[0]), // expected_vtbl_contents
+  &(vtt_gg34[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg34),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg34),16, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg34),6, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names84,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa35  {
+  int a;
+   aa35(); // _ZN4aa35C1Ev
+  virtual void  foo(); // _ZN4aa353fooEv
+  ~aa35(); // tgen
+};
+//SIG(-1 aa35) C1{ v1 Fi}
+
+
+ aa35 ::aa35(){ note_ctor("aa35", this);}
+void  aa35 ::foo(){vfunc_called(this, "_ZN4aa353fooEv");}
+aa35 ::~aa35(){ note_dtor("aa35", this);} // tgen
+
+static void Test_aa35()
+{
+  extern Class_Descriptor cd_aa35;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa35, buf);
+    aa35 *dp, &lv = *(dp=new (buf) aa35());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa35)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa35)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa35.a");
+    test_class_info(&lv, &cd_aa35);
+    dp->~aa35();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa35(Test_aa35, "aa35", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa35C1Ev();
+extern void _ZN4aa35D1Ev();
+Name_Map name_map_aa35[] = {
+  NSPAIR(_ZN4aa35C1Ev),
+  NSPAIR(_ZN4aa35D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa35[];
+extern void _ZN4aa353fooEv();
+static  VTBL_ENTRY vtc_aa35[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa35[0]),
+  (VTBL_ENTRY)&_ZN4aa353fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa35[];
+extern  VTBL_ENTRY _ZTV4aa35[];
+Class_Descriptor cd_aa35 = {  "aa35", // class name
+  0,0,//no base classes
+  &(vtc_aa35[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa35),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa35),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  bb35  {
+  int b;
+   bb35(); // _ZN4bb35C1Ev
+  virtual void  foo(); // _ZN4bb353fooEv
+  ~bb35(); // tgen
+};
+//SIG(-1 bb35) C1{ v1 Fi}
+
+
+ bb35 ::bb35(){ note_ctor("bb35", this);}
+void  bb35 ::foo(){vfunc_called(this, "_ZN4bb353fooEv");}
+bb35 ::~bb35(){ note_dtor("bb35", this);} // tgen
+
+static void Test_bb35()
+{
+  extern Class_Descriptor cd_bb35;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb35, buf);
+    bb35 *dp, &lv = *(dp=new (buf) bb35());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb35)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb35)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb35.b");
+    test_class_info(&lv, &cd_bb35);
+    dp->~bb35();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb35(Test_bb35, "bb35", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb35C1Ev();
+extern void _ZN4bb35D1Ev();
+Name_Map name_map_bb35[] = {
+  NSPAIR(_ZN4bb35C1Ev),
+  NSPAIR(_ZN4bb35D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb35[];
+extern void _ZN4bb353fooEv();
+static  VTBL_ENTRY vtc_bb35[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb35[0]),
+  (VTBL_ENTRY)&_ZN4bb353fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb35[];
+extern  VTBL_ENTRY _ZTV4bb35[];
+Class_Descriptor cd_bb35 = {  "bb35", // class name
+  0,0,//no base classes
+  &(vtc_bb35[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb35),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb35),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  cc35  {
+  int c;
+   cc35(); // _ZN4cc35C1Ev
+  virtual void  foo(); // _ZN4cc353fooEv
+  ~cc35(); // tgen
+};
+//SIG(-1 cc35) C1{ v1 Fi}
+
+
+ cc35 ::cc35(){ note_ctor("cc35", this);}
+void  cc35 ::foo(){vfunc_called(this, "_ZN4cc353fooEv");}
+cc35 ::~cc35(){ note_dtor("cc35", this);} // tgen
+
+static void Test_cc35()
+{
+  extern Class_Descriptor cd_cc35;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc35, buf);
+    cc35 *dp, &lv = *(dp=new (buf) cc35());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc35)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc35)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc35.c");
+    test_class_info(&lv, &cd_cc35);
+    dp->~cc35();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc35(Test_cc35, "cc35", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc35C1Ev();
+extern void _ZN4cc35D1Ev();
+Name_Map name_map_cc35[] = {
+  NSPAIR(_ZN4cc35C1Ev),
+  NSPAIR(_ZN4cc35D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc35[];
+extern void _ZN4cc353fooEv();
+static  VTBL_ENTRY vtc_cc35[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc35[0]),
+  (VTBL_ENTRY)&_ZN4cc353fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc35[];
+extern  VTBL_ENTRY _ZTV4cc35[];
+Class_Descriptor cd_cc35 = {  "cc35", // class name
+  0,0,//no base classes
+  &(vtc_cc35[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc35),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc35),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  dd35  {
+  int d;
+   dd35(); // _ZN4dd35C1Ev
+  virtual void  foo(); // _ZN4dd353fooEv
+  ~dd35(); // tgen
+};
+//SIG(-1 dd35) C1{ v1 Fi}
+
+
+ dd35 ::dd35(){ note_ctor("dd35", this);}
+void  dd35 ::foo(){vfunc_called(this, "_ZN4dd353fooEv");}
+dd35 ::~dd35(){ note_dtor("dd35", this);} // tgen
+
+static void Test_dd35()
+{
+  extern Class_Descriptor cd_dd35;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd35, buf);
+    dd35 *dp, &lv = *(dp=new (buf) dd35());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd35)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd35)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd35.d");
+    test_class_info(&lv, &cd_dd35);
+    dp->~dd35();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd35(Test_dd35, "dd35", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd35C1Ev();
+extern void _ZN4dd35D1Ev();
+Name_Map name_map_dd35[] = {
+  NSPAIR(_ZN4dd35C1Ev),
+  NSPAIR(_ZN4dd35D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd35[];
+extern void _ZN4dd353fooEv();
+static  VTBL_ENTRY vtc_dd35[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd35[0]),
+  (VTBL_ENTRY)&_ZN4dd353fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd35[];
+extern  VTBL_ENTRY _ZTV4dd35[];
+Class_Descriptor cd_dd35 = {  "dd35", // class name
+  0,0,//no base classes
+  &(vtc_dd35[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd35),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd35),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  ee35  : virtual aa35 , virtual bb35 {
+  int e;
+   ee35(const ABISELECT(__tsi64,int) *const *); // _ZN4ee35C2Ev
+  virtual void  foo(); // _ZN4ee353fooEv
+  ~ee35(); // tgen
+  ee35(); // tgen
+};
+//SIG(-1 ee35) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee35 ::ee35(const ABISELECT(__tsi64,int) *const *){}
+void  ee35 ::foo(){vfunc_called(this, "_ZN4ee353fooEv");}
+ee35 ::~ee35(){ note_dtor("ee35", this);} // tgen
+ee35 ::ee35(){ note_ctor("ee35", this);} // tgen
+
+static void Test_ee35()
+{
+  extern Class_Descriptor cd_ee35;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee35, buf);
+    ee35 *dp, &lv = *(dp=new (buf) ee35());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee35)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee35)");
+    check_base_class_offset(lv, (aa35*), ABISELECT(16,8), "ee35");
+    check_base_class_offset(lv, (bb35*), ABISELECT(32,16), "ee35");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee35.e");
+    test_class_info(&lv, &cd_ee35);
+    dp->~ee35();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee35(Test_ee35, "ee35", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ee35C1Ev();
+extern void _ZN4ee35D1Ev();
+Name_Map name_map_ee35[] = {
+  NSPAIR(_ZN4ee35C1Ev),
+  NSPAIR(_ZN4ee35D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa35;
+extern VTBL_ENTRY _ZTI4aa35[];
+extern  VTBL_ENTRY _ZTV4aa35[];
+extern Class_Descriptor cd_bb35;
+extern VTBL_ENTRY _ZTI4bb35[];
+extern  VTBL_ENTRY _ZTV4bb35[];
+static Base_Class bases_ee35[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa35,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb35,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee35[];
+extern void _ZN4ee353fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv)();
+extern void ABISELECT(_ZThn16_N4ee353fooEv,_ZThn8_N4ee353fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv)();
+extern void ABISELECT(_ZThn32_N4ee353fooEv,_ZThn16_N4ee353fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee35[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee35[0]),
+  (VTBL_ENTRY)&_ZN4ee353fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee35[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee35[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee35[];
+static  VTT_ENTRY vtt_ee35[] = {
+  {&(_ZTV4ee35[4]),  4,13},
+  {&(_ZTV4ee35[8]),  8,13},
+  {&(_ZTV4ee35[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ee35[];
+extern  VTBL_ENTRY _ZTV4ee35[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee35[];
+static VTBL_ENTRY alt_thunk_names85[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee353fooEv,_ZThn16_N4ee353fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee353fooEv,_ZThn8_N4ee353fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee35 = {  "ee35", // class name
+  bases_ee35, 2,
+  &(vtc_ee35[0]), // expected_vtbl_contents
+  &(vtt_ee35[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ee35),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee35),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee35),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names85,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff35  : cc35 , dd35 {
+  int f;
+   ff35(); // _ZN4ff35C1Ev
+  virtual void  foo(); // _ZN4ff353fooEv
+  ~ff35(); // tgen
+};
+//SIG(-1 ff35) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff35 ::ff35(){ note_ctor("ff35", this);}
+void  ff35 ::foo(){vfunc_called(this, "_ZN4ff353fooEv");}
+ff35 ::~ff35(){ note_dtor("ff35", this);} // tgen
+
+static void Test_ff35()
+{
+  extern Class_Descriptor cd_ff35;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff35, buf);
+    ff35 *dp, &lv = *(dp=new (buf) ff35());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff35)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff35)");
+    check_base_class_offset(lv, (cc35*), 0, "ff35");
+    check_base_class_offset(lv, (dd35*), ABISELECT(16,8), "ff35");
+    check_field_offset(lv, f, ABISELECT(28,16), "ff35.f");
+    test_class_info(&lv, &cd_ff35);
+    dp->~ff35();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff35(Test_ff35, "ff35", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff35C1Ev();
+extern void _ZN4ff35D1Ev();
+Name_Map name_map_ff35[] = {
+  NSPAIR(_ZN4ff35C1Ev),
+  NSPAIR(_ZN4ff35D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc35;
+extern VTBL_ENTRY _ZTI4cc35[];
+extern  VTBL_ENTRY _ZTV4cc35[];
+extern Class_Descriptor cd_dd35;
+extern VTBL_ENTRY _ZTI4dd35[];
+extern  VTBL_ENTRY _ZTV4dd35[];
+static Base_Class bases_ff35[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc35,    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},
+  {&cd_dd35,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ff35[];
+extern void _ZN4ff353fooEv();
+extern void ABISELECT(_ZThn16_N4ff353fooEv,_ZThn8_N4ff353fooEv)();
+static  VTBL_ENTRY vtc_ff35[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff35[0]),
+  (VTBL_ENTRY)&_ZN4ff353fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ff35[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ff353fooEv,_ZThn8_N4ff353fooEv),
+};
+extern VTBL_ENTRY _ZTI4ff35[];
+extern  VTBL_ENTRY _ZTV4ff35[];
+Class_Descriptor cd_ff35 = {  "ff35", // class name
+  bases_ff35, 2,
+  &(vtc_ff35[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff35),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff35),6, //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  gg35  : ee35 , virtual ff35 {
+  int g;
+   gg35(const ABISELECT(__tsi64,int) *const *); // _ZN4gg35C2Ev
+  virtual void  foo(); // _ZN4gg353fooEv
+  ~gg35(); // tgen
+  gg35(); // tgen
+};
+//SIG(1 gg35) C1{ BC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} VBC5{ BC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg35 ::gg35(const ABISELECT(__tsi64,int) *const *){}
+void  gg35 ::foo(){vfunc_called(this, "_ZN4gg353fooEv");}
+gg35 ::~gg35(){ note_dtor("gg35", this);} // tgen
+gg35 ::gg35(){ note_ctor("gg35", this);} // tgen
+
+static void Test_gg35()
+{
+  extern Class_Descriptor cd_gg35;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(11,13)];
+    init_test(&cd_gg35, buf);
+    gg35 *dp, &lv = *(dp=new (buf) gg35());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(80,48), "sizeof(gg35)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg35)");
+    check_base_class_offset(lv, (aa35*)(ee35*), ABISELECT(16,12), "gg35");
+    check_base_class_offset(lv, (bb35*)(ee35*), ABISELECT(32,20), "gg35");
+    check_base_class_offset(lv, (ee35*), 0, "gg35");
+    check_base_class_offset(lv, (cc35*)(ff35*), ABISELECT(48,28), "gg35");
+    check_base_class_offset(lv, (dd35*)(ff35*), ABISELECT(64,36), "gg35");
+    check_base_class_offset(lv, (ff35*), ABISELECT(48,28), "gg35");
+    check_field_offset(lv, g, ABISELECT(12,8), "gg35.g");
+    test_class_info(&lv, &cd_gg35);
+    dp->~gg35();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg35(Test_gg35, "gg35", ABISELECT(80,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg35C1Ev();
+extern void _ZN4gg35D1Ev();
+Name_Map name_map_gg35[] = {
+  NSPAIR(_ZN4gg35C1Ev),
+  NSPAIR(_ZN4gg35D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa35;
+extern VTBL_ENTRY _ZTI4aa35[];
+extern  VTBL_ENTRY _ZTV4aa35[];
+extern Class_Descriptor cd_bb35;
+extern VTBL_ENTRY _ZTI4bb35[];
+extern  VTBL_ENTRY _ZTV4bb35[];
+extern Class_Descriptor cd_ee35;
+extern VTBL_ENTRY _ZTI4ee35[];
+extern  VTBL_ENTRY _ZTV4ee35[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee35[];
+extern Class_Descriptor cd_cc35;
+extern VTBL_ENTRY _ZTI4cc35[];
+extern  VTBL_ENTRY _ZTV4cc35[];
+extern Class_Descriptor cd_dd35;
+extern VTBL_ENTRY _ZTI4dd35[];
+extern  VTBL_ENTRY _ZTV4dd35[];
+extern Class_Descriptor cd_ff35;
+extern VTBL_ENTRY _ZTI4ff35[];
+extern  VTBL_ENTRY _ZTV4ff35[];
+static Base_Class bases_gg35[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa35,    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
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb35,    ABISELECT(32,20), //bcp->offset
+    10, //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
+    2, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee35,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc35,    ABISELECT(48,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
+    3, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd35,    ABISELECT(64,36), //bcp->offset
+    18, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff35,    ABISELECT(48,28), //bcp->offset
+    14, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg35[];
+extern void _ZN4gg353fooEv();
+extern void ABISELECT(_ZTv0_n24_N4gg353fooEv,_ZTv0_n12_N4gg353fooEv)();
+extern void ABISELECT(_ZThn16_N4gg353fooEv,_ZThn12_N4gg353fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg353fooEv,_ZTv0_n12_N4gg353fooEv)();
+extern void ABISELECT(_ZThn32_N4gg353fooEv,_ZThn20_N4gg353fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg353fooEv,_ZTv0_n12_N4gg353fooEv)();
+extern void ABISELECT(_ZThn48_N4gg353fooEv,_ZThn28_N4gg353fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTvn16_n24_N4gg353fooEv,_ZTvn8_n12_N4gg353fooEv)();
+static  VTBL_ENTRY vtc_gg35[] = {
+  ABISELECT(48,28),
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg35[0]),
+  (VTBL_ENTRY)&_ZN4gg353fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4gg35[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg353fooEv,_ZTv0_n12_N4gg353fooEv),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4gg35[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg353fooEv,_ZTv0_n12_N4gg353fooEv),
+  ABISELECT(-48,-28),
+  ABISELECT(-48,-28),
+  (VTBL_ENTRY)&(_ZTI4gg35[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg353fooEv,_ZTv0_n12_N4gg353fooEv),
+  ABISELECT(-64,-36),
+  (VTBL_ENTRY)&(_ZTI4gg35[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n24_N4gg353fooEv,_ZTvn8_n12_N4gg353fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg35[];
+extern void _ZN4ee353fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee35__4gg35[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee35[0]),
+  (VTBL_ENTRY)&_ZN4ee353fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv)();
+extern void ABISELECT(_ZThn16_N4ee353fooEv,_ZThn12_N4ee353fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa35__4ee35__4gg35[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee35[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv)();
+extern void ABISELECT(_ZThn32_N4ee353fooEv,_ZThn20_N4ee353fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb35__4ee35__4gg35[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4ee35[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv),
+};
+static  VTT_ENTRY vtt_gg35[] = {
+  {&(_ZTV4gg35[5]),  5,21},
+  {&(_tg__ZTV4ee35__4gg35[4]),  4,5},
+  {&(_tg__ZTV4aa35__4ee35__4gg35[3]),  3,4},
+  {&(_tg__ZTV4bb35__4ee35__4gg35[3]),  3,4},
+  {&(_ZTV4gg35[9]),  9,21},
+  {&(_ZTV4gg35[13]),  13,21},
+  {&(_ZTV4gg35[17]),  17,21},
+  {&(_ZTV4gg35[20]),  20,21},
+};
+extern VTBL_ENTRY _ZTI4gg35[];
+extern  VTBL_ENTRY _ZTV4gg35[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg35[];
+static VTBL_ENTRY alt_thunk_names86[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee353fooEv,_ZTv0_n12_N4ee353fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee353fooEv,_ZThn20_N4ee353fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee353fooEv,_ZThn12_N4ee353fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg353fooEv,_ZTv0_n12_N4gg353fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg353fooEv,_ZThn28_N4gg353fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4gg353fooEv,_ZThn20_N4gg353fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4gg353fooEv,_ZThn12_N4gg353fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg35 = {  "gg35", // class name
+  bases_gg35, 6,
+  &(vtc_gg35[0]), // expected_vtbl_contents
+  &(vtt_gg35[0]), // expected_vtt_contents
+  ABISELECT(80,48), // object size
+  NSPAIRA(_ZTI4gg35),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg35),21, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg35),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names86,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa36  {
+  int a;
+   aa36(); // _ZN4aa36C1Ev
+  virtual void  foo(); // _ZN4aa363fooEv
+  ~aa36(); // tgen
+};
+//SIG(-1 aa36) C1{ v1 Fi}
+
+
+ aa36 ::aa36(){ note_ctor("aa36", this);}
+void  aa36 ::foo(){vfunc_called(this, "_ZN4aa363fooEv");}
+aa36 ::~aa36(){ note_dtor("aa36", this);} // tgen
+
+static void Test_aa36()
+{
+  extern Class_Descriptor cd_aa36;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa36, buf);
+    aa36 *dp, &lv = *(dp=new (buf) aa36());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa36)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa36)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa36.a");
+    test_class_info(&lv, &cd_aa36);
+    dp->~aa36();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa36(Test_aa36, "aa36", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa36C1Ev();
+extern void _ZN4aa36D1Ev();
+Name_Map name_map_aa36[] = {
+  NSPAIR(_ZN4aa36C1Ev),
+  NSPAIR(_ZN4aa36D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa36[];
+extern void _ZN4aa363fooEv();
+static  VTBL_ENTRY vtc_aa36[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa36[0]),
+  (VTBL_ENTRY)&_ZN4aa363fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa36[];
+extern  VTBL_ENTRY _ZTV4aa36[];
+Class_Descriptor cd_aa36 = {  "aa36", // class name
+  0,0,//no base classes
+  &(vtc_aa36[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa36),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa36),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  bb36  {
+  int b;
+   bb36(); // _ZN4bb36C1Ev
+  virtual void  foo(); // _ZN4bb363fooEv
+  ~bb36(); // tgen
+};
+//SIG(-1 bb36) C1{ v1 Fi}
+
+
+ bb36 ::bb36(){ note_ctor("bb36", this);}
+void  bb36 ::foo(){vfunc_called(this, "_ZN4bb363fooEv");}
+bb36 ::~bb36(){ note_dtor("bb36", this);} // tgen
+
+static void Test_bb36()
+{
+  extern Class_Descriptor cd_bb36;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb36, buf);
+    bb36 *dp, &lv = *(dp=new (buf) bb36());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb36)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb36)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb36.b");
+    test_class_info(&lv, &cd_bb36);
+    dp->~bb36();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb36(Test_bb36, "bb36", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb36C1Ev();
+extern void _ZN4bb36D1Ev();
+Name_Map name_map_bb36[] = {
+  NSPAIR(_ZN4bb36C1Ev),
+  NSPAIR(_ZN4bb36D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb36[];
+extern void _ZN4bb363fooEv();
+static  VTBL_ENTRY vtc_bb36[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb36[0]),
+  (VTBL_ENTRY)&_ZN4bb363fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb36[];
+extern  VTBL_ENTRY _ZTV4bb36[];
+Class_Descriptor cd_bb36 = {  "bb36", // class name
+  0,0,//no base classes
+  &(vtc_bb36[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb36),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb36),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  cc36  {
+  int c;
+   cc36(); // _ZN4cc36C1Ev
+  virtual void  foo(); // _ZN4cc363fooEv
+  ~cc36(); // tgen
+};
+//SIG(-1 cc36) C1{ v1 Fi}
+
+
+ cc36 ::cc36(){ note_ctor("cc36", this);}
+void  cc36 ::foo(){vfunc_called(this, "_ZN4cc363fooEv");}
+cc36 ::~cc36(){ note_dtor("cc36", this);} // tgen
+
+static void Test_cc36()
+{
+  extern Class_Descriptor cd_cc36;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc36, buf);
+    cc36 *dp, &lv = *(dp=new (buf) cc36());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc36)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc36)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc36.c");
+    test_class_info(&lv, &cd_cc36);
+    dp->~cc36();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc36(Test_cc36, "cc36", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc36C1Ev();
+extern void _ZN4cc36D1Ev();
+Name_Map name_map_cc36[] = {
+  NSPAIR(_ZN4cc36C1Ev),
+  NSPAIR(_ZN4cc36D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc36[];
+extern void _ZN4cc363fooEv();
+static  VTBL_ENTRY vtc_cc36[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc36[0]),
+  (VTBL_ENTRY)&_ZN4cc363fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc36[];
+extern  VTBL_ENTRY _ZTV4cc36[];
+Class_Descriptor cd_cc36 = {  "cc36", // class name
+  0,0,//no base classes
+  &(vtc_cc36[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc36),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc36),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  dd36  {
+  int d;
+   dd36(); // _ZN4dd36C1Ev
+  virtual void  foo(); // _ZN4dd363fooEv
+  ~dd36(); // tgen
+};
+//SIG(-1 dd36) C1{ v1 Fi}
+
+
+ dd36 ::dd36(){ note_ctor("dd36", this);}
+void  dd36 ::foo(){vfunc_called(this, "_ZN4dd363fooEv");}
+dd36 ::~dd36(){ note_dtor("dd36", this);} // tgen
+
+static void Test_dd36()
+{
+  extern Class_Descriptor cd_dd36;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd36, buf);
+    dd36 *dp, &lv = *(dp=new (buf) dd36());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd36)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd36)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd36.d");
+    test_class_info(&lv, &cd_dd36);
+    dp->~dd36();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd36(Test_dd36, "dd36", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd36C1Ev();
+extern void _ZN4dd36D1Ev();
+Name_Map name_map_dd36[] = {
+  NSPAIR(_ZN4dd36C1Ev),
+  NSPAIR(_ZN4dd36D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd36[];
+extern void _ZN4dd363fooEv();
+static  VTBL_ENTRY vtc_dd36[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd36[0]),
+  (VTBL_ENTRY)&_ZN4dd363fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd36[];
+extern  VTBL_ENTRY _ZTV4dd36[];
+Class_Descriptor cd_dd36 = {  "dd36", // class name
+  0,0,//no base classes
+  &(vtc_dd36[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd36),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd36),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  ee36  : aa36 , bb36 {
+  int e;
+   ee36(); // _ZN4ee36C1Ev
+  virtual void  foo(); // _ZN4ee363fooEv
+  ~ee36(); // tgen
+};
+//SIG(-1 ee36) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee36 ::ee36(){ note_ctor("ee36", this);}
+void  ee36 ::foo(){vfunc_called(this, "_ZN4ee363fooEv");}
+ee36 ::~ee36(){ note_dtor("ee36", this);} // tgen
+
+static void Test_ee36()
+{
+  extern Class_Descriptor cd_ee36;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee36, buf);
+    ee36 *dp, &lv = *(dp=new (buf) ee36());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee36)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee36)");
+    check_base_class_offset(lv, (aa36*), 0, "ee36");
+    check_base_class_offset(lv, (bb36*), ABISELECT(16,8), "ee36");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee36.e");
+    test_class_info(&lv, &cd_ee36);
+    dp->~ee36();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee36(Test_ee36, "ee36", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee36C1Ev();
+extern void _ZN4ee36D1Ev();
+Name_Map name_map_ee36[] = {
+  NSPAIR(_ZN4ee36C1Ev),
+  NSPAIR(_ZN4ee36D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa36;
+extern VTBL_ENTRY _ZTI4aa36[];
+extern  VTBL_ENTRY _ZTV4aa36[];
+extern Class_Descriptor cd_bb36;
+extern VTBL_ENTRY _ZTI4bb36[];
+extern  VTBL_ENTRY _ZTV4bb36[];
+static Base_Class bases_ee36[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa36,    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},
+  {&cd_bb36,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ee36[];
+extern void _ZN4ee363fooEv();
+extern void ABISELECT(_ZThn16_N4ee363fooEv,_ZThn8_N4ee363fooEv)();
+static  VTBL_ENTRY vtc_ee36[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee36[0]),
+  (VTBL_ENTRY)&_ZN4ee363fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee36[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ee363fooEv,_ZThn8_N4ee363fooEv),
+};
+extern VTBL_ENTRY _ZTI4ee36[];
+extern  VTBL_ENTRY _ZTV4ee36[];
+Class_Descriptor cd_ee36 = {  "ee36", // class name
+  bases_ee36, 2,
+  &(vtc_ee36[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee36),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee36),6, //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  ff36  : virtual cc36 , dd36 {
+  int f;
+   ff36(const ABISELECT(__tsi64,int) *const *); // _ZN4ff36C2Ev
+  virtual void  foo(); // _ZN4ff363fooEv
+  ~ff36(); // tgen
+  ff36(); // tgen
+};
+//SIG(-1 ff36) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff36 ::ff36(const ABISELECT(__tsi64,int) *const *){}
+void  ff36 ::foo(){vfunc_called(this, "_ZN4ff363fooEv");}
+ff36 ::~ff36(){ note_dtor("ff36", this);} // tgen
+ff36 ::ff36(){ note_ctor("ff36", this);} // tgen
+
+static void Test_ff36()
+{
+  extern Class_Descriptor cd_ff36;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff36, buf);
+    ff36 *dp, &lv = *(dp=new (buf) ff36());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff36)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff36)");
+    check_base_class_offset(lv, (cc36*), ABISELECT(16,12), "ff36");
+    check_base_class_offset(lv, (dd36*), 0, "ff36");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff36.f");
+    test_class_info(&lv, &cd_ff36);
+    dp->~ff36();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff36(Test_ff36, "ff36", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff36C1Ev();
+extern void _ZN4ff36D1Ev();
+Name_Map name_map_ff36[] = {
+  NSPAIR(_ZN4ff36C1Ev),
+  NSPAIR(_ZN4ff36D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc36;
+extern VTBL_ENTRY _ZTI4cc36[];
+extern  VTBL_ENTRY _ZTV4cc36[];
+extern Class_Descriptor cd_dd36;
+extern VTBL_ENTRY _ZTI4dd36[];
+extern  VTBL_ENTRY _ZTV4dd36[];
+static Base_Class bases_ff36[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc36,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd36,    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 _ZTI4ff36[];
+extern void _ZN4ff363fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff363fooEv,_ZTv0_n12_N4ff363fooEv)();
+extern void ABISELECT(_ZThn16_N4ff363fooEv,_ZThn12_N4ff363fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff36[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff36[0]),
+  (VTBL_ENTRY)&_ZN4ff363fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff36[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff363fooEv,_ZTv0_n12_N4ff363fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff36[];
+static  VTT_ENTRY vtt_ff36[] = {
+  {&(_ZTV4ff36[3]),  3,8},
+  {&(_ZTV4ff36[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff36[];
+extern  VTBL_ENTRY _ZTV4ff36[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff36[];
+static VTBL_ENTRY alt_thunk_names87[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff363fooEv,_ZTv0_n12_N4ff363fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff363fooEv,_ZThn12_N4ff363fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff36 = {  "ff36", // class name
+  bases_ff36, 2,
+  &(vtc_ff36[0]), // expected_vtbl_contents
+  &(vtt_ff36[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff36),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff36),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff36),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names87,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg36  : ee36 , virtual ff36 {
+  int g;
+   gg36(const ABISELECT(__tsi64,int) *const *); // _ZN4gg36C2Ev
+  virtual void  foo(); // _ZN4gg363fooEv
+  ~gg36(); // tgen
+  gg36(); // tgen
+};
+//SIG(1 gg36) C1{ BC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} VBC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg36 ::gg36(const ABISELECT(__tsi64,int) *const *){}
+void  gg36 ::foo(){vfunc_called(this, "_ZN4gg363fooEv");}
+gg36 ::~gg36(){ note_dtor("gg36", this);} // tgen
+gg36 ::gg36(){ note_ctor("gg36", this);} // tgen
+
+static void Test_gg36()
+{
+  extern Class_Descriptor cd_gg36;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg36, buf);
+    gg36 *dp, &lv = *(dp=new (buf) gg36());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg36)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg36)");
+    check_base_class_offset(lv, (aa36*)(ee36*), 0, "gg36");
+    check_base_class_offset(lv, (bb36*)(ee36*), ABISELECT(16,8), "gg36");
+    check_base_class_offset(lv, (ee36*), 0, "gg36");
+    check_base_class_offset(lv, (cc36*)(ff36*), ABISELECT(56,36), "gg36");
+    check_base_class_offset(lv, (dd36*)(ff36*), ABISELECT(40,24), "gg36");
+    check_base_class_offset(lv, (ff36*), ABISELECT(40,24), "gg36");
+    check_field_offset(lv, g, ABISELECT(32,20), "gg36.g");
+    test_class_info(&lv, &cd_gg36);
+    dp->~gg36();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg36(Test_gg36, "gg36", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg36C1Ev();
+extern void _ZN4gg36D1Ev();
+Name_Map name_map_gg36[] = {
+  NSPAIR(_ZN4gg36C1Ev),
+  NSPAIR(_ZN4gg36D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa36;
+extern VTBL_ENTRY _ZTI4aa36[];
+extern  VTBL_ENTRY _ZTV4aa36[];
+extern Class_Descriptor cd_bb36;
+extern VTBL_ENTRY _ZTI4bb36[];
+extern  VTBL_ENTRY _ZTV4bb36[];
+extern Class_Descriptor cd_ee36;
+extern VTBL_ENTRY _ZTI4ee36[];
+extern  VTBL_ENTRY _ZTV4ee36[];
+extern Class_Descriptor cd_cc36;
+extern VTBL_ENTRY _ZTI4cc36[];
+extern  VTBL_ENTRY _ZTV4cc36[];
+extern Class_Descriptor cd_dd36;
+extern VTBL_ENTRY _ZTI4dd36[];
+extern  VTBL_ENTRY _ZTV4dd36[];
+extern Class_Descriptor cd_ff36;
+extern VTBL_ENTRY _ZTI4ff36[];
+extern  VTBL_ENTRY _ZTV4ff36[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff36[];
+static Base_Class bases_gg36[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa36,    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
+    4, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb36,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee36,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc36,    ABISELECT(56,36), //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
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd36,    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
+    2, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff36,    ABISELECT(40,24), //bcp->offset
+    8, //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 _ZTI4gg36[];
+extern void _ZN4gg363fooEv();
+extern void ABISELECT(_ZThn16_N4gg363fooEv,_ZThn8_N4gg363fooEv)();
+extern void ABISELECT(_ZTv0_n32_N4gg363fooEv,_ZTv0_n16_N4gg363fooEv)();
+extern void ABISELECT(_ZThn40_N4gg363fooEv,_ZThn24_N4gg363fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg363fooEv,_ZTv0_n12_N4gg363fooEv)();
+extern void ABISELECT(_ZThn56_N4gg363fooEv,_ZThn36_N4gg363fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg36[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg36[0]),
+  (VTBL_ENTRY)&_ZN4gg363fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg36[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg363fooEv,_ZThn8_N4gg363fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(16,12),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg36[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg363fooEv,_ZTv0_n16_N4gg363fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg36[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg363fooEv,_ZTv0_n12_N4gg363fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg36[];
+extern void _ZN4ff363fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff36__4gg36[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff36[0]),
+  (VTBL_ENTRY)&_ZN4ff363fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff363fooEv,_ZTv0_n12_N4ff363fooEv)();
+extern void ABISELECT(_ZThn16_N4ff363fooEv,_ZThn12_N4ff363fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc36__4ff36__4gg36[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff36[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff363fooEv,_ZTv0_n12_N4ff363fooEv),
+};
+static  VTT_ENTRY vtt_gg36[] = {
+  {&(_ZTV4gg36[4]),  4,17},
+  {&(_ZTV4gg36[12]),  12,17},
+  {&(_ZTV4gg36[16]),  16,17},
+  {&(_tg__ZTV4ff36__4gg36[3]),  3,4},
+  {&(_tg__ZTV4cc36__4ff36__4gg36[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg36[];
+extern  VTBL_ENTRY _ZTV4gg36[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg36[];
+static VTBL_ENTRY alt_thunk_names88[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff363fooEv,_ZTv0_n12_N4ff363fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff363fooEv,_ZThn12_N4ff363fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg363fooEv,_ZTv0_n12_N4gg363fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg363fooEv,_ZThn36_N4gg363fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg363fooEv,_ZTv0_n16_N4gg363fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg363fooEv,_ZThn24_N4gg363fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg36 = {  "gg36", // class name
+  bases_gg36, 6,
+  &(vtc_gg36[0]), // expected_vtbl_contents
+  &(vtt_gg36[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg36),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg36),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg36),5, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names88,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa37  {
+  int a;
+   aa37(); // _ZN4aa37C1Ev
+  virtual void  foo(); // _ZN4aa373fooEv
+  ~aa37(); // tgen
+};
+//SIG(-1 aa37) C1{ v1 Fi}
+
+
+ aa37 ::aa37(){ note_ctor("aa37", this);}
+void  aa37 ::foo(){vfunc_called(this, "_ZN4aa373fooEv");}
+aa37 ::~aa37(){ note_dtor("aa37", this);} // tgen
+
+static void Test_aa37()
+{
+  extern Class_Descriptor cd_aa37;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa37, buf);
+    aa37 *dp, &lv = *(dp=new (buf) aa37());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa37)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa37)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa37.a");
+    test_class_info(&lv, &cd_aa37);
+    dp->~aa37();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa37(Test_aa37, "aa37", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa37C1Ev();
+extern void _ZN4aa37D1Ev();
+Name_Map name_map_aa37[] = {
+  NSPAIR(_ZN4aa37C1Ev),
+  NSPAIR(_ZN4aa37D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa37[];
+extern void _ZN4aa373fooEv();
+static  VTBL_ENTRY vtc_aa37[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa37[0]),
+  (VTBL_ENTRY)&_ZN4aa373fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa37[];
+extern  VTBL_ENTRY _ZTV4aa37[];
+Class_Descriptor cd_aa37 = {  "aa37", // class name
+  0,0,//no base classes
+  &(vtc_aa37[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa37),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa37),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  bb37  {
+  int b;
+   bb37(); // _ZN4bb37C1Ev
+  virtual void  foo(); // _ZN4bb373fooEv
+  ~bb37(); // tgen
+};
+//SIG(-1 bb37) C1{ v1 Fi}
+
+
+ bb37 ::bb37(){ note_ctor("bb37", this);}
+void  bb37 ::foo(){vfunc_called(this, "_ZN4bb373fooEv");}
+bb37 ::~bb37(){ note_dtor("bb37", this);} // tgen
+
+static void Test_bb37()
+{
+  extern Class_Descriptor cd_bb37;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb37, buf);
+    bb37 *dp, &lv = *(dp=new (buf) bb37());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb37)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb37)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb37.b");
+    test_class_info(&lv, &cd_bb37);
+    dp->~bb37();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb37(Test_bb37, "bb37", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb37C1Ev();
+extern void _ZN4bb37D1Ev();
+Name_Map name_map_bb37[] = {
+  NSPAIR(_ZN4bb37C1Ev),
+  NSPAIR(_ZN4bb37D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb37[];
+extern void _ZN4bb373fooEv();
+static  VTBL_ENTRY vtc_bb37[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb37[0]),
+  (VTBL_ENTRY)&_ZN4bb373fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb37[];
+extern  VTBL_ENTRY _ZTV4bb37[];
+Class_Descriptor cd_bb37 = {  "bb37", // class name
+  0,0,//no base classes
+  &(vtc_bb37[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb37),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb37),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  cc37  {
+  int c;
+   cc37(); // _ZN4cc37C1Ev
+  virtual void  foo(); // _ZN4cc373fooEv
+  ~cc37(); // tgen
+};
+//SIG(-1 cc37) C1{ v1 Fi}
+
+
+ cc37 ::cc37(){ note_ctor("cc37", this);}
+void  cc37 ::foo(){vfunc_called(this, "_ZN4cc373fooEv");}
+cc37 ::~cc37(){ note_dtor("cc37", this);} // tgen
+
+static void Test_cc37()
+{
+  extern Class_Descriptor cd_cc37;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc37, buf);
+    cc37 *dp, &lv = *(dp=new (buf) cc37());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc37)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc37)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc37.c");
+    test_class_info(&lv, &cd_cc37);
+    dp->~cc37();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc37(Test_cc37, "cc37", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc37C1Ev();
+extern void _ZN4cc37D1Ev();
+Name_Map name_map_cc37[] = {
+  NSPAIR(_ZN4cc37C1Ev),
+  NSPAIR(_ZN4cc37D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc37[];
+extern void _ZN4cc373fooEv();
+static  VTBL_ENTRY vtc_cc37[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc37[0]),
+  (VTBL_ENTRY)&_ZN4cc373fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc37[];
+extern  VTBL_ENTRY _ZTV4cc37[];
+Class_Descriptor cd_cc37 = {  "cc37", // class name
+  0,0,//no base classes
+  &(vtc_cc37[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc37),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc37),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  dd37  {
+  int d;
+   dd37(); // _ZN4dd37C1Ev
+  virtual void  foo(); // _ZN4dd373fooEv
+  ~dd37(); // tgen
+};
+//SIG(-1 dd37) C1{ v1 Fi}
+
+
+ dd37 ::dd37(){ note_ctor("dd37", this);}
+void  dd37 ::foo(){vfunc_called(this, "_ZN4dd373fooEv");}
+dd37 ::~dd37(){ note_dtor("dd37", this);} // tgen
+
+static void Test_dd37()
+{
+  extern Class_Descriptor cd_dd37;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd37, buf);
+    dd37 *dp, &lv = *(dp=new (buf) dd37());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd37)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd37)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd37.d");
+    test_class_info(&lv, &cd_dd37);
+    dp->~dd37();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd37(Test_dd37, "dd37", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd37C1Ev();
+extern void _ZN4dd37D1Ev();
+Name_Map name_map_dd37[] = {
+  NSPAIR(_ZN4dd37C1Ev),
+  NSPAIR(_ZN4dd37D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd37[];
+extern void _ZN4dd373fooEv();
+static  VTBL_ENTRY vtc_dd37[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd37[0]),
+  (VTBL_ENTRY)&_ZN4dd373fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd37[];
+extern  VTBL_ENTRY _ZTV4dd37[];
+Class_Descriptor cd_dd37 = {  "dd37", // class name
+  0,0,//no base classes
+  &(vtc_dd37[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd37),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd37),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  ee37  : virtual aa37 , bb37 {
+  int e;
+   ee37(const ABISELECT(__tsi64,int) *const *); // _ZN4ee37C2Ev
+  virtual void  foo(); // _ZN4ee373fooEv
+  ~ee37(); // tgen
+  ee37(); // tgen
+};
+//SIG(-1 ee37) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee37 ::ee37(const ABISELECT(__tsi64,int) *const *){}
+void  ee37 ::foo(){vfunc_called(this, "_ZN4ee373fooEv");}
+ee37 ::~ee37(){ note_dtor("ee37", this);} // tgen
+ee37 ::ee37(){ note_ctor("ee37", this);} // tgen
+
+static void Test_ee37()
+{
+  extern Class_Descriptor cd_ee37;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee37, buf);
+    ee37 *dp, &lv = *(dp=new (buf) ee37());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee37)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee37)");
+    check_base_class_offset(lv, (aa37*), ABISELECT(16,12), "ee37");
+    check_base_class_offset(lv, (bb37*), 0, "ee37");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee37.e");
+    test_class_info(&lv, &cd_ee37);
+    dp->~ee37();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee37(Test_ee37, "ee37", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee37C1Ev();
+extern void _ZN4ee37D1Ev();
+Name_Map name_map_ee37[] = {
+  NSPAIR(_ZN4ee37C1Ev),
+  NSPAIR(_ZN4ee37D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa37;
+extern VTBL_ENTRY _ZTI4aa37[];
+extern  VTBL_ENTRY _ZTV4aa37[];
+extern Class_Descriptor cd_bb37;
+extern VTBL_ENTRY _ZTI4bb37[];
+extern  VTBL_ENTRY _ZTV4bb37[];
+static Base_Class bases_ee37[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa37,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb37,    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 _ZTI4ee37[];
+extern void _ZN4ee373fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee373fooEv,_ZTv0_n12_N4ee373fooEv)();
+extern void ABISELECT(_ZThn16_N4ee373fooEv,_ZThn12_N4ee373fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee37[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee37[0]),
+  (VTBL_ENTRY)&_ZN4ee373fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee37[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee373fooEv,_ZTv0_n12_N4ee373fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee37[];
+static  VTT_ENTRY vtt_ee37[] = {
+  {&(_ZTV4ee37[3]),  3,8},
+  {&(_ZTV4ee37[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee37[];
+extern  VTBL_ENTRY _ZTV4ee37[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee37[];
+static VTBL_ENTRY alt_thunk_names89[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee373fooEv,_ZTv0_n12_N4ee373fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee373fooEv,_ZThn12_N4ee373fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee37 = {  "ee37", // class name
+  bases_ee37, 2,
+  &(vtc_ee37[0]), // expected_vtbl_contents
+  &(vtt_ee37[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee37),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee37),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee37),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names89,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff37  : virtual cc37 , dd37 {
+  int f;
+   ff37(const ABISELECT(__tsi64,int) *const *); // _ZN4ff37C2Ev
+  virtual void  foo(); // _ZN4ff373fooEv
+  ~ff37(); // tgen
+  ff37(); // tgen
+};
+//SIG(-1 ff37) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff37 ::ff37(const ABISELECT(__tsi64,int) *const *){}
+void  ff37 ::foo(){vfunc_called(this, "_ZN4ff373fooEv");}
+ff37 ::~ff37(){ note_dtor("ff37", this);} // tgen
+ff37 ::ff37(){ note_ctor("ff37", this);} // tgen
+
+static void Test_ff37()
+{
+  extern Class_Descriptor cd_ff37;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff37, buf);
+    ff37 *dp, &lv = *(dp=new (buf) ff37());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff37)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff37)");
+    check_base_class_offset(lv, (cc37*), ABISELECT(16,12), "ff37");
+    check_base_class_offset(lv, (dd37*), 0, "ff37");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff37.f");
+    test_class_info(&lv, &cd_ff37);
+    dp->~ff37();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff37(Test_ff37, "ff37", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff37C1Ev();
+extern void _ZN4ff37D1Ev();
+Name_Map name_map_ff37[] = {
+  NSPAIR(_ZN4ff37C1Ev),
+  NSPAIR(_ZN4ff37D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc37;
+extern VTBL_ENTRY _ZTI4cc37[];
+extern  VTBL_ENTRY _ZTV4cc37[];
+extern Class_Descriptor cd_dd37;
+extern VTBL_ENTRY _ZTI4dd37[];
+extern  VTBL_ENTRY _ZTV4dd37[];
+static Base_Class bases_ff37[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc37,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd37,    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 _ZTI4ff37[];
+extern void _ZN4ff373fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff373fooEv,_ZTv0_n12_N4ff373fooEv)();
+extern void ABISELECT(_ZThn16_N4ff373fooEv,_ZThn12_N4ff373fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff37[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff37[0]),
+  (VTBL_ENTRY)&_ZN4ff373fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff37[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff373fooEv,_ZTv0_n12_N4ff373fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff37[];
+static  VTT_ENTRY vtt_ff37[] = {
+  {&(_ZTV4ff37[3]),  3,8},
+  {&(_ZTV4ff37[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff37[];
+extern  VTBL_ENTRY _ZTV4ff37[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff37[];
+static VTBL_ENTRY alt_thunk_names90[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff373fooEv,_ZTv0_n12_N4ff373fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff373fooEv,_ZThn12_N4ff373fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff37 = {  "ff37", // class name
+  bases_ff37, 2,
+  &(vtc_ff37[0]), // expected_vtbl_contents
+  &(vtt_ff37[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff37),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff37),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff37),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names90,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg37  : ee37 , virtual ff37 {
+  int g;
+   gg37(const ABISELECT(__tsi64,int) *const *); // _ZN4gg37C2Ev
+  virtual void  foo(); // _ZN4gg373fooEv
+  ~gg37(); // tgen
+  gg37(); // tgen
+};
+//SIG(1 gg37) C1{ BC2{ VBC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} VBC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg37 ::gg37(const ABISELECT(__tsi64,int) *const *){}
+void  gg37 ::foo(){vfunc_called(this, "_ZN4gg373fooEv");}
+gg37 ::~gg37(){ note_dtor("gg37", this);} // tgen
+gg37 ::gg37(){ note_ctor("gg37", this);} // tgen
+
+static void Test_gg37()
+{
+  extern Class_Descriptor cd_gg37;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg37, buf);
+    gg37 *dp, &lv = *(dp=new (buf) gg37());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg37)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg37)");
+    check_base_class_offset(lv, (aa37*)(ee37*), ABISELECT(24,16), "gg37");
+    check_base_class_offset(lv, (bb37*)(ee37*), 0, "gg37");
+    check_base_class_offset(lv, (ee37*), 0, "gg37");
+    check_base_class_offset(lv, (cc37*)(ff37*), ABISELECT(56,36), "gg37");
+    check_base_class_offset(lv, (dd37*)(ff37*), ABISELECT(40,24), "gg37");
+    check_base_class_offset(lv, (ff37*), ABISELECT(40,24), "gg37");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg37.g");
+    test_class_info(&lv, &cd_gg37);
+    dp->~gg37();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg37(Test_gg37, "gg37", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg37C1Ev();
+extern void _ZN4gg37D1Ev();
+Name_Map name_map_gg37[] = {
+  NSPAIR(_ZN4gg37C1Ev),
+  NSPAIR(_ZN4gg37D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa37;
+extern VTBL_ENTRY _ZTI4aa37[];
+extern  VTBL_ENTRY _ZTV4aa37[];
+extern Class_Descriptor cd_bb37;
+extern VTBL_ENTRY _ZTI4bb37[];
+extern  VTBL_ENTRY _ZTV4bb37[];
+extern Class_Descriptor cd_ee37;
+extern VTBL_ENTRY _ZTI4ee37[];
+extern  VTBL_ENTRY _ZTV4ee37[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee37[];
+extern Class_Descriptor cd_cc37;
+extern VTBL_ENTRY _ZTI4cc37[];
+extern  VTBL_ENTRY _ZTV4cc37[];
+extern Class_Descriptor cd_dd37;
+extern VTBL_ENTRY _ZTI4dd37[];
+extern  VTBL_ENTRY _ZTV4dd37[];
+extern Class_Descriptor cd_ff37;
+extern VTBL_ENTRY _ZTI4ff37[];
+extern  VTBL_ENTRY _ZTV4ff37[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff37[];
+static Base_Class bases_gg37[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa37,    ABISELECT(24,16), //bcp->offset
+    6, //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_bb37,    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
+    5, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee37,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc37,    ABISELECT(56,36), //bcp->offset
+    15, //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
+    2, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd37,    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
+    3, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff37,    ABISELECT(40,24), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg37[];
+extern void _ZN4gg373fooEv();
+extern void ABISELECT(_ZTv0_n24_N4gg373fooEv,_ZTv0_n12_N4gg373fooEv)();
+extern void ABISELECT(_ZThn24_N4gg373fooEv,_ZThn16_N4gg373fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n32_N4gg373fooEv,_ZTv0_n16_N4gg373fooEv)();
+extern void ABISELECT(_ZThn40_N4gg373fooEv,_ZThn24_N4gg373fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg373fooEv,_ZTv0_n12_N4gg373fooEv)();
+extern void ABISELECT(_ZThn56_N4gg373fooEv,_ZThn36_N4gg373fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg37[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,24),
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg37[0]),
+  (VTBL_ENTRY)&_ZN4gg373fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg37[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg373fooEv,_ZTv0_n12_N4gg373fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(16,12),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg37[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg373fooEv,_ZTv0_n16_N4gg373fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg37[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg373fooEv,_ZTv0_n12_N4gg373fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg37[];
+extern void _ZN4ee373fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee37__4gg37[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee37[0]),
+  (VTBL_ENTRY)&_ZN4ee373fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee373fooEv,_ZTv0_n12_N4ee373fooEv)();
+extern void ABISELECT(_ZThn24_N4ee373fooEv,_ZThn16_N4ee373fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa37__4ee37__4gg37[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4ee37[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee373fooEv,_ZTv0_n12_N4ee373fooEv),
+};
+extern void _ZN4ff373fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff37__4gg37[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff37[0]),
+  (VTBL_ENTRY)&_ZN4ff373fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff373fooEv,_ZTv0_n12_N4ff373fooEv)();
+extern void ABISELECT(_ZThn16_N4ff373fooEv,_ZThn12_N4ff373fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc37__4ff37__4gg37[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff37[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff373fooEv,_ZTv0_n12_N4ff373fooEv),
+};
+static  VTT_ENTRY vtt_gg37[] = {
+  {&(_ZTV4gg37[5]),  5,19},
+  {&(_tg__ZTV4ee37__4gg37[3]),  3,4},
+  {&(_tg__ZTV4aa37__4ee37__4gg37[3]),  3,4},
+  {&(_ZTV4gg37[9]),  9,19},
+  {&(_ZTV4gg37[14]),  14,19},
+  {&(_ZTV4gg37[18]),  18,19},
+  {&(_tg__ZTV4ff37__4gg37[3]),  3,4},
+  {&(_tg__ZTV4cc37__4ff37__4gg37[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg37[];
+extern  VTBL_ENTRY _ZTV4gg37[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg37[];
+static VTBL_ENTRY alt_thunk_names91[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff373fooEv,_ZTv0_n12_N4ff373fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff373fooEv,_ZThn12_N4ff373fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee373fooEv,_ZTv0_n12_N4ee373fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4ee373fooEv,_ZThn16_N4ee373fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg373fooEv,_ZTv0_n16_N4gg373fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg373fooEv,_ZThn24_N4gg373fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg373fooEv,_ZTv0_n12_N4gg373fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg373fooEv,_ZThn36_N4gg373fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg373fooEv,_ZThn16_N4gg373fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg37 = {  "gg37", // class name
+  bases_gg37, 6,
+  &(vtc_gg37[0]), // expected_vtbl_contents
+  &(vtt_gg37[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg37),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg37),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg37),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names91,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa38  {
+  int a;
+   aa38(); // _ZN4aa38C1Ev
+  virtual void  foo(); // _ZN4aa383fooEv
+  ~aa38(); // tgen
+};
+//SIG(-1 aa38) C1{ v1 Fi}
+
+
+ aa38 ::aa38(){ note_ctor("aa38", this);}
+void  aa38 ::foo(){vfunc_called(this, "_ZN4aa383fooEv");}
+aa38 ::~aa38(){ note_dtor("aa38", this);} // tgen
+
+static void Test_aa38()
+{
+  extern Class_Descriptor cd_aa38;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa38, buf);
+    aa38 *dp, &lv = *(dp=new (buf) aa38());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa38)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa38)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa38.a");
+    test_class_info(&lv, &cd_aa38);
+    dp->~aa38();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa38(Test_aa38, "aa38", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa38C1Ev();
+extern void _ZN4aa38D1Ev();
+Name_Map name_map_aa38[] = {
+  NSPAIR(_ZN4aa38C1Ev),
+  NSPAIR(_ZN4aa38D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa38[];
+extern void _ZN4aa383fooEv();
+static  VTBL_ENTRY vtc_aa38[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa38[0]),
+  (VTBL_ENTRY)&_ZN4aa383fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa38[];
+extern  VTBL_ENTRY _ZTV4aa38[];
+Class_Descriptor cd_aa38 = {  "aa38", // class name
+  0,0,//no base classes
+  &(vtc_aa38[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa38),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa38),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  bb38  {
+  int b;
+   bb38(); // _ZN4bb38C1Ev
+  virtual void  foo(); // _ZN4bb383fooEv
+  ~bb38(); // tgen
+};
+//SIG(-1 bb38) C1{ v1 Fi}
+
+
+ bb38 ::bb38(){ note_ctor("bb38", this);}
+void  bb38 ::foo(){vfunc_called(this, "_ZN4bb383fooEv");}
+bb38 ::~bb38(){ note_dtor("bb38", this);} // tgen
+
+static void Test_bb38()
+{
+  extern Class_Descriptor cd_bb38;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb38, buf);
+    bb38 *dp, &lv = *(dp=new (buf) bb38());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb38)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb38)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb38.b");
+    test_class_info(&lv, &cd_bb38);
+    dp->~bb38();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb38(Test_bb38, "bb38", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb38C1Ev();
+extern void _ZN4bb38D1Ev();
+Name_Map name_map_bb38[] = {
+  NSPAIR(_ZN4bb38C1Ev),
+  NSPAIR(_ZN4bb38D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb38[];
+extern void _ZN4bb383fooEv();
+static  VTBL_ENTRY vtc_bb38[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb38[0]),
+  (VTBL_ENTRY)&_ZN4bb383fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb38[];
+extern  VTBL_ENTRY _ZTV4bb38[];
+Class_Descriptor cd_bb38 = {  "bb38", // class name
+  0,0,//no base classes
+  &(vtc_bb38[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb38),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb38),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  cc38  {
+  int c;
+   cc38(); // _ZN4cc38C1Ev
+  virtual void  foo(); // _ZN4cc383fooEv
+  ~cc38(); // tgen
+};
+//SIG(-1 cc38) C1{ v1 Fi}
+
+
+ cc38 ::cc38(){ note_ctor("cc38", this);}
+void  cc38 ::foo(){vfunc_called(this, "_ZN4cc383fooEv");}
+cc38 ::~cc38(){ note_dtor("cc38", this);} // tgen
+
+static void Test_cc38()
+{
+  extern Class_Descriptor cd_cc38;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc38, buf);
+    cc38 *dp, &lv = *(dp=new (buf) cc38());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc38)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc38)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc38.c");
+    test_class_info(&lv, &cd_cc38);
+    dp->~cc38();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc38(Test_cc38, "cc38", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc38C1Ev();
+extern void _ZN4cc38D1Ev();
+Name_Map name_map_cc38[] = {
+  NSPAIR(_ZN4cc38C1Ev),
+  NSPAIR(_ZN4cc38D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc38[];
+extern void _ZN4cc383fooEv();
+static  VTBL_ENTRY vtc_cc38[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc38[0]),
+  (VTBL_ENTRY)&_ZN4cc383fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc38[];
+extern  VTBL_ENTRY _ZTV4cc38[];
+Class_Descriptor cd_cc38 = {  "cc38", // class name
+  0,0,//no base classes
+  &(vtc_cc38[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc38),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc38),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  dd38  {
+  int d;
+   dd38(); // _ZN4dd38C1Ev
+  virtual void  foo(); // _ZN4dd383fooEv
+  ~dd38(); // tgen
+};
+//SIG(-1 dd38) C1{ v1 Fi}
+
+
+ dd38 ::dd38(){ note_ctor("dd38", this);}
+void  dd38 ::foo(){vfunc_called(this, "_ZN4dd383fooEv");}
+dd38 ::~dd38(){ note_dtor("dd38", this);} // tgen
+
+static void Test_dd38()
+{
+  extern Class_Descriptor cd_dd38;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd38, buf);
+    dd38 *dp, &lv = *(dp=new (buf) dd38());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd38)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd38)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd38.d");
+    test_class_info(&lv, &cd_dd38);
+    dp->~dd38();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd38(Test_dd38, "dd38", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd38C1Ev();
+extern void _ZN4dd38D1Ev();
+Name_Map name_map_dd38[] = {
+  NSPAIR(_ZN4dd38C1Ev),
+  NSPAIR(_ZN4dd38D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd38[];
+extern void _ZN4dd383fooEv();
+static  VTBL_ENTRY vtc_dd38[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd38[0]),
+  (VTBL_ENTRY)&_ZN4dd383fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd38[];
+extern  VTBL_ENTRY _ZTV4dd38[];
+Class_Descriptor cd_dd38 = {  "dd38", // class name
+  0,0,//no base classes
+  &(vtc_dd38[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd38),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd38),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  ee38  : aa38 , virtual bb38 {
+  int e;
+   ee38(const ABISELECT(__tsi64,int) *const *); // _ZN4ee38C2Ev
+  virtual void  foo(); // _ZN4ee383fooEv
+  ~ee38(); // tgen
+  ee38(); // tgen
+};
+//SIG(-1 ee38) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee38 ::ee38(const ABISELECT(__tsi64,int) *const *){}
+void  ee38 ::foo(){vfunc_called(this, "_ZN4ee383fooEv");}
+ee38 ::~ee38(){ note_dtor("ee38", this);} // tgen
+ee38 ::ee38(){ note_ctor("ee38", this);} // tgen
+
+static void Test_ee38()
+{
+  extern Class_Descriptor cd_ee38;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee38, buf);
+    ee38 *dp, &lv = *(dp=new (buf) ee38());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee38)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee38)");
+    check_base_class_offset(lv, (aa38*), 0, "ee38");
+    check_base_class_offset(lv, (bb38*), ABISELECT(16,12), "ee38");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee38.e");
+    test_class_info(&lv, &cd_ee38);
+    dp->~ee38();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee38(Test_ee38, "ee38", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee38C1Ev();
+extern void _ZN4ee38D1Ev();
+Name_Map name_map_ee38[] = {
+  NSPAIR(_ZN4ee38C1Ev),
+  NSPAIR(_ZN4ee38D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa38;
+extern VTBL_ENTRY _ZTI4aa38[];
+extern  VTBL_ENTRY _ZTV4aa38[];
+extern Class_Descriptor cd_bb38;
+extern VTBL_ENTRY _ZTI4bb38[];
+extern  VTBL_ENTRY _ZTV4bb38[];
+static Base_Class bases_ee38[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa38,    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},
+  {&cd_bb38,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee38[];
+extern void _ZN4ee383fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee383fooEv,_ZTv0_n12_N4ee383fooEv)();
+extern void ABISELECT(_ZThn16_N4ee383fooEv,_ZThn12_N4ee383fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee38[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee38[0]),
+  (VTBL_ENTRY)&_ZN4ee383fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee38[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee383fooEv,_ZTv0_n12_N4ee383fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee38[];
+static  VTT_ENTRY vtt_ee38[] = {
+  {&(_ZTV4ee38[3]),  3,8},
+  {&(_ZTV4ee38[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ee38[];
+extern  VTBL_ENTRY _ZTV4ee38[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee38[];
+static VTBL_ENTRY alt_thunk_names92[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee383fooEv,_ZTv0_n12_N4ee383fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee383fooEv,_ZThn12_N4ee383fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee38 = {  "ee38", // class name
+  bases_ee38, 2,
+  &(vtc_ee38[0]), // expected_vtbl_contents
+  &(vtt_ee38[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee38),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee38),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee38),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names92,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff38  : virtual cc38 , dd38 {
+  int f;
+   ff38(const ABISELECT(__tsi64,int) *const *); // _ZN4ff38C2Ev
+  virtual void  foo(); // _ZN4ff383fooEv
+  ~ff38(); // tgen
+  ff38(); // tgen
+};
+//SIG(-1 ff38) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff38 ::ff38(const ABISELECT(__tsi64,int) *const *){}
+void  ff38 ::foo(){vfunc_called(this, "_ZN4ff383fooEv");}
+ff38 ::~ff38(){ note_dtor("ff38", this);} // tgen
+ff38 ::ff38(){ note_ctor("ff38", this);} // tgen
+
+static void Test_ff38()
+{
+  extern Class_Descriptor cd_ff38;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff38, buf);
+    ff38 *dp, &lv = *(dp=new (buf) ff38());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff38)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff38)");
+    check_base_class_offset(lv, (cc38*), ABISELECT(16,12), "ff38");
+    check_base_class_offset(lv, (dd38*), 0, "ff38");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff38.f");
+    test_class_info(&lv, &cd_ff38);
+    dp->~ff38();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff38(Test_ff38, "ff38", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff38C1Ev();
+extern void _ZN4ff38D1Ev();
+Name_Map name_map_ff38[] = {
+  NSPAIR(_ZN4ff38C1Ev),
+  NSPAIR(_ZN4ff38D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc38;
+extern VTBL_ENTRY _ZTI4cc38[];
+extern  VTBL_ENTRY _ZTV4cc38[];
+extern Class_Descriptor cd_dd38;
+extern VTBL_ENTRY _ZTI4dd38[];
+extern  VTBL_ENTRY _ZTV4dd38[];
+static Base_Class bases_ff38[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc38,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd38,    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 _ZTI4ff38[];
+extern void _ZN4ff383fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff383fooEv,_ZTv0_n12_N4ff383fooEv)();
+extern void ABISELECT(_ZThn16_N4ff383fooEv,_ZThn12_N4ff383fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff38[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff38[0]),
+  (VTBL_ENTRY)&_ZN4ff383fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff38[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff383fooEv,_ZTv0_n12_N4ff383fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff38[];
+static  VTT_ENTRY vtt_ff38[] = {
+  {&(_ZTV4ff38[3]),  3,8},
+  {&(_ZTV4ff38[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff38[];
+extern  VTBL_ENTRY _ZTV4ff38[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff38[];
+static VTBL_ENTRY alt_thunk_names93[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff383fooEv,_ZTv0_n12_N4ff383fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff383fooEv,_ZThn12_N4ff383fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff38 = {  "ff38", // class name
+  bases_ff38, 2,
+  &(vtc_ff38[0]), // expected_vtbl_contents
+  &(vtt_ff38[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff38),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff38),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff38),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names93,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg38  : ee38 , virtual ff38 {
+  int g;
+   gg38(const ABISELECT(__tsi64,int) *const *); // _ZN4gg38C2Ev
+  virtual void  foo(); // _ZN4gg383fooEv
+  ~gg38(); // tgen
+  gg38(); // tgen
+};
+//SIG(1 gg38) C1{ BC2{ BC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} VBC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg38 ::gg38(const ABISELECT(__tsi64,int) *const *){}
+void  gg38 ::foo(){vfunc_called(this, "_ZN4gg383fooEv");}
+gg38 ::~gg38(){ note_dtor("gg38", this);} // tgen
+gg38 ::gg38(){ note_ctor("gg38", this);} // tgen
+
+static void Test_gg38()
+{
+  extern Class_Descriptor cd_gg38;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg38, buf);
+    gg38 *dp, &lv = *(dp=new (buf) gg38());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg38)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg38)");
+    check_base_class_offset(lv, (aa38*)(ee38*), 0, "gg38");
+    check_base_class_offset(lv, (bb38*)(ee38*), ABISELECT(24,16), "gg38");
+    check_base_class_offset(lv, (ee38*), 0, "gg38");
+    check_base_class_offset(lv, (cc38*)(ff38*), ABISELECT(56,36), "gg38");
+    check_base_class_offset(lv, (dd38*)(ff38*), ABISELECT(40,24), "gg38");
+    check_base_class_offset(lv, (ff38*), ABISELECT(40,24), "gg38");
+    check_field_offset(lv, g, ABISELECT(16,12), "gg38.g");
+    test_class_info(&lv, &cd_gg38);
+    dp->~gg38();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg38(Test_gg38, "gg38", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg38C1Ev();
+extern void _ZN4gg38D1Ev();
+Name_Map name_map_gg38[] = {
+  NSPAIR(_ZN4gg38C1Ev),
+  NSPAIR(_ZN4gg38D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa38;
+extern VTBL_ENTRY _ZTI4aa38[];
+extern  VTBL_ENTRY _ZTV4aa38[];
+extern Class_Descriptor cd_bb38;
+extern VTBL_ENTRY _ZTI4bb38[];
+extern  VTBL_ENTRY _ZTV4bb38[];
+extern Class_Descriptor cd_ee38;
+extern VTBL_ENTRY _ZTI4ee38[];
+extern  VTBL_ENTRY _ZTV4ee38[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee38[];
+extern Class_Descriptor cd_cc38;
+extern VTBL_ENTRY _ZTI4cc38[];
+extern  VTBL_ENTRY _ZTV4cc38[];
+extern Class_Descriptor cd_dd38;
+extern VTBL_ENTRY _ZTI4dd38[];
+extern  VTBL_ENTRY _ZTV4dd38[];
+extern Class_Descriptor cd_ff38;
+extern VTBL_ENTRY _ZTI4ff38[];
+extern  VTBL_ENTRY _ZTV4ff38[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff38[];
+static Base_Class bases_gg38[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa38,    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
+    5, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb38,    ABISELECT(24,16), //bcp->offset
+    6, //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_ee38,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc38,    ABISELECT(56,36), //bcp->offset
+    15, //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
+    2, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd38,    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
+    3, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff38,    ABISELECT(40,24), //bcp->offset
+    10, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    7, //bcp->base_subarray_index_in_construction_vtbl_array
+    4, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg38[];
+extern void _ZN4gg383fooEv();
+extern void ABISELECT(_ZTv0_n24_N4gg383fooEv,_ZTv0_n12_N4gg383fooEv)();
+extern void ABISELECT(_ZThn24_N4gg383fooEv,_ZThn16_N4gg383fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n32_N4gg383fooEv,_ZTv0_n16_N4gg383fooEv)();
+extern void ABISELECT(_ZThn40_N4gg383fooEv,_ZThn24_N4gg383fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg383fooEv,_ZTv0_n12_N4gg383fooEv)();
+extern void ABISELECT(_ZThn56_N4gg383fooEv,_ZThn36_N4gg383fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg38[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,24),
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg38[0]),
+  (VTBL_ENTRY)&_ZN4gg383fooEv,
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4gg38[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg383fooEv,_ZTv0_n12_N4gg383fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(16,12),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg38[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg383fooEv,_ZTv0_n16_N4gg383fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg38[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg383fooEv,_ZTv0_n12_N4gg383fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg38[];
+extern void _ZN4ee383fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee38__4gg38[] = {
+  ABISELECT(24,16),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee38[0]),
+  (VTBL_ENTRY)&_ZN4ee383fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee383fooEv,_ZTv0_n12_N4ee383fooEv)();
+extern void ABISELECT(_ZThn24_N4ee383fooEv,_ZThn16_N4ee383fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb38__4ee38__4gg38[] = {
+  ABISELECT(-24,-16),
+  ABISELECT(-24,-16),
+  (VTBL_ENTRY)&(_ZTI4ee38[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee383fooEv,_ZTv0_n12_N4ee383fooEv),
+};
+extern void _ZN4ff383fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff38__4gg38[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff38[0]),
+  (VTBL_ENTRY)&_ZN4ff383fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff383fooEv,_ZTv0_n12_N4ff383fooEv)();
+extern void ABISELECT(_ZThn16_N4ff383fooEv,_ZThn12_N4ff383fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc38__4ff38__4gg38[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff38[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff383fooEv,_ZTv0_n12_N4ff383fooEv),
+};
+static  VTT_ENTRY vtt_gg38[] = {
+  {&(_ZTV4gg38[5]),  5,19},
+  {&(_tg__ZTV4ee38__4gg38[3]),  3,4},
+  {&(_tg__ZTV4bb38__4ee38__4gg38[3]),  3,4},
+  {&(_ZTV4gg38[9]),  9,19},
+  {&(_ZTV4gg38[14]),  14,19},
+  {&(_ZTV4gg38[18]),  18,19},
+  {&(_tg__ZTV4ff38__4gg38[3]),  3,4},
+  {&(_tg__ZTV4cc38__4ff38__4gg38[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg38[];
+extern  VTBL_ENTRY _ZTV4gg38[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg38[];
+static VTBL_ENTRY alt_thunk_names94[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff383fooEv,_ZTv0_n12_N4ff383fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff383fooEv,_ZThn12_N4ff383fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee383fooEv,_ZTv0_n12_N4ee383fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4ee383fooEv,_ZThn16_N4ee383fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg383fooEv,_ZTv0_n16_N4gg383fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg383fooEv,_ZThn24_N4gg383fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg383fooEv,_ZTv0_n12_N4gg383fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg383fooEv,_ZThn36_N4gg383fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn24_N4gg383fooEv,_ZThn16_N4gg383fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg38 = {  "gg38", // class name
+  bases_gg38, 6,
+  &(vtc_gg38[0]), // expected_vtbl_contents
+  &(vtt_gg38[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg38),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg38),19, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg38),8, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names94,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa39  {
+  int a;
+   aa39(); // _ZN4aa39C1Ev
+  virtual void  foo(); // _ZN4aa393fooEv
+  ~aa39(); // tgen
+};
+//SIG(-1 aa39) C1{ v1 Fi}
+
+
+ aa39 ::aa39(){ note_ctor("aa39", this);}
+void  aa39 ::foo(){vfunc_called(this, "_ZN4aa393fooEv");}
+aa39 ::~aa39(){ note_dtor("aa39", this);} // tgen
+
+static void Test_aa39()
+{
+  extern Class_Descriptor cd_aa39;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa39, buf);
+    aa39 *dp, &lv = *(dp=new (buf) aa39());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa39)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa39)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa39.a");
+    test_class_info(&lv, &cd_aa39);
+    dp->~aa39();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa39(Test_aa39, "aa39", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa39C1Ev();
+extern void _ZN4aa39D1Ev();
+Name_Map name_map_aa39[] = {
+  NSPAIR(_ZN4aa39C1Ev),
+  NSPAIR(_ZN4aa39D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa39[];
+extern void _ZN4aa393fooEv();
+static  VTBL_ENTRY vtc_aa39[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa39[0]),
+  (VTBL_ENTRY)&_ZN4aa393fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa39[];
+extern  VTBL_ENTRY _ZTV4aa39[];
+Class_Descriptor cd_aa39 = {  "aa39", // class name
+  0,0,//no base classes
+  &(vtc_aa39[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa39),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa39),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  bb39  {
+  int b;
+   bb39(); // _ZN4bb39C1Ev
+  virtual void  foo(); // _ZN4bb393fooEv
+  ~bb39(); // tgen
+};
+//SIG(-1 bb39) C1{ v1 Fi}
+
+
+ bb39 ::bb39(){ note_ctor("bb39", this);}
+void  bb39 ::foo(){vfunc_called(this, "_ZN4bb393fooEv");}
+bb39 ::~bb39(){ note_dtor("bb39", this);} // tgen
+
+static void Test_bb39()
+{
+  extern Class_Descriptor cd_bb39;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb39, buf);
+    bb39 *dp, &lv = *(dp=new (buf) bb39());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb39)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb39)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb39.b");
+    test_class_info(&lv, &cd_bb39);
+    dp->~bb39();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb39(Test_bb39, "bb39", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb39C1Ev();
+extern void _ZN4bb39D1Ev();
+Name_Map name_map_bb39[] = {
+  NSPAIR(_ZN4bb39C1Ev),
+  NSPAIR(_ZN4bb39D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb39[];
+extern void _ZN4bb393fooEv();
+static  VTBL_ENTRY vtc_bb39[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb39[0]),
+  (VTBL_ENTRY)&_ZN4bb393fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb39[];
+extern  VTBL_ENTRY _ZTV4bb39[];
+Class_Descriptor cd_bb39 = {  "bb39", // class name
+  0,0,//no base classes
+  &(vtc_bb39[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb39),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb39),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  cc39  {
+  int c;
+   cc39(); // _ZN4cc39C1Ev
+  virtual void  foo(); // _ZN4cc393fooEv
+  ~cc39(); // tgen
+};
+//SIG(-1 cc39) C1{ v1 Fi}
+
+
+ cc39 ::cc39(){ note_ctor("cc39", this);}
+void  cc39 ::foo(){vfunc_called(this, "_ZN4cc393fooEv");}
+cc39 ::~cc39(){ note_dtor("cc39", this);} // tgen
+
+static void Test_cc39()
+{
+  extern Class_Descriptor cd_cc39;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc39, buf);
+    cc39 *dp, &lv = *(dp=new (buf) cc39());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc39)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc39)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc39.c");
+    test_class_info(&lv, &cd_cc39);
+    dp->~cc39();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc39(Test_cc39, "cc39", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc39C1Ev();
+extern void _ZN4cc39D1Ev();
+Name_Map name_map_cc39[] = {
+  NSPAIR(_ZN4cc39C1Ev),
+  NSPAIR(_ZN4cc39D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc39[];
+extern void _ZN4cc393fooEv();
+static  VTBL_ENTRY vtc_cc39[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc39[0]),
+  (VTBL_ENTRY)&_ZN4cc393fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc39[];
+extern  VTBL_ENTRY _ZTV4cc39[];
+Class_Descriptor cd_cc39 = {  "cc39", // class name
+  0,0,//no base classes
+  &(vtc_cc39[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc39),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc39),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  dd39  {
+  int d;
+   dd39(); // _ZN4dd39C1Ev
+  virtual void  foo(); // _ZN4dd393fooEv
+  ~dd39(); // tgen
+};
+//SIG(-1 dd39) C1{ v1 Fi}
+
+
+ dd39 ::dd39(){ note_ctor("dd39", this);}
+void  dd39 ::foo(){vfunc_called(this, "_ZN4dd393fooEv");}
+dd39 ::~dd39(){ note_dtor("dd39", this);} // tgen
+
+static void Test_dd39()
+{
+  extern Class_Descriptor cd_dd39;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd39, buf);
+    dd39 *dp, &lv = *(dp=new (buf) dd39());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd39)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd39)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd39.d");
+    test_class_info(&lv, &cd_dd39);
+    dp->~dd39();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd39(Test_dd39, "dd39", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd39C1Ev();
+extern void _ZN4dd39D1Ev();
+Name_Map name_map_dd39[] = {
+  NSPAIR(_ZN4dd39C1Ev),
+  NSPAIR(_ZN4dd39D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd39[];
+extern void _ZN4dd393fooEv();
+static  VTBL_ENTRY vtc_dd39[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd39[0]),
+  (VTBL_ENTRY)&_ZN4dd393fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd39[];
+extern  VTBL_ENTRY _ZTV4dd39[];
+Class_Descriptor cd_dd39 = {  "dd39", // class name
+  0,0,//no base classes
+  &(vtc_dd39[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd39),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd39),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  ee39  : virtual aa39 , virtual bb39 {
+  int e;
+   ee39(const ABISELECT(__tsi64,int) *const *); // _ZN4ee39C2Ev
+  virtual void  foo(); // _ZN4ee393fooEv
+  ~ee39(); // tgen
+  ee39(); // tgen
+};
+//SIG(-1 ee39) C1{ VBC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ee39 ::ee39(const ABISELECT(__tsi64,int) *const *){}
+void  ee39 ::foo(){vfunc_called(this, "_ZN4ee393fooEv");}
+ee39 ::~ee39(){ note_dtor("ee39", this);} // tgen
+ee39 ::ee39(){ note_ctor("ee39", this);} // tgen
+
+static void Test_ee39()
+{
+  extern Class_Descriptor cd_ee39;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[7];
+    init_test(&cd_ee39, buf);
+    ee39 *dp, &lv = *(dp=new (buf) ee39());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(48,24), "sizeof(ee39)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee39)");
+    check_base_class_offset(lv, (aa39*), ABISELECT(16,8), "ee39");
+    check_base_class_offset(lv, (bb39*), ABISELECT(32,16), "ee39");
+    check_field_offset(lv, e, ABISELECT(8,4), "ee39.e");
+    test_class_info(&lv, &cd_ee39);
+    dp->~ee39();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee39(Test_ee39, "ee39", ABISELECT(48,24));
+
+#else // __cplusplus
+
+extern void _ZN4ee39C1Ev();
+extern void _ZN4ee39D1Ev();
+Name_Map name_map_ee39[] = {
+  NSPAIR(_ZN4ee39C1Ev),
+  NSPAIR(_ZN4ee39D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa39;
+extern VTBL_ENTRY _ZTI4aa39[];
+extern  VTBL_ENTRY _ZTV4aa39[];
+extern Class_Descriptor cd_bb39;
+extern VTBL_ENTRY _ZTI4bb39[];
+extern  VTBL_ENTRY _ZTV4bb39[];
+static Base_Class bases_ee39[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa39,    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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb39,    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
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ee39[];
+extern void _ZN4ee393fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv)();
+extern void ABISELECT(_ZThn16_N4ee393fooEv,_ZThn8_N4ee393fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv)();
+extern void ABISELECT(_ZThn32_N4ee393fooEv,_ZThn16_N4ee393fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee39[] = {
+  ABISELECT(32,16),
+  ABISELECT(16,8),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee39[0]),
+  (VTBL_ENTRY)&_ZN4ee393fooEv,
+  ABISELECT(-16,-8),
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv),
+  ABISELECT(-32,-16),
+  ABISELECT(-32,-16),
+  (VTBL_ENTRY)&(_ZTI4ee39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv),
+};
+extern VTBL_ENTRY _ZTV4ee39[];
+static  VTT_ENTRY vtt_ee39[] = {
+  {&(_ZTV4ee39[4]),  4,13},
+  {&(_ZTV4ee39[8]),  8,13},
+  {&(_ZTV4ee39[12]),  12,13},
+};
+extern VTBL_ENTRY _ZTI4ee39[];
+extern  VTBL_ENTRY _ZTV4ee39[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee39[];
+static VTBL_ENTRY alt_thunk_names95[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee393fooEv,_ZThn16_N4ee393fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee393fooEv,_ZThn8_N4ee393fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ee39 = {  "ee39", // class name
+  bases_ee39, 2,
+  &(vtc_ee39[0]), // expected_vtbl_contents
+  &(vtt_ee39[0]), // expected_vtt_contents
+  ABISELECT(48,24), // object size
+  NSPAIRA(_ZTI4ee39),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee39),13, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ee39),3, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names95,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ff39  : virtual cc39 , dd39 {
+  int f;
+   ff39(const ABISELECT(__tsi64,int) *const *); // _ZN4ff39C2Ev
+  virtual void  foo(); // _ZN4ff393fooEv
+  ~ff39(); // tgen
+  ff39(); // tgen
+};
+//SIG(-1 ff39) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ff39 ::ff39(const ABISELECT(__tsi64,int) *const *){}
+void  ff39 ::foo(){vfunc_called(this, "_ZN4ff393fooEv");}
+ff39 ::~ff39(){ note_dtor("ff39", this);} // tgen
+ff39 ::ff39(){ note_ctor("ff39", this);} // tgen
+
+static void Test_ff39()
+{
+  extern Class_Descriptor cd_ff39;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff39, buf);
+    ff39 *dp, &lv = *(dp=new (buf) ff39());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff39)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff39)");
+    check_base_class_offset(lv, (cc39*), ABISELECT(16,12), "ff39");
+    check_base_class_offset(lv, (dd39*), 0, "ff39");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff39.f");
+    test_class_info(&lv, &cd_ff39);
+    dp->~ff39();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff39(Test_ff39, "ff39", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff39C1Ev();
+extern void _ZN4ff39D1Ev();
+Name_Map name_map_ff39[] = {
+  NSPAIR(_ZN4ff39C1Ev),
+  NSPAIR(_ZN4ff39D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc39;
+extern VTBL_ENTRY _ZTI4cc39[];
+extern  VTBL_ENTRY _ZTV4cc39[];
+extern Class_Descriptor cd_dd39;
+extern VTBL_ENTRY _ZTI4dd39[];
+extern  VTBL_ENTRY _ZTV4dd39[];
+static Base_Class bases_ff39[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc39,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_dd39,    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 _ZTI4ff39[];
+extern void _ZN4ff393fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff393fooEv,_ZTv0_n12_N4ff393fooEv)();
+extern void ABISELECT(_ZThn16_N4ff393fooEv,_ZThn12_N4ff393fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff39[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff39[0]),
+  (VTBL_ENTRY)&_ZN4ff393fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff393fooEv,_ZTv0_n12_N4ff393fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff39[];
+static  VTT_ENTRY vtt_ff39[] = {
+  {&(_ZTV4ff39[3]),  3,8},
+  {&(_ZTV4ff39[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff39[];
+extern  VTBL_ENTRY _ZTV4ff39[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff39[];
+static VTBL_ENTRY alt_thunk_names96[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff393fooEv,_ZTv0_n12_N4ff393fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff393fooEv,_ZThn12_N4ff393fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff39 = {  "ff39", // class name
+  bases_ff39, 2,
+  &(vtc_ff39[0]), // expected_vtbl_contents
+  &(vtt_ff39[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff39),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff39),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff39),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names96,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg39  : ee39 , virtual ff39 {
+  int g;
+   gg39(const ABISELECT(__tsi64,int) *const *); // _ZN4gg39C2Ev
+  virtual void  foo(); // _ZN4gg393fooEv
+  ~gg39(); // tgen
+  gg39(); // tgen
+};
+//SIG(1 gg39) C1{ BC2{ VBC3{ v1 Fi} VBC4{ v1 Fi} v1 Fi} VBC5{ VBC6{ v1 Fi} BC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg39 ::gg39(const ABISELECT(__tsi64,int) *const *){}
+void  gg39 ::foo(){vfunc_called(this, "_ZN4gg393fooEv");}
+gg39 ::~gg39(){ note_dtor("gg39", this);} // tgen
+gg39 ::gg39(){ note_ctor("gg39", this);} // tgen
+
+static void Test_gg39()
+{
+  extern Class_Descriptor cd_gg39;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(11,13)];
+    init_test(&cd_gg39, buf);
+    gg39 *dp, &lv = *(dp=new (buf) gg39());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(80,48), "sizeof(gg39)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg39)");
+    check_base_class_offset(lv, (aa39*)(ee39*), ABISELECT(16,12), "gg39");
+    check_base_class_offset(lv, (bb39*)(ee39*), ABISELECT(32,20), "gg39");
+    check_base_class_offset(lv, (ee39*), 0, "gg39");
+    check_base_class_offset(lv, (cc39*)(ff39*), ABISELECT(64,40), "gg39");
+    check_base_class_offset(lv, (dd39*)(ff39*), ABISELECT(48,28), "gg39");
+    check_base_class_offset(lv, (ff39*), ABISELECT(48,28), "gg39");
+    check_field_offset(lv, g, ABISELECT(12,8), "gg39.g");
+    test_class_info(&lv, &cd_gg39);
+    dp->~gg39();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg39(Test_gg39, "gg39", ABISELECT(80,48));
+
+#else // __cplusplus
+
+extern void _ZN4gg39C1Ev();
+extern void _ZN4gg39D1Ev();
+Name_Map name_map_gg39[] = {
+  NSPAIR(_ZN4gg39C1Ev),
+  NSPAIR(_ZN4gg39D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa39;
+extern VTBL_ENTRY _ZTI4aa39[];
+extern  VTBL_ENTRY _ZTV4aa39[];
+extern Class_Descriptor cd_bb39;
+extern VTBL_ENTRY _ZTI4bb39[];
+extern  VTBL_ENTRY _ZTV4bb39[];
+extern Class_Descriptor cd_ee39;
+extern VTBL_ENTRY _ZTI4ee39[];
+extern  VTBL_ENTRY _ZTV4ee39[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ee39[];
+extern Class_Descriptor cd_cc39;
+extern VTBL_ENTRY _ZTI4cc39[];
+extern  VTBL_ENTRY _ZTV4cc39[];
+extern Class_Descriptor cd_dd39;
+extern VTBL_ENTRY _ZTI4dd39[];
+extern  VTBL_ENTRY _ZTV4dd39[];
+extern Class_Descriptor cd_ff39;
+extern VTBL_ENTRY _ZTI4ff39[];
+extern  VTBL_ENTRY _ZTV4ff39[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff39[];
+static Base_Class bases_gg39[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa39,    ABISELECT(16,12), //bcp->offset
+    7, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    5, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_bb39,    ABISELECT(32,20), //bcp->offset
+    11, //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
+    2, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ee39,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc39,    ABISELECT(64,40), //bcp->offset
+    20, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    8, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    3, //init_seq
+    5, //immediately_derived
+  0, 1},
+  {&cd_dd39,    ABISELECT(48,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
+    4, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_ff39,    ABISELECT(48,28), //bcp->offset
+    15, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    7, //bcp->index_in_construction_vtbl_array
+    9, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4gg39[];
+extern void _ZN4gg393fooEv();
+extern void ABISELECT(_ZTv0_n24_N4gg393fooEv,_ZTv0_n12_N4gg393fooEv)();
+extern void ABISELECT(_ZThn16_N4gg393fooEv,_ZThn12_N4gg393fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg393fooEv,_ZTv0_n12_N4gg393fooEv)();
+extern void ABISELECT(_ZThn32_N4gg393fooEv,_ZThn20_N4gg393fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n32_N4gg393fooEv,_ZTv0_n16_N4gg393fooEv)();
+extern void ABISELECT(_ZThn48_N4gg393fooEv,_ZThn28_N4gg393fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg393fooEv,_ZTv0_n12_N4gg393fooEv)();
+extern void ABISELECT(_ZThn64_N4gg393fooEv,_ZThn40_N4gg393fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg39[] = {
+  ABISELECT(64,40),
+  ABISELECT(48,28),
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg39[0]),
+  (VTBL_ENTRY)&_ZN4gg393fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4gg39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg393fooEv,_ZTv0_n12_N4gg393fooEv),
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4gg39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg393fooEv,_ZTv0_n12_N4gg393fooEv),
+  ABISELECT(-48,-28),
+  ABISELECT(16,12),
+  ABISELECT(-48,-28),
+  (VTBL_ENTRY)&(_ZTI4gg39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg393fooEv,_ZTv0_n16_N4gg393fooEv),
+  ABISELECT(-64,-40),
+  ABISELECT(-64,-40),
+  (VTBL_ENTRY)&(_ZTI4gg39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg393fooEv,_ZTv0_n12_N4gg393fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg39[];
+extern void _ZN4ee393fooEv();
+static  VTBL_ENTRY _tg__ZTV4ee39__4gg39[] = {
+  ABISELECT(32,20),
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee39[0]),
+  (VTBL_ENTRY)&_ZN4ee393fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv)();
+extern void ABISELECT(_ZThn16_N4ee393fooEv,_ZThn12_N4ee393fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4aa39__4ee39__4gg39[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ee39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv),
+};
+extern void ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv)();
+extern void ABISELECT(_ZThn32_N4ee393fooEv,_ZThn20_N4ee393fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4bb39__4ee39__4gg39[] = {
+  ABISELECT(-32,-20),
+  ABISELECT(-32,-20),
+  (VTBL_ENTRY)&(_ZTI4ee39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv),
+};
+extern void _ZN4ff393fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff39__4gg39[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff39[0]),
+  (VTBL_ENTRY)&_ZN4ff393fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff393fooEv,_ZTv0_n12_N4ff393fooEv)();
+extern void ABISELECT(_ZThn16_N4ff393fooEv,_ZThn12_N4ff393fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4cc39__4ff39__4gg39[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff39[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff393fooEv,_ZTv0_n12_N4ff393fooEv),
+};
+static  VTT_ENTRY vtt_gg39[] = {
+  {&(_ZTV4gg39[6]),  6,24},
+  {&(_tg__ZTV4ee39__4gg39[4]),  4,5},
+  {&(_tg__ZTV4aa39__4ee39__4gg39[3]),  3,4},
+  {&(_tg__ZTV4bb39__4ee39__4gg39[3]),  3,4},
+  {&(_ZTV4gg39[10]),  10,24},
+  {&(_ZTV4gg39[14]),  14,24},
+  {&(_ZTV4gg39[19]),  19,24},
+  {&(_ZTV4gg39[23]),  23,24},
+  {&(_tg__ZTV4ff39__4gg39[3]),  3,4},
+  {&(_tg__ZTV4cc39__4ff39__4gg39[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg39[];
+extern  VTBL_ENTRY _ZTV4gg39[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg39[];
+static VTBL_ENTRY alt_thunk_names97[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff393fooEv,_ZTv0_n12_N4ff393fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff393fooEv,_ZThn12_N4ff393fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ee393fooEv,_ZTv0_n12_N4ee393fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4ee393fooEv,_ZThn20_N4ee393fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ee393fooEv,_ZThn12_N4ee393fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg393fooEv,_ZTv0_n16_N4gg393fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn48_N4gg393fooEv,_ZThn28_N4gg393fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg393fooEv,_ZTv0_n12_N4gg393fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn64_N4gg393fooEv,_ZThn40_N4gg393fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn32_N4gg393fooEv,_ZThn20_N4gg393fooEv),
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4gg393fooEv,_ZThn12_N4gg393fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg39 = {  "gg39", // class name
+  bases_gg39, 6,
+  &(vtc_gg39[0]), // expected_vtbl_contents
+  &(vtt_gg39[0]), // expected_vtt_contents
+  ABISELECT(80,48), // object size
+  NSPAIRA(_ZTI4gg39),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg39),24, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg39),10, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names97,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa40  {
+  int a;
+   aa40(); // _ZN4aa40C1Ev
+  virtual void  foo(); // _ZN4aa403fooEv
+  ~aa40(); // tgen
+};
+//SIG(-1 aa40) C1{ v1 Fi}
+
+
+ aa40 ::aa40(){ note_ctor("aa40", this);}
+void  aa40 ::foo(){vfunc_called(this, "_ZN4aa403fooEv");}
+aa40 ::~aa40(){ note_dtor("aa40", this);} // tgen
+
+static void Test_aa40()
+{
+  extern Class_Descriptor cd_aa40;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa40, buf);
+    aa40 *dp, &lv = *(dp=new (buf) aa40());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa40)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa40)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa40.a");
+    test_class_info(&lv, &cd_aa40);
+    dp->~aa40();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa40(Test_aa40, "aa40", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa40C1Ev();
+extern void _ZN4aa40D1Ev();
+Name_Map name_map_aa40[] = {
+  NSPAIR(_ZN4aa40C1Ev),
+  NSPAIR(_ZN4aa40D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa40[];
+extern void _ZN4aa403fooEv();
+static  VTBL_ENTRY vtc_aa40[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa40[0]),
+  (VTBL_ENTRY)&_ZN4aa403fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa40[];
+extern  VTBL_ENTRY _ZTV4aa40[];
+Class_Descriptor cd_aa40 = {  "aa40", // class name
+  0,0,//no base classes
+  &(vtc_aa40[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa40),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa40),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  bb40  {
+  int b;
+   bb40(); // _ZN4bb40C1Ev
+  virtual void  foo(); // _ZN4bb403fooEv
+  ~bb40(); // tgen
+};
+//SIG(-1 bb40) C1{ v1 Fi}
+
+
+ bb40 ::bb40(){ note_ctor("bb40", this);}
+void  bb40 ::foo(){vfunc_called(this, "_ZN4bb403fooEv");}
+bb40 ::~bb40(){ note_dtor("bb40", this);} // tgen
+
+static void Test_bb40()
+{
+  extern Class_Descriptor cd_bb40;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb40, buf);
+    bb40 *dp, &lv = *(dp=new (buf) bb40());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb40)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb40)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb40.b");
+    test_class_info(&lv, &cd_bb40);
+    dp->~bb40();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb40(Test_bb40, "bb40", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb40C1Ev();
+extern void _ZN4bb40D1Ev();
+Name_Map name_map_bb40[] = {
+  NSPAIR(_ZN4bb40C1Ev),
+  NSPAIR(_ZN4bb40D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb40[];
+extern void _ZN4bb403fooEv();
+static  VTBL_ENTRY vtc_bb40[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb40[0]),
+  (VTBL_ENTRY)&_ZN4bb403fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb40[];
+extern  VTBL_ENTRY _ZTV4bb40[];
+Class_Descriptor cd_bb40 = {  "bb40", // class name
+  0,0,//no base classes
+  &(vtc_bb40[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb40),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb40),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  cc40  {
+  int c;
+   cc40(); // _ZN4cc40C1Ev
+  virtual void  foo(); // _ZN4cc403fooEv
+  ~cc40(); // tgen
+};
+//SIG(-1 cc40) C1{ v1 Fi}
+
+
+ cc40 ::cc40(){ note_ctor("cc40", this);}
+void  cc40 ::foo(){vfunc_called(this, "_ZN4cc403fooEv");}
+cc40 ::~cc40(){ note_dtor("cc40", this);} // tgen
+
+static void Test_cc40()
+{
+  extern Class_Descriptor cd_cc40;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc40, buf);
+    cc40 *dp, &lv = *(dp=new (buf) cc40());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc40)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc40)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc40.c");
+    test_class_info(&lv, &cd_cc40);
+    dp->~cc40();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc40(Test_cc40, "cc40", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc40C1Ev();
+extern void _ZN4cc40D1Ev();
+Name_Map name_map_cc40[] = {
+  NSPAIR(_ZN4cc40C1Ev),
+  NSPAIR(_ZN4cc40D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc40[];
+extern void _ZN4cc403fooEv();
+static  VTBL_ENTRY vtc_cc40[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc40[0]),
+  (VTBL_ENTRY)&_ZN4cc403fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc40[];
+extern  VTBL_ENTRY _ZTV4cc40[];
+Class_Descriptor cd_cc40 = {  "cc40", // class name
+  0,0,//no base classes
+  &(vtc_cc40[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc40),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc40),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  dd40  {
+  int d;
+   dd40(); // _ZN4dd40C1Ev
+  virtual void  foo(); // _ZN4dd403fooEv
+  ~dd40(); // tgen
+};
+//SIG(-1 dd40) C1{ v1 Fi}
+
+
+ dd40 ::dd40(){ note_ctor("dd40", this);}
+void  dd40 ::foo(){vfunc_called(this, "_ZN4dd403fooEv");}
+dd40 ::~dd40(){ note_dtor("dd40", this);} // tgen
+
+static void Test_dd40()
+{
+  extern Class_Descriptor cd_dd40;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd40, buf);
+    dd40 *dp, &lv = *(dp=new (buf) dd40());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd40)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd40)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd40.d");
+    test_class_info(&lv, &cd_dd40);
+    dp->~dd40();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd40(Test_dd40, "dd40", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd40C1Ev();
+extern void _ZN4dd40D1Ev();
+Name_Map name_map_dd40[] = {
+  NSPAIR(_ZN4dd40C1Ev),
+  NSPAIR(_ZN4dd40D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd40[];
+extern void _ZN4dd403fooEv();
+static  VTBL_ENTRY vtc_dd40[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd40[0]),
+  (VTBL_ENTRY)&_ZN4dd403fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd40[];
+extern  VTBL_ENTRY _ZTV4dd40[];
+Class_Descriptor cd_dd40 = {  "dd40", // class name
+  0,0,//no base classes
+  &(vtc_dd40[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd40),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd40),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  ee40  : aa40 , bb40 {
+  int e;
+   ee40(); // _ZN4ee40C1Ev
+  virtual void  foo(); // _ZN4ee403fooEv
+  ~ee40(); // tgen
+};
+//SIG(-1 ee40) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee40 ::ee40(){ note_ctor("ee40", this);}
+void  ee40 ::foo(){vfunc_called(this, "_ZN4ee403fooEv");}
+ee40 ::~ee40(){ note_dtor("ee40", this);} // tgen
+
+static void Test_ee40()
+{
+  extern Class_Descriptor cd_ee40;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee40, buf);
+    ee40 *dp, &lv = *(dp=new (buf) ee40());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee40)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee40)");
+    check_base_class_offset(lv, (aa40*), 0, "ee40");
+    check_base_class_offset(lv, (bb40*), ABISELECT(16,8), "ee40");
+    check_field_offset(lv, e, ABISELECT(28,16), "ee40.e");
+    test_class_info(&lv, &cd_ee40);
+    dp->~ee40();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee40(Test_ee40, "ee40", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee40C1Ev();
+extern void _ZN4ee40D1Ev();
+Name_Map name_map_ee40[] = {
+  NSPAIR(_ZN4ee40C1Ev),
+  NSPAIR(_ZN4ee40D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa40;
+extern VTBL_ENTRY _ZTI4aa40[];
+extern  VTBL_ENTRY _ZTV4aa40[];
+extern Class_Descriptor cd_bb40;
+extern VTBL_ENTRY _ZTI4bb40[];
+extern  VTBL_ENTRY _ZTV4bb40[];
+static Base_Class bases_ee40[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa40,    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},
+  {&cd_bb40,    ABISELECT(16,8), //bcp->offset
+    3, //bcp->virtual_function_table_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 _ZTI4ee40[];
+extern void _ZN4ee403fooEv();
+extern void ABISELECT(_ZThn16_N4ee403fooEv,_ZThn8_N4ee403fooEv)();
+static  VTBL_ENTRY vtc_ee40[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee40[0]),
+  (VTBL_ENTRY)&_ZN4ee403fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4ee40[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4ee403fooEv,_ZThn8_N4ee403fooEv),
+};
+extern VTBL_ENTRY _ZTI4ee40[];
+extern  VTBL_ENTRY _ZTV4ee40[];
+Class_Descriptor cd_ee40 = {  "ee40", // class name
+  bases_ee40, 2,
+  &(vtc_ee40[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ee40),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ee40),6, //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  ff40  : cc40 , virtual dd40 {
+  int f;
+   ff40(const ABISELECT(__tsi64,int) *const *); // _ZN4ff40C2Ev
+  virtual void  foo(); // _ZN4ff403fooEv
+  ~ff40(); // tgen
+  ff40(); // tgen
+};
+//SIG(-1 ff40) C1{ BC2{ v1 Fi} VBC3{ v1 Fi} v1 Fi}
+
+
+ ff40 ::ff40(const ABISELECT(__tsi64,int) *const *){}
+void  ff40 ::foo(){vfunc_called(this, "_ZN4ff403fooEv");}
+ff40 ::~ff40(){ note_dtor("ff40", this);} // tgen
+ff40 ::ff40(){ note_ctor("ff40", this);} // tgen
+
+static void Test_ff40()
+{
+  extern Class_Descriptor cd_ff40;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ff40, buf);
+    ff40 *dp, &lv = *(dp=new (buf) ff40());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ff40)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ff40)");
+    check_base_class_offset(lv, (cc40*), 0, "ff40");
+    check_base_class_offset(lv, (dd40*), ABISELECT(16,12), "ff40");
+    check_field_offset(lv, f, ABISELECT(12,8), "ff40.f");
+    test_class_info(&lv, &cd_ff40);
+    dp->~ff40();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vff40(Test_ff40, "ff40", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ff40C1Ev();
+extern void _ZN4ff40D1Ev();
+Name_Map name_map_ff40[] = {
+  NSPAIR(_ZN4ff40C1Ev),
+  NSPAIR(_ZN4ff40D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_cc40;
+extern VTBL_ENTRY _ZTI4cc40[];
+extern  VTBL_ENTRY _ZTV4cc40[];
+extern Class_Descriptor cd_dd40;
+extern VTBL_ENTRY _ZTI4dd40[];
+extern  VTBL_ENTRY _ZTV4dd40[];
+static Base_Class bases_ff40[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_cc40,    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},
+  {&cd_dd40,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4ff40[];
+extern void _ZN4ff403fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ff403fooEv,_ZTv0_n12_N4ff403fooEv)();
+extern void ABISELECT(_ZThn16_N4ff403fooEv,_ZThn12_N4ff403fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ff40[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff40[0]),
+  (VTBL_ENTRY)&_ZN4ff403fooEv,
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff40[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff403fooEv,_ZTv0_n12_N4ff403fooEv),
+};
+extern VTBL_ENTRY _ZTV4ff40[];
+static  VTT_ENTRY vtt_ff40[] = {
+  {&(_ZTV4ff40[3]),  3,8},
+  {&(_ZTV4ff40[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4ff40[];
+extern  VTBL_ENTRY _ZTV4ff40[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff40[];
+static VTBL_ENTRY alt_thunk_names98[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff403fooEv,_ZTv0_n12_N4ff403fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff403fooEv,_ZThn12_N4ff403fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_ff40 = {  "ff40", // class name
+  bases_ff40, 2,
+  &(vtc_ff40[0]), // expected_vtbl_contents
+  &(vtt_ff40[0]), // expected_vtt_contents
+  ABISELECT(32,20), // object size
+  NSPAIRA(_ZTI4ff40),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4ff40),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4ff40),2, //virtual table table var
+  2, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names98,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  gg40  : ee40 , virtual ff40 {
+  int g;
+   gg40(const ABISELECT(__tsi64,int) *const *); // _ZN4gg40C2Ev
+  virtual void  foo(); // _ZN4gg403fooEv
+  ~gg40(); // tgen
+  gg40(); // tgen
+};
+//SIG(1 gg40) C1{ BC2{ BC3{ v1 Fi} BC4{ v1 Fi} v1 Fi} VBC5{ BC6{ v1 Fi} VBC7{ v1 Fi} v1 Fi} v1 Fi}
+
+
+ gg40 ::gg40(const ABISELECT(__tsi64,int) *const *){}
+void  gg40 ::foo(){vfunc_called(this, "_ZN4gg403fooEv");}
+gg40 ::~gg40(){ note_dtor("gg40", this);} // tgen
+gg40 ::gg40(){ note_ctor("gg40", this);} // tgen
+
+static void Test_gg40()
+{
+  extern Class_Descriptor cd_gg40;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(10,12)];
+    init_test(&cd_gg40, buf);
+    gg40 *dp, &lv = *(dp=new (buf) gg40());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(72,44), "sizeof(gg40)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(gg40)");
+    check_base_class_offset(lv, (aa40*)(ee40*), 0, "gg40");
+    check_base_class_offset(lv, (bb40*)(ee40*), ABISELECT(16,8), "gg40");
+    check_base_class_offset(lv, (ee40*), 0, "gg40");
+    check_base_class_offset(lv, (cc40*)(ff40*), ABISELECT(40,24), "gg40");
+    check_base_class_offset(lv, (dd40*)(ff40*), ABISELECT(56,36), "gg40");
+    check_base_class_offset(lv, (ff40*), ABISELECT(40,24), "gg40");
+    check_field_offset(lv, g, ABISELECT(32,20), "gg40.g");
+    test_class_info(&lv, &cd_gg40);
+    dp->~gg40();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vgg40(Test_gg40, "gg40", ABISELECT(72,44));
+
+#else // __cplusplus
+
+extern void _ZN4gg40C1Ev();
+extern void _ZN4gg40D1Ev();
+Name_Map name_map_gg40[] = {
+  NSPAIR(_ZN4gg40C1Ev),
+  NSPAIR(_ZN4gg40D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa40;
+extern VTBL_ENTRY _ZTI4aa40[];
+extern  VTBL_ENTRY _ZTV4aa40[];
+extern Class_Descriptor cd_bb40;
+extern VTBL_ENTRY _ZTI4bb40[];
+extern  VTBL_ENTRY _ZTV4bb40[];
+extern Class_Descriptor cd_ee40;
+extern VTBL_ENTRY _ZTI4ee40[];
+extern  VTBL_ENTRY _ZTV4ee40[];
+extern Class_Descriptor cd_cc40;
+extern VTBL_ENTRY _ZTI4cc40[];
+extern  VTBL_ENTRY _ZTV4cc40[];
+extern Class_Descriptor cd_dd40;
+extern VTBL_ENTRY _ZTI4dd40[];
+extern  VTBL_ENTRY _ZTV4dd40[];
+extern Class_Descriptor cd_ff40;
+extern VTBL_ENTRY _ZTI4ff40[];
+extern  VTBL_ENTRY _ZTV4ff40[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4ff40[];
+static Base_Class bases_gg40[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa40,    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
+    4, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_bb40,    ABISELECT(16,8), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    5, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ee40,    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
+    6, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_cc40,    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
+    2, //init_seq
+    5, //immediately_derived
+  0, 0},
+  {&cd_dd40,    ABISELECT(56,36), //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
+    5, //immediately_derived
+  0, 1},
+  {&cd_ff40,    ABISELECT(40,24), //bcp->offset
+    8, //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 _ZTI4gg40[];
+extern void _ZN4gg403fooEv();
+extern void ABISELECT(_ZThn16_N4gg403fooEv,_ZThn8_N4gg403fooEv)();
+extern void ABISELECT(_ZTv0_n32_N4gg403fooEv,_ZTv0_n16_N4gg403fooEv)();
+extern void ABISELECT(_ZThn40_N4gg403fooEv,_ZThn24_N4gg403fooEv)() __attribute__((weak));
+extern void ABISELECT(_ZTv0_n24_N4gg403fooEv,_ZTv0_n12_N4gg403fooEv)();
+extern void ABISELECT(_ZThn56_N4gg403fooEv,_ZThn36_N4gg403fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_gg40[] = {
+  ABISELECT(56,36),
+  ABISELECT(40,24),
+  0,
+  (VTBL_ENTRY)&(_ZTI4gg40[0]),
+  (VTBL_ENTRY)&_ZN4gg403fooEv,
+  ABISELECT(-16,-8),
+  (VTBL_ENTRY)&(_ZTI4gg40[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZThn16_N4gg403fooEv,_ZThn8_N4gg403fooEv),
+  ABISELECT(-40,-24),
+  ABISELECT(16,12),
+  ABISELECT(-40,-24),
+  (VTBL_ENTRY)&(_ZTI4gg40[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N4gg403fooEv,_ZTv0_n16_N4gg403fooEv),
+  ABISELECT(-56,-36),
+  ABISELECT(-56,-36),
+  (VTBL_ENTRY)&(_ZTI4gg40[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4gg403fooEv,_ZTv0_n12_N4gg403fooEv),
+};
+extern VTBL_ENTRY _ZTV4gg40[];
+extern void _ZN4ff403fooEv();
+static  VTBL_ENTRY _tg__ZTV4ff40__4gg40[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ff40[0]),
+  (VTBL_ENTRY)&_ZN4ff403fooEv,
+};
+extern void ABISELECT(_ZTv0_n24_N4ff403fooEv,_ZTv0_n12_N4ff403fooEv)();
+extern void ABISELECT(_ZThn16_N4ff403fooEv,_ZThn12_N4ff403fooEv)() __attribute__((weak));
+static  VTBL_ENTRY _tg__ZTV4dd40__4ff40__4gg40[] = {
+  ABISELECT(-16,-12),
+  ABISELECT(-16,-12),
+  (VTBL_ENTRY)&(_ZTI4ff40[0]),
+  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ff403fooEv,_ZTv0_n12_N4ff403fooEv),
+};
+static  VTT_ENTRY vtt_gg40[] = {
+  {&(_ZTV4gg40[4]),  4,17},
+  {&(_ZTV4gg40[12]),  12,17},
+  {&(_ZTV4gg40[16]),  16,17},
+  {&(_tg__ZTV4ff40__4gg40[3]),  3,4},
+  {&(_tg__ZTV4dd40__4ff40__4gg40[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4gg40[];
+extern  VTBL_ENTRY _ZTV4gg40[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4gg40[];
+static VTBL_ENTRY alt_thunk_names99[] = {
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ff403fooEv,_ZTv0_n12_N4ff403fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn16_N4ff403fooEv,_ZThn12_N4ff403fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4gg403fooEv,_ZTv0_n12_N4gg403fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn56_N4gg403fooEv,_ZThn36_N4gg403fooEv),
+  ALT_NAMES_TERMINATOR,
+  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N4gg403fooEv,_ZTv0_n16_N4gg403fooEv), // 
+  (VTBL_ENTRY)ABISELECT(_ZThn40_N4gg403fooEv,_ZThn24_N4gg403fooEv),
+  ALT_NAMES_TERMINATOR,
+ALT_NAMES_TERMINATOR};
+Class_Descriptor cd_gg40 = {  "gg40", // class name
+  bases_gg40, 6,
+  &(vtc_gg40[0]), // expected_vtbl_contents
+  &(vtt_gg40[0]), // expected_vtt_contents
+  ABISELECT(72,44), // object size
+  NSPAIRA(_ZTI4gg40),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV4gg40),17, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4gg40),5, //virtual table table var
+  6, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  alt_thunk_names99,
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  aa41  {
+  int a;
+   aa41(); // _ZN4aa41C1Ev
+  virtual void  foo(); // _ZN4aa413fooEv
+  ~aa41(); // tgen
+};
+//SIG(-1 aa41) C1{ v1 Fi}
+
+
+ aa41 ::aa41(){ note_ctor("aa41", this);}
+void  aa41 ::foo(){vfunc_called(this, "_ZN4aa413fooEv");}
+aa41 ::~aa41(){ note_dtor("aa41", this);} // tgen
+
+static void Test_aa41()
+{
+  extern Class_Descriptor cd_aa41;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_aa41, buf);
+    aa41 *dp, &lv = *(dp=new (buf) aa41());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(aa41)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aa41)");
+    check_field_offset(lv, a, ABISELECT(8,4), "aa41.a");
+    test_class_info(&lv, &cd_aa41);
+    dp->~aa41();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vaa41(Test_aa41, "aa41", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4aa41C1Ev();
+extern void _ZN4aa41D1Ev();
+Name_Map name_map_aa41[] = {
+  NSPAIR(_ZN4aa41C1Ev),
+  NSPAIR(_ZN4aa41D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4aa41[];
+extern void _ZN4aa413fooEv();
+static  VTBL_ENTRY vtc_aa41[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4aa41[0]),
+  (VTBL_ENTRY)&_ZN4aa413fooEv,
+};
+extern VTBL_ENTRY _ZTI4aa41[];
+extern  VTBL_ENTRY _ZTV4aa41[];
+Class_Descriptor cd_aa41 = {  "aa41", // class name
+  0,0,//no base classes
+  &(vtc_aa41[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4aa41),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4aa41),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  bb41  {
+  int b;
+   bb41(); // _ZN4bb41C1Ev
+  virtual void  foo(); // _ZN4bb413fooEv
+  ~bb41(); // tgen
+};
+//SIG(-1 bb41) C1{ v1 Fi}
+
+
+ bb41 ::bb41(){ note_ctor("bb41", this);}
+void  bb41 ::foo(){vfunc_called(this, "_ZN4bb413fooEv");}
+bb41 ::~bb41(){ note_dtor("bb41", this);} // tgen
+
+static void Test_bb41()
+{
+  extern Class_Descriptor cd_bb41;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_bb41, buf);
+    bb41 *dp, &lv = *(dp=new (buf) bb41());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(bb41)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bb41)");
+    check_field_offset(lv, b, ABISELECT(8,4), "bb41.b");
+    test_class_info(&lv, &cd_bb41);
+    dp->~bb41();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vbb41(Test_bb41, "bb41", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4bb41C1Ev();
+extern void _ZN4bb41D1Ev();
+Name_Map name_map_bb41[] = {
+  NSPAIR(_ZN4bb41C1Ev),
+  NSPAIR(_ZN4bb41D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4bb41[];
+extern void _ZN4bb413fooEv();
+static  VTBL_ENTRY vtc_bb41[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4bb41[0]),
+  (VTBL_ENTRY)&_ZN4bb413fooEv,
+};
+extern VTBL_ENTRY _ZTI4bb41[];
+extern  VTBL_ENTRY _ZTV4bb41[];
+Class_Descriptor cd_bb41 = {  "bb41", // class name
+  0,0,//no base classes
+  &(vtc_bb41[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4bb41),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4bb41),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  cc41  {
+  int c;
+   cc41(); // _ZN4cc41C1Ev
+  virtual void  foo(); // _ZN4cc413fooEv
+  ~cc41(); // tgen
+};
+//SIG(-1 cc41) C1{ v1 Fi}
+
+
+ cc41 ::cc41(){ note_ctor("cc41", this);}
+void  cc41 ::foo(){vfunc_called(this, "_ZN4cc413fooEv");}
+cc41 ::~cc41(){ note_dtor("cc41", this);} // tgen
+
+static void Test_cc41()
+{
+  extern Class_Descriptor cd_cc41;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_cc41, buf);
+    cc41 *dp, &lv = *(dp=new (buf) cc41());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(cc41)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(cc41)");
+    check_field_offset(lv, c, ABISELECT(8,4), "cc41.c");
+    test_class_info(&lv, &cd_cc41);
+    dp->~cc41();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vcc41(Test_cc41, "cc41", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4cc41C1Ev();
+extern void _ZN4cc41D1Ev();
+Name_Map name_map_cc41[] = {
+  NSPAIR(_ZN4cc41C1Ev),
+  NSPAIR(_ZN4cc41D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4cc41[];
+extern void _ZN4cc413fooEv();
+static  VTBL_ENTRY vtc_cc41[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4cc41[0]),
+  (VTBL_ENTRY)&_ZN4cc413fooEv,
+};
+extern VTBL_ENTRY _ZTI4cc41[];
+extern  VTBL_ENTRY _ZTV4cc41[];
+Class_Descriptor cd_cc41 = {  "cc41", // class name
+  0,0,//no base classes
+  &(vtc_cc41[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4cc41),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4cc41),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  dd41  {
+  int d;
+   dd41(); // _ZN4dd41C1Ev
+  virtual void  foo(); // _ZN4dd413fooEv
+  ~dd41(); // tgen
+};
+//SIG(-1 dd41) C1{ v1 Fi}
+
+
+ dd41 ::dd41(){ note_ctor("dd41", this);}
+void  dd41 ::foo(){vfunc_called(this, "_ZN4dd413fooEv");}
+dd41 ::~dd41(){ note_dtor("dd41", this);} // tgen
+
+static void Test_dd41()
+{
+  extern Class_Descriptor cd_dd41;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_dd41, buf);
+    dd41 *dp, &lv = *(dp=new (buf) dd41());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(dd41)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(dd41)");
+    check_field_offset(lv, d, ABISELECT(8,4), "dd41.d");
+    test_class_info(&lv, &cd_dd41);
+    dp->~dd41();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vdd41(Test_dd41, "dd41", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4dd41C1Ev();
+extern void _ZN4dd41D1Ev();
+Name_Map name_map_dd41[] = {
+  NSPAIR(_ZN4dd41C1Ev),
+  NSPAIR(_ZN4dd41D1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4dd41[];
+extern void _ZN4dd413fooEv();
+static  VTBL_ENTRY vtc_dd41[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4dd41[0]),
+  (VTBL_ENTRY)&_ZN4dd413fooEv,
+};
+extern VTBL_ENTRY _ZTI4dd41[];
+extern  VTBL_ENTRY _ZTV4dd41[];
+Class_Descriptor cd_dd41 = {  "dd41", // class name
+  0,0,//no base classes
+  &(vtc_dd41[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4dd41),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4dd41),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  ee41  : virtual aa41 , bb41 {
+  int e;
+   ee41(const ABISELECT(__tsi64,int) *const *); // _ZN4ee41C2Ev
+  virtual void  foo(); // _ZN4ee413fooEv
+  ~ee41(); // tgen
+  ee41(); // tgen
+};
+//SIG(-1 ee41) C1{ VBC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
+
+
+ ee41 ::ee41(const ABISELECT(__tsi64,int) *const *){}
+void  ee41 ::foo(){vfunc_called(this, "_ZN4ee413fooEv");}
+ee41 ::~ee41(){ note_dtor("ee41", this);} // tgen
+ee41 ::ee41(){ note_ctor("ee41", this);} // tgen
+
+static void Test_ee41()
+{
+  extern Class_Descriptor cd_ee41;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(5,6)];
+    init_test(&cd_ee41, buf);
+    ee41 *dp, &lv = *(dp=new (buf) ee41());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(32,20), "sizeof(ee41)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ee41)");
+    check_base_class_offset(lv, (aa41*), ABISELECT(16,12), "ee41");
+    check_base_class_offset(lv, (bb41*), 0, "ee41");
+    check_field_offset(lv, e, ABISELECT(12,8), "ee41.e");
+    test_class_info(&lv, &cd_ee41);
+    dp->~ee41();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vee41(Test_ee41, "ee41", ABISELECT(32,20));
+
+#else // __cplusplus
+
+extern void _ZN4ee41C1Ev();
+extern void _ZN4ee41D1Ev();
+Name_Map name_map_ee41[] = {
+  NSPAIR(_ZN4ee41C1Ev),
+  NSPAIR(_ZN4ee41D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_aa41;
+extern VTBL_ENTRY _ZTI4aa41[];
+extern  VTBL_ENTRY _ZTV4aa41[];
+extern Class_Descriptor cd_bb41;
+extern VTBL_ENTRY _ZTI4bb41[];
+extern  VTBL_ENTRY _ZTV4bb41[];
+static Base_Class bases_ee41[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_aa41,    ABISELECT(16,12), //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
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_bb41,    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 _ZTI4ee41[];
+extern void _ZN4ee413fooEv();
+extern void ABISELECT(_ZTv0_n24_N4ee413fooEv,_ZTv0_n12_N4ee413fooEv)();
+extern void ABISELECT(_ZThn16_N4ee413fooEv,_ZThn12_N4ee413fooEv)() __attribute__((weak));
+static  VTBL_ENTRY vtc_ee41[] = {
+  ABISELECT(16,12),
+  0,
+  (VTBL_ENTRY)&(_ZTI4ee41[0]),

[... 16913 lines stripped ...]




More information about the llvm-commits mailing list