[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


Propchange: test-suite/trunk/ABI-Testsuite/test/misc/T_empty.x
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/T_nearly_empty.x
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/T_nearly_empty.x?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/T_nearly_empty.x (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/T_nearly_empty.x Mon Jul 28 16:20:34 2014
@@ -0,0 +1,7179 @@
+// 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  em_0  {
+};
+//SIG(-1 em_0) C1{}
+
+
+
+static void Test_em_0()
+{
+  {
+    init_simple_test("em_0");
+    em_0 lv;
+    check2(sizeof(lv), 1, "sizeof(em_0)");
+    check2(__alignof__(lv), 1, "__alignof__(em_0)");
+  }
+}
+static Arrange_To_Call_Me vem_0(Test_em_0, "em_0", 1);
+
+#else // __cplusplus
+
+extern VTBL_ENTRY _ZTI4em_0[];
+VTBL_ENTRY *P__ZTI4em_0 = _ZTI4em_0; 
+Class_Descriptor cd_em_0 = {  "em_0", // class name
+  0,0,//no base classes
+  0, // no vftv
+  0, //no vtt
+  1, // object size
+  NSPAIRA(_ZTI4em_0),ABISELECT(16,8), //typeinfo_var
+  {0,0},0, // virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  em_1  {
+};
+//SIG(-1 em_1) C1{}
+
+
+
+static void Test_em_1()
+{
+  {
+    init_simple_test("em_1");
+    em_1 lv;
+    check2(sizeof(lv), 1, "sizeof(em_1)");
+    check2(__alignof__(lv), 1, "__alignof__(em_1)");
+  }
+}
+static Arrange_To_Call_Me vem_1(Test_em_1, "em_1", 1);
+
+#else // __cplusplus
+
+extern VTBL_ENTRY _ZTI4em_1[];
+VTBL_ENTRY *P__ZTI4em_1 = _ZTI4em_1; 
+Class_Descriptor cd_em_1 = {  "em_1", // class name
+  0,0,//no base classes
+  0, // no vftv
+  0, //no vtt
+  1, // object size
+  NSPAIRA(_ZTI4em_1),ABISELECT(16,8), //typeinfo_var
+  {0,0},0, // virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ne_0  {
+  void  foo(); // _ZN4ne_03fooEv
+};
+//SIG(-1 ne_0) C1{ m}
+
+
+void  ne_0 ::foo(){}
+
+static void Test_ne_0()
+{
+  {
+    init_simple_test("ne_0");
+    ne_0 lv;
+    check2(sizeof(lv), 1, "sizeof(ne_0)");
+    check2(__alignof__(lv), 1, "__alignof__(ne_0)");
+  }
+}
+static Arrange_To_Call_Me vne_0(Test_ne_0, "ne_0", 1);
+
+#else // __cplusplus
+
+extern VTBL_ENTRY _ZTI4ne_0[];
+VTBL_ENTRY *P__ZTI4ne_0 = _ZTI4ne_0; 
+Class_Descriptor cd_ne_0 = {  "ne_0", // class name
+  0,0,//no base classes
+  0, // no vftv
+  0, //no vtt
+  1, // object size
+  NSPAIRA(_ZTI4ne_0),ABISELECT(16,8), //typeinfo_var
+  {0,0},0, // virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ne_1  {
+  int  :0;
+  void  foo(); // _ZN4ne_13fooEv
+};
+//SIG(-1 ne_1) C1{ m Fi:0}
+
+
+void  ne_1 ::foo(){}
+
+static void Test_ne_1()
+{
+  {
+    init_simple_test("ne_1");
+    static ne_1 lv;
+    check2(sizeof(lv), ABISELECT(1,1), "sizeof(ne_1)");
+    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(ne_1)");
+  }
+}
+static Arrange_To_Call_Me vne_1(Test_ne_1, "ne_1", ABISELECT(1,1));
+
+#else // __cplusplus
+
+extern VTBL_ENTRY _ZTI4ne_1[];
+VTBL_ENTRY *P__ZTI4ne_1 = _ZTI4ne_1; 
+Class_Descriptor cd_ne_1 = {  "ne_1", // class name
+  0,0,//no base classes
+  0, // no vftv
+  0, //no vtt
+  ABISELECT(1,1), // object size
+  NSPAIRA(_ZTI4ne_1),ABISELECT(16,8), //typeinfo_var
+  {0,0},0, // virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  ne_2  {
+  short  :0;
+  int  :0;
+  void  foo(); // _ZN4ne_23fooEv
+};
+//SIG(-1 ne_2) C1{ m Fs:0 Fi:0}
+
+
+void  ne_2 ::foo(){}
+
+static void Test_ne_2()
+{
+  {
+    init_simple_test("ne_2");
+    static ne_2 lv;
+    check2(sizeof(lv), ABISELECT(1,1), "sizeof(ne_2)");
+    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(ne_2)");
+  }
+}
+static Arrange_To_Call_Me vne_2(Test_ne_2, "ne_2", ABISELECT(1,1));
+
+#else // __cplusplus
+
+extern VTBL_ENTRY _ZTI4ne_2[];
+VTBL_ENTRY *P__ZTI4ne_2 = _ZTI4ne_2; 
+Class_Descriptor cd_ne_2 = {  "ne_2", // class name
+  0,0,//no base classes
+  0, // no vftv
+  0, //no vtt
+  ABISELECT(1,1), // object size
+  NSPAIRA(_ZTI4ne_2),ABISELECT(16,8), //typeinfo_var
+  {0,0},0, // virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  xx  {
+  int p;
+};
+//SIG(-1 xx) C1{ Fi}
+
+
+
+static void Test_xx()
+{
+  {
+    init_simple_test("xx");
+    xx lv;
+    check2(sizeof(lv), 4, "sizeof(xx)");
+    check2(__alignof__(lv), 4, "__alignof__(xx)");
+    check_field_offset(lv, p, 0, "xx.p");
+  }
+}
+static Arrange_To_Call_Me vxx(Test_xx, "xx", 4);
+
+#else // __cplusplus
+
+extern VTBL_ENTRY _ZTI2xx[];
+VTBL_ENTRY *P__ZTI2xx = _ZTI2xx; 
+Class_Descriptor cd_xx = {  "xx", // class name
+  0,0,//no base classes
+  0, // no vftv
+  0, //no vtt
+  4, // object size
+  NSPAIRA(_ZTI2xx),ABISELECT(16,8), //typeinfo_var
+  {0,0},0, // virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t01  : em_0 {
+  virtual void  bar(); // _ZN3t013barEv
+  ~t01(); // tgen
+  t01(); // tgen
+};
+//SIG(-1 t01) C1{ BC2{} v1}
+
+
+void  t01 ::bar(){vfunc_called(this, "_ZN3t013barEv");}
+t01 ::~t01(){ note_dtor("t01", this);} // tgen
+t01 ::t01(){ note_ctor("t01", this);} // tgen
+
+static void Test_t01()
+{
+  extern Class_Descriptor cd_t01;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t01, buf);
+    t01 *dp, &lv = *(dp=new (buf) t01());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t01)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t01)");
+    check_base_class_offset(lv, (em_0*), 0, "t01");
+    test_class_info(&lv, &cd_t01);
+    dp->~t01();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt01(Test_t01, "t01", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t01C1Ev();
+extern void _ZN3t01D1Ev();
+Name_Map name_map_t01[] = {
+  NSPAIR(_ZN3t01C1Ev),
+  NSPAIR(_ZN3t01D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+static Base_Class bases_t01[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t01[];
+extern void _ZN3t013barEv();
+static  VTBL_ENTRY vtc_t01[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3t01[0]),
+  (VTBL_ENTRY)&_ZN3t013barEv,
+};
+extern VTBL_ENTRY _ZTI3t01[];
+extern  VTBL_ENTRY _ZTV3t01[];
+Class_Descriptor cd_t01 = {  "t01", // class name
+  bases_t01, 1,
+  &(vtc_t01[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t01),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV3t01),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  t02  : virtual em_0 {
+  virtual void  bar(); // _ZN3t023barEv
+  ~t02(); // tgen
+  t02(); // tgen
+};
+//SIG(-1 t02) C1{ VBC2{} v1}
+
+
+void  t02 ::bar(){vfunc_called(this, "_ZN3t023barEv");}
+t02 ::~t02(){ note_dtor("t02", this);} // tgen
+t02 ::t02(){ note_ctor("t02", this);} // tgen
+
+static void Test_t02()
+{
+  extern Class_Descriptor cd_t02;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t02, buf);
+    t02 *dp, &lv = *(dp=new (buf) t02());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t02)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t02)");
+    check_base_class_offset(lv, (em_0*), 0, "t02");
+    test_class_info(&lv, &cd_t02);
+    dp->~t02();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt02(Test_t02, "t02", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t02C1Ev();
+extern void _ZN3t02D1Ev();
+Name_Map name_map_t02[] = {
+  NSPAIR(_ZN3t02C1Ev),
+  NSPAIR(_ZN3t02D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+static Base_Class bases_t02[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t02[];
+extern void _ZN3t023barEv();
+static  VTBL_ENTRY vtc_t02[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t02[0]),
+  (VTBL_ENTRY)&_ZN3t023barEv,
+};
+extern VTBL_ENTRY _ZTV3t02[];
+static  VTT_ENTRY vtt_t02[] = {
+  {&(_ZTV3t02[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t02[];
+extern  VTBL_ENTRY _ZTV3t02[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t02[];
+Class_Descriptor cd_t02 = {  "t02", // class name
+  bases_t02, 1,
+  &(vtc_t02[0]), // expected_vtbl_contents
+  &(vtt_t02[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t02),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV3t02),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t02),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t03  : em_0 , em_1 {
+  virtual void  bar(); // _ZN3t033barEv
+  ~t03(); // tgen
+  t03(); // tgen
+};
+//SIG(-1 t03) C1{ BC2{} BC3{} v1}
+
+
+void  t03 ::bar(){vfunc_called(this, "_ZN3t033barEv");}
+t03 ::~t03(){ note_dtor("t03", this);} // tgen
+t03 ::t03(){ note_ctor("t03", this);} // tgen
+
+static void Test_t03()
+{
+  extern Class_Descriptor cd_t03;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t03, buf);
+    t03 *dp, &lv = *(dp=new (buf) t03());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t03)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t03)");
+    check_base_class_offset(lv, (em_0*), 0, "t03");
+    check_base_class_offset(lv, (em_1*), 0, "t03");
+    test_class_info(&lv, &cd_t03);
+    dp->~t03();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt03(Test_t03, "t03", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t03C1Ev();
+extern void _ZN3t03D1Ev();
+Name_Map name_map_t03[] = {
+  NSPAIR(_ZN3t03C1Ev),
+  NSPAIR(_ZN3t03D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t03[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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_em_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t03[];
+extern void _ZN3t033barEv();
+static  VTBL_ENTRY vtc_t03[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3t03[0]),
+  (VTBL_ENTRY)&_ZN3t033barEv,
+};
+extern VTBL_ENTRY _ZTI3t03[];
+extern  VTBL_ENTRY _ZTV3t03[];
+Class_Descriptor cd_t03 = {  "t03", // class name
+  bases_t03, 2,
+  &(vtc_t03[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t03),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t03),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  t04  : virtual em_0 , em_1 {
+  virtual void  bar(); // _ZN3t043barEv
+  ~t04(); // tgen
+  t04(); // tgen
+};
+//SIG(-1 t04) C1{ VBC2{} BC3{} v1}
+
+
+void  t04 ::bar(){vfunc_called(this, "_ZN3t043barEv");}
+t04 ::~t04(){ note_dtor("t04", this);} // tgen
+t04 ::t04(){ note_ctor("t04", this);} // tgen
+
+static void Test_t04()
+{
+  extern Class_Descriptor cd_t04;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t04, buf);
+    t04 *dp, &lv = *(dp=new (buf) t04());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t04)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t04)");
+    check_base_class_offset(lv, (em_0*), 0, "t04");
+    check_base_class_offset(lv, (em_1*), 0, "t04");
+    test_class_info(&lv, &cd_t04);
+    dp->~t04();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt04(Test_t04, "t04", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t04C1Ev();
+extern void _ZN3t04D1Ev();
+Name_Map name_map_t04[] = {
+  NSPAIR(_ZN3t04C1Ev),
+  NSPAIR(_ZN3t04D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t04[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {&cd_em_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t04[];
+extern void _ZN3t043barEv();
+static  VTBL_ENTRY vtc_t04[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t04[0]),
+  (VTBL_ENTRY)&_ZN3t043barEv,
+};
+extern VTBL_ENTRY _ZTV3t04[];
+static  VTT_ENTRY vtt_t04[] = {
+  {&(_ZTV3t04[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t04[];
+extern  VTBL_ENTRY _ZTV3t04[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t04[];
+Class_Descriptor cd_t04 = {  "t04", // class name
+  bases_t04, 2,
+  &(vtc_t04[0]), // expected_vtbl_contents
+  &(vtt_t04[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t04),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t04),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t04),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t05  : em_0 , virtual em_1 {
+  virtual void  bar(); // _ZN3t053barEv
+  ~t05(); // tgen
+  t05(); // tgen
+};
+//SIG(-1 t05) C1{ BC2{} VBC3{} v1}
+
+
+void  t05 ::bar(){vfunc_called(this, "_ZN3t053barEv");}
+t05 ::~t05(){ note_dtor("t05", this);} // tgen
+t05 ::t05(){ note_ctor("t05", this);} // tgen
+
+static void Test_t05()
+{
+  extern Class_Descriptor cd_t05;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t05, buf);
+    t05 *dp, &lv = *(dp=new (buf) t05());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t05)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t05)");
+    check_base_class_offset(lv, (em_0*), 0, "t05");
+    check_base_class_offset(lv, (em_1*), 0, "t05");
+    test_class_info(&lv, &cd_t05);
+    dp->~t05();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt05(Test_t05, "t05", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t05C1Ev();
+extern void _ZN3t05D1Ev();
+Name_Map name_map_t05[] = {
+  NSPAIR(_ZN3t05C1Ev),
+  NSPAIR(_ZN3t05D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t05[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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_em_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t05[];
+extern void _ZN3t053barEv();
+static  VTBL_ENTRY vtc_t05[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t05[0]),
+  (VTBL_ENTRY)&_ZN3t053barEv,
+};
+extern VTBL_ENTRY _ZTV3t05[];
+static  VTT_ENTRY vtt_t05[] = {
+  {&(_ZTV3t05[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t05[];
+extern  VTBL_ENTRY _ZTV3t05[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t05[];
+Class_Descriptor cd_t05 = {  "t05", // class name
+  bases_t05, 2,
+  &(vtc_t05[0]), // expected_vtbl_contents
+  &(vtt_t05[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t05),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t05),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t05),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t06  : virtual em_0 , virtual em_1 {
+  virtual void  bar(); // _ZN3t063barEv
+  ~t06(); // tgen
+  t06(); // tgen
+};
+//SIG(-1 t06) C1{ VBC2{} VBC3{} v1}
+
+
+void  t06 ::bar(){vfunc_called(this, "_ZN3t063barEv");}
+t06 ::~t06(){ note_dtor("t06", this);} // tgen
+t06 ::t06(){ note_ctor("t06", this);} // tgen
+
+static void Test_t06()
+{
+  extern Class_Descriptor cd_t06;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t06, buf);
+    t06 *dp, &lv = *(dp=new (buf) t06());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t06)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t06)");
+    check_base_class_offset(lv, (em_0*), 0, "t06");
+    check_base_class_offset(lv, (em_1*), 0, "t06");
+    test_class_info(&lv, &cd_t06);
+    dp->~t06();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt06(Test_t06, "t06", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t06C1Ev();
+extern void _ZN3t06D1Ev();
+Name_Map name_map_t06[] = {
+  NSPAIR(_ZN3t06C1Ev),
+  NSPAIR(_ZN3t06D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t06[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {&cd_em_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t06[];
+extern void _ZN3t063barEv();
+static  VTBL_ENTRY vtc_t06[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t06[0]),
+  (VTBL_ENTRY)&_ZN3t063barEv,
+};
+extern VTBL_ENTRY _ZTV3t06[];
+static  VTT_ENTRY vtt_t06[] = {
+  {&(_ZTV3t06[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI3t06[];
+extern  VTBL_ENTRY _ZTV3t06[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t06[];
+Class_Descriptor cd_t06 = {  "t06", // class name
+  bases_t06, 2,
+  &(vtc_t06[0]), // expected_vtbl_contents
+  &(vtt_t06[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t06),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t06),5, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t06),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t07  : em_0 , ne_1 {
+  virtual void  bar(); // _ZN3t073barEv
+  ~t07(); // tgen
+  t07(); // tgen
+};
+//SIG(-1 t07) C1{ BC2{} BC3{ m Fi:0} v1}
+
+
+void  t07 ::bar(){vfunc_called(this, "_ZN3t073barEv");}
+t07 ::~t07(){ note_dtor("t07", this);} // tgen
+t07 ::t07(){ note_ctor("t07", this);} // tgen
+
+static void Test_t07()
+{
+  extern Class_Descriptor cd_t07;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t07, buf);
+    t07 *dp, &lv = *(dp=new (buf) t07());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t07)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t07)");
+    check_base_class_offset(lv, (em_0*), 0, "t07");
+    check_base_class_offset(lv, (ne_1*), 0, "t07");
+    test_class_info(&lv, &cd_t07);
+    dp->~t07();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt07(Test_t07, "t07", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t07C1Ev();
+extern void _ZN3t07D1Ev();
+Name_Map name_map_t07[] = {
+  NSPAIR(_ZN3t07C1Ev),
+  NSPAIR(_ZN3t07D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t07[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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_ne_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t07[];
+extern void _ZN3t073barEv();
+static  VTBL_ENTRY vtc_t07[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3t07[0]),
+  (VTBL_ENTRY)&_ZN3t073barEv,
+};
+extern VTBL_ENTRY _ZTI3t07[];
+extern  VTBL_ENTRY _ZTV3t07[];
+Class_Descriptor cd_t07 = {  "t07", // class name
+  bases_t07, 2,
+  &(vtc_t07[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t07),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t07),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  t08  : virtual em_0 , ne_1 {
+  virtual void  bar(); // _ZN3t083barEv
+  ~t08(); // tgen
+  t08(); // tgen
+};
+//SIG(-1 t08) C1{ VBC2{} BC3{ m Fi:0} v1}
+
+
+void  t08 ::bar(){vfunc_called(this, "_ZN3t083barEv");}
+t08 ::~t08(){ note_dtor("t08", this);} // tgen
+t08 ::t08(){ note_ctor("t08", this);} // tgen
+
+static void Test_t08()
+{
+  extern Class_Descriptor cd_t08;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t08, buf);
+    t08 *dp, &lv = *(dp=new (buf) t08());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t08)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t08)");
+    check_base_class_offset(lv, (em_0*), 0, "t08");
+    check_base_class_offset(lv, (ne_1*), 0, "t08");
+    test_class_info(&lv, &cd_t08);
+    dp->~t08();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt08(Test_t08, "t08", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t08C1Ev();
+extern void _ZN3t08D1Ev();
+Name_Map name_map_t08[] = {
+  NSPAIR(_ZN3t08C1Ev),
+  NSPAIR(_ZN3t08D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t08[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {&cd_ne_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t08[];
+extern void _ZN3t083barEv();
+static  VTBL_ENTRY vtc_t08[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t08[0]),
+  (VTBL_ENTRY)&_ZN3t083barEv,
+};
+extern VTBL_ENTRY _ZTV3t08[];
+static  VTT_ENTRY vtt_t08[] = {
+  {&(_ZTV3t08[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t08[];
+extern  VTBL_ENTRY _ZTV3t08[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t08[];
+Class_Descriptor cd_t08 = {  "t08", // class name
+  bases_t08, 2,
+  &(vtc_t08[0]), // expected_vtbl_contents
+  &(vtt_t08[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t08),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t08),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t08),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t09  : em_0 , virtual ne_1 {
+  virtual void  bar(); // _ZN3t093barEv
+  ~t09(); // tgen
+  t09(); // tgen
+};
+//SIG(-1 t09) C1{ BC2{} VBC3{ m Fi:0} v1}
+
+
+void  t09 ::bar(){vfunc_called(this, "_ZN3t093barEv");}
+t09 ::~t09(){ note_dtor("t09", this);} // tgen
+t09 ::t09(){ note_ctor("t09", this);} // tgen
+
+static void Test_t09()
+{
+  extern Class_Descriptor cd_t09;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t09, buf);
+    t09 *dp, &lv = *(dp=new (buf) t09());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t09)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t09)");
+    check_base_class_offset(lv, (em_0*), 0, "t09");
+    check_base_class_offset(lv, (ne_1*), 0, "t09");
+    test_class_info(&lv, &cd_t09);
+    dp->~t09();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt09(Test_t09, "t09", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t09C1Ev();
+extern void _ZN3t09D1Ev();
+Name_Map name_map_t09[] = {
+  NSPAIR(_ZN3t09C1Ev),
+  NSPAIR(_ZN3t09D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t09[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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_ne_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t09[];
+extern void _ZN3t093barEv();
+static  VTBL_ENTRY vtc_t09[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t09[0]),
+  (VTBL_ENTRY)&_ZN3t093barEv,
+};
+extern VTBL_ENTRY _ZTV3t09[];
+static  VTT_ENTRY vtt_t09[] = {
+  {&(_ZTV3t09[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t09[];
+extern  VTBL_ENTRY _ZTV3t09[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t09[];
+Class_Descriptor cd_t09 = {  "t09", // class name
+  bases_t09, 2,
+  &(vtc_t09[0]), // expected_vtbl_contents
+  &(vtt_t09[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t09),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t09),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t09),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t00  : virtual em_0 , virtual ne_1 {
+  virtual void  bar(); // _ZN3t003barEv
+  ~t00(); // tgen
+  t00(); // tgen
+};
+//SIG(-1 t00) C1{ VBC2{} VBC3{ m Fi:0} v1}
+
+
+void  t00 ::bar(){vfunc_called(this, "_ZN3t003barEv");}
+t00 ::~t00(){ note_dtor("t00", this);} // tgen
+t00 ::t00(){ note_ctor("t00", this);} // tgen
+
+static void Test_t00()
+{
+  extern Class_Descriptor cd_t00;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t00, buf);
+    t00 *dp, &lv = *(dp=new (buf) t00());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t00)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t00)");
+    check_base_class_offset(lv, (em_0*), 0, "t00");
+    check_base_class_offset(lv, (ne_1*), 0, "t00");
+    test_class_info(&lv, &cd_t00);
+    dp->~t00();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt00(Test_t00, "t00", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t00C1Ev();
+extern void _ZN3t00D1Ev();
+Name_Map name_map_t00[] = {
+  NSPAIR(_ZN3t00C1Ev),
+  NSPAIR(_ZN3t00D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t00[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {&cd_ne_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t00[];
+extern void _ZN3t003barEv();
+static  VTBL_ENTRY vtc_t00[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t00[0]),
+  (VTBL_ENTRY)&_ZN3t003barEv,
+};
+extern VTBL_ENTRY _ZTV3t00[];
+static  VTT_ENTRY vtt_t00[] = {
+  {&(_ZTV3t00[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI3t00[];
+extern  VTBL_ENTRY _ZTV3t00[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t00[];
+Class_Descriptor cd_t00 = {  "t00", // class name
+  bases_t00, 2,
+  &(vtc_t00[0]), // expected_vtbl_contents
+  &(vtt_t00[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t00),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t00),5, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t00),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t11  : ne_0 {
+  virtual void  bar(); // _ZN3t113barEv
+  ~t11(); // tgen
+  t11(); // tgen
+};
+//SIG(-1 t11) C1{ BC2{ m} v1}
+
+
+void  t11 ::bar(){vfunc_called(this, "_ZN3t113barEv");}
+t11 ::~t11(){ note_dtor("t11", this);} // tgen
+t11 ::t11(){ note_ctor("t11", this);} // tgen
+
+static void Test_t11()
+{
+  extern Class_Descriptor cd_t11;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t11, buf);
+    t11 *dp, &lv = *(dp=new (buf) t11());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t11)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t11)");
+    check_base_class_offset(lv, (ne_0*), 0, "t11");
+    test_class_info(&lv, &cd_t11);
+    dp->~t11();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt11(Test_t11, "t11", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t11C1Ev();
+extern void _ZN3t11D1Ev();
+Name_Map name_map_t11[] = {
+  NSPAIR(_ZN3t11C1Ev),
+  NSPAIR(_ZN3t11D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+static Base_Class bases_t11[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t11[];
+extern void _ZN3t113barEv();
+static  VTBL_ENTRY vtc_t11[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3t11[0]),
+  (VTBL_ENTRY)&_ZN3t113barEv,
+};
+extern VTBL_ENTRY _ZTI3t11[];
+extern  VTBL_ENTRY _ZTV3t11[];
+Class_Descriptor cd_t11 = {  "t11", // class name
+  bases_t11, 1,
+  &(vtc_t11[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t11),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV3t11),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  t12  : virtual ne_0 {
+  virtual void  bar(); // _ZN3t123barEv
+  ~t12(); // tgen
+  t12(); // tgen
+};
+//SIG(-1 t12) C1{ VBC2{ m} v1}
+
+
+void  t12 ::bar(){vfunc_called(this, "_ZN3t123barEv");}
+t12 ::~t12(){ note_dtor("t12", this);} // tgen
+t12 ::t12(){ note_ctor("t12", this);} // tgen
+
+static void Test_t12()
+{
+  extern Class_Descriptor cd_t12;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t12, buf);
+    t12 *dp, &lv = *(dp=new (buf) t12());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t12)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t12)");
+    check_base_class_offset(lv, (ne_0*), 0, "t12");
+    test_class_info(&lv, &cd_t12);
+    dp->~t12();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt12(Test_t12, "t12", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t12C1Ev();
+extern void _ZN3t12D1Ev();
+Name_Map name_map_t12[] = {
+  NSPAIR(_ZN3t12C1Ev),
+  NSPAIR(_ZN3t12D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+static Base_Class bases_t12[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t12[];
+extern void _ZN3t123barEv();
+static  VTBL_ENTRY vtc_t12[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t12[0]),
+  (VTBL_ENTRY)&_ZN3t123barEv,
+};
+extern VTBL_ENTRY _ZTV3t12[];
+static  VTT_ENTRY vtt_t12[] = {
+  {&(_ZTV3t12[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t12[];
+extern  VTBL_ENTRY _ZTV3t12[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t12[];
+Class_Descriptor cd_t12 = {  "t12", // class name
+  bases_t12, 1,
+  &(vtc_t12[0]), // expected_vtbl_contents
+  &(vtt_t12[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t12),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV3t12),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t12),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t13  : ne_0 , em_1 {
+  virtual void  bar(); // _ZN3t133barEv
+  ~t13(); // tgen
+  t13(); // tgen
+};
+//SIG(-1 t13) C1{ BC2{ m} BC3{} v1}
+
+
+void  t13 ::bar(){vfunc_called(this, "_ZN3t133barEv");}
+t13 ::~t13(){ note_dtor("t13", this);} // tgen
+t13 ::t13(){ note_ctor("t13", this);} // tgen
+
+static void Test_t13()
+{
+  extern Class_Descriptor cd_t13;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t13, buf);
+    t13 *dp, &lv = *(dp=new (buf) t13());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t13)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t13)");
+    check_base_class_offset(lv, (ne_0*), 0, "t13");
+    check_base_class_offset(lv, (em_1*), 0, "t13");
+    test_class_info(&lv, &cd_t13);
+    dp->~t13();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt13(Test_t13, "t13", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t13C1Ev();
+extern void _ZN3t13D1Ev();
+Name_Map name_map_t13[] = {
+  NSPAIR(_ZN3t13C1Ev),
+  NSPAIR(_ZN3t13D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t13[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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_em_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t13[];
+extern void _ZN3t133barEv();
+static  VTBL_ENTRY vtc_t13[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3t13[0]),
+  (VTBL_ENTRY)&_ZN3t133barEv,
+};
+extern VTBL_ENTRY _ZTI3t13[];
+extern  VTBL_ENTRY _ZTV3t13[];
+Class_Descriptor cd_t13 = {  "t13", // class name
+  bases_t13, 2,
+  &(vtc_t13[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t13),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t13),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  t14  : virtual ne_0 , em_1 {
+  virtual void  bar(); // _ZN3t143barEv
+  ~t14(); // tgen
+  t14(); // tgen
+};
+//SIG(-1 t14) C1{ VBC2{ m} BC3{} v1}
+
+
+void  t14 ::bar(){vfunc_called(this, "_ZN3t143barEv");}
+t14 ::~t14(){ note_dtor("t14", this);} // tgen
+t14 ::t14(){ note_ctor("t14", this);} // tgen
+
+static void Test_t14()
+{
+  extern Class_Descriptor cd_t14;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t14, buf);
+    t14 *dp, &lv = *(dp=new (buf) t14());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t14)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t14)");
+    check_base_class_offset(lv, (ne_0*), 0, "t14");
+    check_base_class_offset(lv, (em_1*), 0, "t14");
+    test_class_info(&lv, &cd_t14);
+    dp->~t14();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt14(Test_t14, "t14", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t14C1Ev();
+extern void _ZN3t14D1Ev();
+Name_Map name_map_t14[] = {
+  NSPAIR(_ZN3t14C1Ev),
+  NSPAIR(_ZN3t14D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t14[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {&cd_em_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t14[];
+extern void _ZN3t143barEv();
+static  VTBL_ENTRY vtc_t14[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t14[0]),
+  (VTBL_ENTRY)&_ZN3t143barEv,
+};
+extern VTBL_ENTRY _ZTV3t14[];
+static  VTT_ENTRY vtt_t14[] = {
+  {&(_ZTV3t14[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t14[];
+extern  VTBL_ENTRY _ZTV3t14[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t14[];
+Class_Descriptor cd_t14 = {  "t14", // class name
+  bases_t14, 2,
+  &(vtc_t14[0]), // expected_vtbl_contents
+  &(vtt_t14[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t14),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t14),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t14),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t15  : ne_0 , virtual em_1 {
+  virtual void  bar(); // _ZN3t153barEv
+  ~t15(); // tgen
+  t15(); // tgen
+};
+//SIG(-1 t15) C1{ BC2{ m} VBC3{} v1}
+
+
+void  t15 ::bar(){vfunc_called(this, "_ZN3t153barEv");}
+t15 ::~t15(){ note_dtor("t15", this);} // tgen
+t15 ::t15(){ note_ctor("t15", this);} // tgen
+
+static void Test_t15()
+{
+  extern Class_Descriptor cd_t15;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t15, buf);
+    t15 *dp, &lv = *(dp=new (buf) t15());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t15)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t15)");
+    check_base_class_offset(lv, (ne_0*), 0, "t15");
+    check_base_class_offset(lv, (em_1*), 0, "t15");
+    test_class_info(&lv, &cd_t15);
+    dp->~t15();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt15(Test_t15, "t15", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t15C1Ev();
+extern void _ZN3t15D1Ev();
+Name_Map name_map_t15[] = {
+  NSPAIR(_ZN3t15C1Ev),
+  NSPAIR(_ZN3t15D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t15[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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_em_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t15[];
+extern void _ZN3t153barEv();
+static  VTBL_ENTRY vtc_t15[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t15[0]),
+  (VTBL_ENTRY)&_ZN3t153barEv,
+};
+extern VTBL_ENTRY _ZTV3t15[];
+static  VTT_ENTRY vtt_t15[] = {
+  {&(_ZTV3t15[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t15[];
+extern  VTBL_ENTRY _ZTV3t15[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t15[];
+Class_Descriptor cd_t15 = {  "t15", // class name
+  bases_t15, 2,
+  &(vtc_t15[0]), // expected_vtbl_contents
+  &(vtt_t15[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t15),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t15),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t15),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t16  : virtual ne_0 , virtual em_1 {
+  virtual void  bar(); // _ZN3t163barEv
+  ~t16(); // tgen
+  t16(); // tgen
+};
+//SIG(-1 t16) C1{ VBC2{ m} VBC3{} v1}
+
+
+void  t16 ::bar(){vfunc_called(this, "_ZN3t163barEv");}
+t16 ::~t16(){ note_dtor("t16", this);} // tgen
+t16 ::t16(){ note_ctor("t16", this);} // tgen
+
+static void Test_t16()
+{
+  extern Class_Descriptor cd_t16;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t16, buf);
+    t16 *dp, &lv = *(dp=new (buf) t16());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t16)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t16)");
+    check_base_class_offset(lv, (ne_0*), 0, "t16");
+    check_base_class_offset(lv, (em_1*), 0, "t16");
+    test_class_info(&lv, &cd_t16);
+    dp->~t16();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt16(Test_t16, "t16", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t16C1Ev();
+extern void _ZN3t16D1Ev();
+Name_Map name_map_t16[] = {
+  NSPAIR(_ZN3t16C1Ev),
+  NSPAIR(_ZN3t16D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t16[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {&cd_em_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t16[];
+extern void _ZN3t163barEv();
+static  VTBL_ENTRY vtc_t16[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t16[0]),
+  (VTBL_ENTRY)&_ZN3t163barEv,
+};
+extern VTBL_ENTRY _ZTV3t16[];
+static  VTT_ENTRY vtt_t16[] = {
+  {&(_ZTV3t16[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI3t16[];
+extern  VTBL_ENTRY _ZTV3t16[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t16[];
+Class_Descriptor cd_t16 = {  "t16", // class name
+  bases_t16, 2,
+  &(vtc_t16[0]), // expected_vtbl_contents
+  &(vtt_t16[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t16),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t16),5, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t16),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t17  : ne_0 , ne_1 {
+  virtual void  bar(); // _ZN3t173barEv
+  ~t17(); // tgen
+  t17(); // tgen
+};
+//SIG(-1 t17) C1{ BC2{ m} BC3{ m Fi:0} v1}
+
+
+void  t17 ::bar(){vfunc_called(this, "_ZN3t173barEv");}
+t17 ::~t17(){ note_dtor("t17", this);} // tgen
+t17 ::t17(){ note_ctor("t17", this);} // tgen
+
+static void Test_t17()
+{
+  extern Class_Descriptor cd_t17;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t17, buf);
+    t17 *dp, &lv = *(dp=new (buf) t17());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t17)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t17)");
+    check_base_class_offset(lv, (ne_0*), 0, "t17");
+    check_base_class_offset(lv, (ne_1*), 0, "t17");
+    test_class_info(&lv, &cd_t17);
+    dp->~t17();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt17(Test_t17, "t17", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t17C1Ev();
+extern void _ZN3t17D1Ev();
+Name_Map name_map_t17[] = {
+  NSPAIR(_ZN3t17C1Ev),
+  NSPAIR(_ZN3t17D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t17[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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_ne_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t17[];
+extern void _ZN3t173barEv();
+static  VTBL_ENTRY vtc_t17[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3t17[0]),
+  (VTBL_ENTRY)&_ZN3t173barEv,
+};
+extern VTBL_ENTRY _ZTI3t17[];
+extern  VTBL_ENTRY _ZTV3t17[];
+Class_Descriptor cd_t17 = {  "t17", // class name
+  bases_t17, 2,
+  &(vtc_t17[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t17),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t17),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  t18  : virtual ne_0 , ne_1 {
+  virtual void  bar(); // _ZN3t183barEv
+  ~t18(); // tgen
+  t18(); // tgen
+};
+//SIG(-1 t18) C1{ VBC2{ m} BC3{ m Fi:0} v1}
+
+
+void  t18 ::bar(){vfunc_called(this, "_ZN3t183barEv");}
+t18 ::~t18(){ note_dtor("t18", this);} // tgen
+t18 ::t18(){ note_ctor("t18", this);} // tgen
+
+static void Test_t18()
+{
+  extern Class_Descriptor cd_t18;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t18, buf);
+    t18 *dp, &lv = *(dp=new (buf) t18());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t18)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t18)");
+    check_base_class_offset(lv, (ne_0*), 0, "t18");
+    check_base_class_offset(lv, (ne_1*), 0, "t18");
+    test_class_info(&lv, &cd_t18);
+    dp->~t18();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt18(Test_t18, "t18", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t18C1Ev();
+extern void _ZN3t18D1Ev();
+Name_Map name_map_t18[] = {
+  NSPAIR(_ZN3t18C1Ev),
+  NSPAIR(_ZN3t18D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t18[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {&cd_ne_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t18[];
+extern void _ZN3t183barEv();
+static  VTBL_ENTRY vtc_t18[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t18[0]),
+  (VTBL_ENTRY)&_ZN3t183barEv,
+};
+extern VTBL_ENTRY _ZTV3t18[];
+static  VTT_ENTRY vtt_t18[] = {
+  {&(_ZTV3t18[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t18[];
+extern  VTBL_ENTRY _ZTV3t18[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t18[];
+Class_Descriptor cd_t18 = {  "t18", // class name
+  bases_t18, 2,
+  &(vtc_t18[0]), // expected_vtbl_contents
+  &(vtt_t18[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t18),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t18),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t18),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t19  : ne_0 , virtual ne_1 {
+  virtual void  bar(); // _ZN3t193barEv
+  ~t19(); // tgen
+  t19(); // tgen
+};
+//SIG(-1 t19) C1{ BC2{ m} VBC3{ m Fi:0} v1}
+
+
+void  t19 ::bar(){vfunc_called(this, "_ZN3t193barEv");}
+t19 ::~t19(){ note_dtor("t19", this);} // tgen
+t19 ::t19(){ note_ctor("t19", this);} // tgen
+
+static void Test_t19()
+{
+  extern Class_Descriptor cd_t19;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t19, buf);
+    t19 *dp, &lv = *(dp=new (buf) t19());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t19)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t19)");
+    check_base_class_offset(lv, (ne_0*), 0, "t19");
+    check_base_class_offset(lv, (ne_1*), 0, "t19");
+    test_class_info(&lv, &cd_t19);
+    dp->~t19();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt19(Test_t19, "t19", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t19C1Ev();
+extern void _ZN3t19D1Ev();
+Name_Map name_map_t19[] = {
+  NSPAIR(_ZN3t19C1Ev),
+  NSPAIR(_ZN3t19D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t19[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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_ne_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t19[];
+extern void _ZN3t193barEv();
+static  VTBL_ENTRY vtc_t19[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t19[0]),
+  (VTBL_ENTRY)&_ZN3t193barEv,
+};
+extern VTBL_ENTRY _ZTV3t19[];
+static  VTT_ENTRY vtt_t19[] = {
+  {&(_ZTV3t19[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t19[];
+extern  VTBL_ENTRY _ZTV3t19[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t19[];
+Class_Descriptor cd_t19 = {  "t19", // class name
+  bases_t19, 2,
+  &(vtc_t19[0]), // expected_vtbl_contents
+  &(vtt_t19[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t19),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t19),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t19),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t20  : virtual ne_0 , virtual ne_1 {
+  virtual void  bar(); // _ZN3t203barEv
+  ~t20(); // tgen
+  t20(); // tgen
+};
+//SIG(-1 t20) C1{ VBC2{ m} VBC3{ m Fi:0} v1}
+
+
+void  t20 ::bar(){vfunc_called(this, "_ZN3t203barEv");}
+t20 ::~t20(){ note_dtor("t20", this);} // tgen
+t20 ::t20(){ note_ctor("t20", this);} // tgen
+
+static void Test_t20()
+{
+  extern Class_Descriptor cd_t20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_t20, buf);
+    t20 *dp, &lv = *(dp=new (buf) t20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(t20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t20)");
+    check_base_class_offset(lv, (ne_0*), 0, "t20");
+    check_base_class_offset(lv, (ne_1*), 0, "t20");
+    test_class_info(&lv, &cd_t20);
+    dp->~t20();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt20(Test_t20, "t20", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN3t20C1Ev();
+extern void _ZN3t20D1Ev();
+Name_Map name_map_t20[] = {
+  NSPAIR(_ZN3t20C1Ev),
+  NSPAIR(_ZN3t20D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t20[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {&cd_ne_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t20[];
+extern void _ZN3t203barEv();
+static  VTBL_ENTRY vtc_t20[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t20[0]),
+  (VTBL_ENTRY)&_ZN3t203barEv,
+};
+extern VTBL_ENTRY _ZTV3t20[];
+static  VTT_ENTRY vtt_t20[] = {
+  {&(_ZTV3t20[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI3t20[];
+extern  VTBL_ENTRY _ZTV3t20[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t20[];
+Class_Descriptor cd_t20 = {  "t20", // class name
+  bases_t20, 2,
+  &(vtc_t20[0]), // expected_vtbl_contents
+  &(vtt_t20[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI3t20),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t20),5, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t20),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t21  : xx {
+  virtual void  bar(); // _ZN3t213barEv
+  ~t21(); // tgen
+  t21(); // tgen
+};
+//SIG(-1 t21) C1{ BC2{ Fi} v1}
+
+
+void  t21 ::bar(){vfunc_called(this, "_ZN3t213barEv");}
+t21 ::~t21(){ note_dtor("t21", this);} // tgen
+t21 ::t21(){ note_ctor("t21", this);} // tgen
+
+static void Test_t21()
+{
+  extern Class_Descriptor cd_t21;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t21, buf);
+    t21 *dp, &lv = *(dp=new (buf) t21());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t21)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t21)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t21");
+    test_class_info(&lv, &cd_t21);
+    dp->~t21();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt21(Test_t21, "t21", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t21C1Ev();
+extern void _ZN3t21D1Ev();
+Name_Map name_map_t21[] = {
+  NSPAIR(_ZN3t21C1Ev),
+  NSPAIR(_ZN3t21D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+static Base_Class bases_t21[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t21[];
+extern void _ZN3t213barEv();
+static  VTBL_ENTRY vtc_t21[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3t21[0]),
+  (VTBL_ENTRY)&_ZN3t213barEv,
+};
+extern VTBL_ENTRY _ZTI3t21[];
+extern  VTBL_ENTRY _ZTV3t21[];
+Class_Descriptor cd_t21 = {  "t21", // class name
+  bases_t21, 1,
+  &(vtc_t21[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t21),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV3t21),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  t22  : virtual xx {
+  virtual void  bar(); // _ZN3t223barEv
+  ~t22(); // tgen
+  t22(); // tgen
+};
+//SIG(-1 t22) C1{ VBC2{ Fi} v1}
+
+
+void  t22 ::bar(){vfunc_called(this, "_ZN3t223barEv");}
+t22 ::~t22(){ note_dtor("t22", this);} // tgen
+t22 ::t22(){ note_ctor("t22", this);} // tgen
+
+static void Test_t22()
+{
+  extern Class_Descriptor cd_t22;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t22, buf);
+    t22 *dp, &lv = *(dp=new (buf) t22());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t22)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t22)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t22");
+    test_class_info(&lv, &cd_t22);
+    dp->~t22();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt22(Test_t22, "t22", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t22C1Ev();
+extern void _ZN3t22D1Ev();
+Name_Map name_map_t22[] = {
+  NSPAIR(_ZN3t22C1Ev),
+  NSPAIR(_ZN3t22D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+static Base_Class bases_t22[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t22[];
+extern void _ZN3t223barEv();
+static  VTBL_ENTRY vtc_t22[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t22[0]),
+  (VTBL_ENTRY)&_ZN3t223barEv,
+};
+extern VTBL_ENTRY _ZTV3t22[];
+static  VTT_ENTRY vtt_t22[] = {
+  {&(_ZTV3t22[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t22[];
+extern  VTBL_ENTRY _ZTV3t22[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t22[];
+Class_Descriptor cd_t22 = {  "t22", // class name
+  bases_t22, 1,
+  &(vtc_t22[0]), // expected_vtbl_contents
+  &(vtt_t22[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t22),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV3t22),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t22),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t23  : xx , em_1 {
+  virtual void  bar(); // _ZN3t233barEv
+  ~t23(); // tgen
+  t23(); // tgen
+};
+//SIG(-1 t23) C1{ BC2{ Fi} BC3{} v1}
+
+
+void  t23 ::bar(){vfunc_called(this, "_ZN3t233barEv");}
+t23 ::~t23(){ note_dtor("t23", this);} // tgen
+t23 ::t23(){ note_ctor("t23", this);} // tgen
+
+static void Test_t23()
+{
+  extern Class_Descriptor cd_t23;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t23, buf);
+    t23 *dp, &lv = *(dp=new (buf) t23());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t23)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t23)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t23");
+    check_base_class_offset(lv, (em_1*), 0, "t23");
+    test_class_info(&lv, &cd_t23);
+    dp->~t23();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt23(Test_t23, "t23", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t23C1Ev();
+extern void _ZN3t23D1Ev();
+Name_Map name_map_t23[] = {
+  NSPAIR(_ZN3t23C1Ev),
+  NSPAIR(_ZN3t23D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t23[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_em_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t23[];
+extern void _ZN3t233barEv();
+static  VTBL_ENTRY vtc_t23[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3t23[0]),
+  (VTBL_ENTRY)&_ZN3t233barEv,
+};
+extern VTBL_ENTRY _ZTI3t23[];
+extern  VTBL_ENTRY _ZTV3t23[];
+Class_Descriptor cd_t23 = {  "t23", // class name
+  bases_t23, 2,
+  &(vtc_t23[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t23),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t23),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  t24  : virtual xx , em_1 {
+  virtual void  bar(); // _ZN3t243barEv
+  ~t24(); // tgen
+  t24(); // tgen
+};
+//SIG(-1 t24) C1{ VBC2{ Fi} BC3{} v1}
+
+
+void  t24 ::bar(){vfunc_called(this, "_ZN3t243barEv");}
+t24 ::~t24(){ note_dtor("t24", this);} // tgen
+t24 ::t24(){ note_ctor("t24", this);} // tgen
+
+static void Test_t24()
+{
+  extern Class_Descriptor cd_t24;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t24, buf);
+    t24 *dp, &lv = *(dp=new (buf) t24());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t24)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t24)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t24");
+    check_base_class_offset(lv, (em_1*), 0, "t24");
+    test_class_info(&lv, &cd_t24);
+    dp->~t24();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt24(Test_t24, "t24", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t24C1Ev();
+extern void _ZN3t24D1Ev();
+Name_Map name_map_t24[] = {
+  NSPAIR(_ZN3t24C1Ev),
+  NSPAIR(_ZN3t24D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t24[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_em_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t24[];
+extern void _ZN3t243barEv();
+static  VTBL_ENTRY vtc_t24[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t24[0]),
+  (VTBL_ENTRY)&_ZN3t243barEv,
+};
+extern VTBL_ENTRY _ZTV3t24[];
+static  VTT_ENTRY vtt_t24[] = {
+  {&(_ZTV3t24[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t24[];
+extern  VTBL_ENTRY _ZTV3t24[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t24[];
+Class_Descriptor cd_t24 = {  "t24", // class name
+  bases_t24, 2,
+  &(vtc_t24[0]), // expected_vtbl_contents
+  &(vtt_t24[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t24),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t24),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t24),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t25  : xx , virtual em_1 {
+  virtual void  bar(); // _ZN3t253barEv
+  ~t25(); // tgen
+  t25(); // tgen
+};
+//SIG(-1 t25) C1{ BC2{ Fi} VBC3{} v1}
+
+
+void  t25 ::bar(){vfunc_called(this, "_ZN3t253barEv");}
+t25 ::~t25(){ note_dtor("t25", this);} // tgen
+t25 ::t25(){ note_ctor("t25", this);} // tgen
+
+static void Test_t25()
+{
+  extern Class_Descriptor cd_t25;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t25, buf);
+    t25 *dp, &lv = *(dp=new (buf) t25());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t25)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t25)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t25");
+    check_base_class_offset(lv, (em_1*), 0, "t25");
+    test_class_info(&lv, &cd_t25);
+    dp->~t25();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt25(Test_t25, "t25", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t25C1Ev();
+extern void _ZN3t25D1Ev();
+Name_Map name_map_t25[] = {
+  NSPAIR(_ZN3t25C1Ev),
+  NSPAIR(_ZN3t25D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t25[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_em_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t25[];
+extern void _ZN3t253barEv();
+static  VTBL_ENTRY vtc_t25[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t25[0]),
+  (VTBL_ENTRY)&_ZN3t253barEv,
+};
+extern VTBL_ENTRY _ZTV3t25[];
+static  VTT_ENTRY vtt_t25[] = {
+  {&(_ZTV3t25[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t25[];
+extern  VTBL_ENTRY _ZTV3t25[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t25[];
+Class_Descriptor cd_t25 = {  "t25", // class name
+  bases_t25, 2,
+  &(vtc_t25[0]), // expected_vtbl_contents
+  &(vtt_t25[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t25),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t25),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t25),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t26  : virtual xx , virtual em_1 {
+  virtual void  bar(); // _ZN3t263barEv
+  ~t26(); // tgen
+  t26(); // tgen
+};
+//SIG(-1 t26) C1{ VBC2{ Fi} VBC3{} v1}
+
+
+void  t26 ::bar(){vfunc_called(this, "_ZN3t263barEv");}
+t26 ::~t26(){ note_dtor("t26", this);} // tgen
+t26 ::t26(){ note_ctor("t26", this);} // tgen
+
+static void Test_t26()
+{
+  extern Class_Descriptor cd_t26;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t26, buf);
+    t26 *dp, &lv = *(dp=new (buf) t26());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t26)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t26)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t26");
+    check_base_class_offset(lv, (em_1*), 0, "t26");
+    test_class_info(&lv, &cd_t26);
+    dp->~t26();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt26(Test_t26, "t26", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t26C1Ev();
+extern void _ZN3t26D1Ev();
+Name_Map name_map_t26[] = {
+  NSPAIR(_ZN3t26C1Ev),
+  NSPAIR(_ZN3t26D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+static Base_Class bases_t26[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_em_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t26[];
+extern void _ZN3t263barEv();
+static  VTBL_ENTRY vtc_t26[] = {
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t26[0]),
+  (VTBL_ENTRY)&_ZN3t263barEv,
+};
+extern VTBL_ENTRY _ZTV3t26[];
+static  VTT_ENTRY vtt_t26[] = {
+  {&(_ZTV3t26[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI3t26[];
+extern  VTBL_ENTRY _ZTV3t26[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t26[];
+Class_Descriptor cd_t26 = {  "t26", // class name
+  bases_t26, 2,
+  &(vtc_t26[0]), // expected_vtbl_contents
+  &(vtt_t26[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t26),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t26),5, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t26),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t27  : xx , ne_1 {
+  virtual void  bar(); // _ZN3t273barEv
+  ~t27(); // tgen
+  t27(); // tgen
+};
+//SIG(-1 t27) C1{ BC2{ Fi} BC3{ m Fi:0} v1}
+
+
+void  t27 ::bar(){vfunc_called(this, "_ZN3t273barEv");}
+t27 ::~t27(){ note_dtor("t27", this);} // tgen
+t27 ::t27(){ note_ctor("t27", this);} // tgen
+
+static void Test_t27()
+{
+  extern Class_Descriptor cd_t27;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t27, buf);
+    t27 *dp, &lv = *(dp=new (buf) t27());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t27)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t27)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t27");
+    check_base_class_offset(lv, (ne_1*), 0, "t27");
+    test_class_info(&lv, &cd_t27);
+    dp->~t27();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt27(Test_t27, "t27", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t27C1Ev();
+extern void _ZN3t27D1Ev();
+Name_Map name_map_t27[] = {
+  NSPAIR(_ZN3t27C1Ev),
+  NSPAIR(_ZN3t27D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t27[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_ne_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t27[];
+extern void _ZN3t273barEv();
+static  VTBL_ENTRY vtc_t27[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI3t27[0]),
+  (VTBL_ENTRY)&_ZN3t273barEv,
+};
+extern VTBL_ENTRY _ZTI3t27[];
+extern  VTBL_ENTRY _ZTV3t27[];
+Class_Descriptor cd_t27 = {  "t27", // class name
+  bases_t27, 2,
+  &(vtc_t27[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t27),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t27),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  t28  : virtual xx , ne_1 {
+  virtual void  bar(); // _ZN3t283barEv
+  ~t28(); // tgen
+  t28(); // tgen
+};
+//SIG(-1 t28) C1{ VBC2{ Fi} BC3{ m Fi:0} v1}
+
+
+void  t28 ::bar(){vfunc_called(this, "_ZN3t283barEv");}
+t28 ::~t28(){ note_dtor("t28", this);} // tgen
+t28 ::t28(){ note_ctor("t28", this);} // tgen
+
+static void Test_t28()
+{
+  extern Class_Descriptor cd_t28;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t28, buf);
+    t28 *dp, &lv = *(dp=new (buf) t28());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t28)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t28)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t28");
+    check_base_class_offset(lv, (ne_1*), 0, "t28");
+    test_class_info(&lv, &cd_t28);
+    dp->~t28();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt28(Test_t28, "t28", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t28C1Ev();
+extern void _ZN3t28D1Ev();
+Name_Map name_map_t28[] = {
+  NSPAIR(_ZN3t28C1Ev),
+  NSPAIR(_ZN3t28D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t28[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_ne_1,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI3t28[];
+extern void _ZN3t283barEv();
+static  VTBL_ENTRY vtc_t28[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t28[0]),
+  (VTBL_ENTRY)&_ZN3t283barEv,
+};
+extern VTBL_ENTRY _ZTV3t28[];
+static  VTT_ENTRY vtt_t28[] = {
+  {&(_ZTV3t28[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t28[];
+extern  VTBL_ENTRY _ZTV3t28[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t28[];
+Class_Descriptor cd_t28 = {  "t28", // class name
+  bases_t28, 2,
+  &(vtc_t28[0]), // expected_vtbl_contents
+  &(vtt_t28[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t28),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t28),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t28),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t29  : xx , virtual ne_1 {
+  virtual void  bar(); // _ZN3t293barEv
+  ~t29(); // tgen
+  t29(); // tgen
+};
+//SIG(-1 t29) C1{ BC2{ Fi} VBC3{ m Fi:0} v1}
+
+
+void  t29 ::bar(){vfunc_called(this, "_ZN3t293barEv");}
+t29 ::~t29(){ note_dtor("t29", this);} // tgen
+t29 ::t29(){ note_ctor("t29", this);} // tgen
+
+static void Test_t29()
+{
+  extern Class_Descriptor cd_t29;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t29, buf);
+    t29 *dp, &lv = *(dp=new (buf) t29());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t29)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t29)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t29");
+    check_base_class_offset(lv, (ne_1*), 0, "t29");
+    test_class_info(&lv, &cd_t29);
+    dp->~t29();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt29(Test_t29, "t29", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t29C1Ev();
+extern void _ZN3t29D1Ev();
+Name_Map name_map_t29[] = {
+  NSPAIR(_ZN3t29C1Ev),
+  NSPAIR(_ZN3t29D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t29[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {&cd_ne_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t29[];
+extern void _ZN3t293barEv();
+static  VTBL_ENTRY vtc_t29[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t29[0]),
+  (VTBL_ENTRY)&_ZN3t293barEv,
+};
+extern VTBL_ENTRY _ZTV3t29[];
+static  VTT_ENTRY vtt_t29[] = {
+  {&(_ZTV3t29[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3t29[];
+extern  VTBL_ENTRY _ZTV3t29[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t29[];
+Class_Descriptor cd_t29 = {  "t29", // class name
+  bases_t29, 2,
+  &(vtc_t29[0]), // expected_vtbl_contents
+  &(vtt_t29[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t29),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t29),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t29),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  t30  : virtual xx , virtual ne_1 {
+  virtual void  bar(); // _ZN3t303barEv
+  ~t30(); // tgen
+  t30(); // tgen
+};
+//SIG(-1 t30) C1{ VBC2{ Fi} VBC3{ m Fi:0} v1}
+
+
+void  t30 ::bar(){vfunc_called(this, "_ZN3t303barEv");}
+t30 ::~t30(){ note_dtor("t30", this);} // tgen
+t30 ::t30(){ note_ctor("t30", this);} // tgen
+
+static void Test_t30()
+{
+  extern Class_Descriptor cd_t30;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_t30, buf);
+    t30 *dp, &lv = *(dp=new (buf) t30());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(t30)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(t30)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "t30");
+    check_base_class_offset(lv, (ne_1*), 0, "t30");
+    test_class_info(&lv, &cd_t30);
+    dp->~t30();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vt30(Test_t30, "t30", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3t30C1Ev();
+extern void _ZN3t30D1Ev();
+Name_Map name_map_t30[] = {
+  NSPAIR(_ZN3t30C1Ev),
+  NSPAIR(_ZN3t30D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_t30[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {&cd_ne_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3t30[];
+extern void _ZN3t303barEv();
+static  VTBL_ENTRY vtc_t30[] = {
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t30[0]),
+  (VTBL_ENTRY)&_ZN3t303barEv,
+};
+extern VTBL_ENTRY _ZTV3t30[];
+static  VTT_ENTRY vtt_t30[] = {
+  {&(_ZTV3t30[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI3t30[];
+extern  VTBL_ENTRY _ZTV3t30[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t30[];
+Class_Descriptor cd_t30 = {  "t30", // class name
+  bases_t30, 2,
+  &(vtc_t30[0]), // expected_vtbl_contents
+  &(vtt_t30[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3t30),ABISELECT(56,32), //typeinfo_var
+  NSPAIRA(_ZTV3t30),5, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3t30),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xem_0  : virtual em_0 {
+  virtual void  abc(); // _ZN5Xem_03abcEv
+  ~Xem_0(); // tgen
+  Xem_0(); // tgen
+};
+//SIG(1 Xem_0) C1{ VBC2{} v1}
+
+
+void  Xem_0 ::abc(){vfunc_called(this, "_ZN5Xem_03abcEv");}
+Xem_0 ::~Xem_0(){ note_dtor("Xem_0", this);} // tgen
+Xem_0 ::Xem_0(){ note_ctor("Xem_0", this);} // tgen
+
+static void Test_Xem_0()
+{
+  extern Class_Descriptor cd_Xem_0;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xem_0, buf);
+    Xem_0 *dp, &lv = *(dp=new (buf) Xem_0());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xem_0)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xem_0)");
+    check_base_class_offset(lv, (em_0*), 0, "Xem_0");
+    test_class_info(&lv, &cd_Xem_0);
+    dp->~Xem_0();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXem_0(Test_Xem_0, "Xem_0", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN5Xem_0C1Ev();
+extern void _ZN5Xem_0D1Ev();
+Name_Map name_map_Xem_0[] = {
+  NSPAIR(_ZN5Xem_0C1Ev),
+  NSPAIR(_ZN5Xem_0D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+static Base_Class bases_Xem_0[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI5Xem_0[];
+extern void _ZN5Xem_03abcEv();
+static  VTBL_ENTRY vtc_Xem_0[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI5Xem_0[0]),
+  (VTBL_ENTRY)&_ZN5Xem_03abcEv,
+};
+extern VTBL_ENTRY _ZTV5Xem_0[];
+static  VTT_ENTRY vtt_Xem_0[] = {
+  {&(_ZTV5Xem_0[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI5Xem_0[];
+extern  VTBL_ENTRY _ZTV5Xem_0[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5Xem_0[];
+Class_Descriptor cd_Xem_0 = {  "Xem_0", // class name
+  bases_Xem_0, 1,
+  &(vtc_Xem_0[0]), // expected_vtbl_contents
+  &(vtt_Xem_0[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI5Xem_0),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV5Xem_0),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT5Xem_0),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xne_0  : virtual ne_0 {
+  virtual void  abc(); // _ZN5Xne_03abcEv
+  ~Xne_0(); // tgen
+  Xne_0(); // tgen
+};
+//SIG(1 Xne_0) C1{ VBC2{ m} v1}
+
+
+void  Xne_0 ::abc(){vfunc_called(this, "_ZN5Xne_03abcEv");}
+Xne_0 ::~Xne_0(){ note_dtor("Xne_0", this);} // tgen
+Xne_0 ::Xne_0(){ note_ctor("Xne_0", this);} // tgen
+
+static void Test_Xne_0()
+{
+  extern Class_Descriptor cd_Xne_0;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xne_0, buf);
+    Xne_0 *dp, &lv = *(dp=new (buf) Xne_0());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xne_0)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xne_0)");
+    check_base_class_offset(lv, (ne_0*), 0, "Xne_0");
+    test_class_info(&lv, &cd_Xne_0);
+    dp->~Xne_0();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXne_0(Test_Xne_0, "Xne_0", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN5Xne_0C1Ev();
+extern void _ZN5Xne_0D1Ev();
+Name_Map name_map_Xne_0[] = {
+  NSPAIR(_ZN5Xne_0C1Ev),
+  NSPAIR(_ZN5Xne_0D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+static Base_Class bases_Xne_0[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI5Xne_0[];
+extern void _ZN5Xne_03abcEv();
+static  VTBL_ENTRY vtc_Xne_0[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI5Xne_0[0]),
+  (VTBL_ENTRY)&_ZN5Xne_03abcEv,
+};
+extern VTBL_ENTRY _ZTV5Xne_0[];
+static  VTT_ENTRY vtt_Xne_0[] = {
+  {&(_ZTV5Xne_0[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI5Xne_0[];
+extern  VTBL_ENTRY _ZTV5Xne_0[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5Xne_0[];
+Class_Descriptor cd_Xne_0 = {  "Xne_0", // class name
+  bases_Xne_0, 1,
+  &(vtc_Xne_0[0]), // expected_vtbl_contents
+  &(vtt_Xne_0[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI5Xne_0),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV5Xne_0),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT5Xne_0),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xne_1  : virtual ne_1 {
+  virtual void  abc(); // _ZN5Xne_13abcEv
+  ~Xne_1(); // tgen
+  Xne_1(); // tgen
+};
+//SIG(1 Xne_1) C1{ VBC2{ m Fi:0} v1}
+
+
+void  Xne_1 ::abc(){vfunc_called(this, "_ZN5Xne_13abcEv");}
+Xne_1 ::~Xne_1(){ note_dtor("Xne_1", this);} // tgen
+Xne_1 ::Xne_1(){ note_ctor("Xne_1", this);} // tgen
+
+static void Test_Xne_1()
+{
+  extern Class_Descriptor cd_Xne_1;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xne_1, buf);
+    Xne_1 *dp, &lv = *(dp=new (buf) Xne_1());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xne_1)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xne_1)");
+    check_base_class_offset(lv, (ne_1*), 0, "Xne_1");
+    test_class_info(&lv, &cd_Xne_1);
+    dp->~Xne_1();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXne_1(Test_Xne_1, "Xne_1", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN5Xne_1C1Ev();
+extern void _ZN5Xne_1D1Ev();
+Name_Map name_map_Xne_1[] = {
+  NSPAIR(_ZN5Xne_1C1Ev),
+  NSPAIR(_ZN5Xne_1D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+static Base_Class bases_Xne_1[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_1,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI5Xne_1[];
+extern void _ZN5Xne_13abcEv();
+static  VTBL_ENTRY vtc_Xne_1[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI5Xne_1[0]),
+  (VTBL_ENTRY)&_ZN5Xne_13abcEv,
+};
+extern VTBL_ENTRY _ZTV5Xne_1[];
+static  VTT_ENTRY vtt_Xne_1[] = {
+  {&(_ZTV5Xne_1[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI5Xne_1[];
+extern  VTBL_ENTRY _ZTV5Xne_1[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5Xne_1[];
+Class_Descriptor cd_Xne_1 = {  "Xne_1", // class name
+  bases_Xne_1, 1,
+  &(vtc_Xne_1[0]), // expected_vtbl_contents
+  &(vtt_Xne_1[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI5Xne_1),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV5Xne_1),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT5Xne_1),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xne_2  : virtual ne_2 {
+  virtual void  abc(); // _ZN5Xne_23abcEv
+  ~Xne_2(); // tgen
+  Xne_2(); // tgen
+};
+//SIG(1 Xne_2) C1{ VBC2{ m Fs:0 Fi:0} v1}
+
+
+void  Xne_2 ::abc(){vfunc_called(this, "_ZN5Xne_23abcEv");}
+Xne_2 ::~Xne_2(){ note_dtor("Xne_2", this);} // tgen
+Xne_2 ::Xne_2(){ note_ctor("Xne_2", this);} // tgen
+
+static void Test_Xne_2()
+{
+  extern Class_Descriptor cd_Xne_2;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xne_2, buf);
+    Xne_2 *dp, &lv = *(dp=new (buf) Xne_2());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xne_2)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xne_2)");
+    check_base_class_offset(lv, (ne_2*), 0, "Xne_2");
+    test_class_info(&lv, &cd_Xne_2);
+    dp->~Xne_2();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXne_2(Test_Xne_2, "Xne_2", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN5Xne_2C1Ev();
+extern void _ZN5Xne_2D1Ev();
+Name_Map name_map_Xne_2[] = {
+  NSPAIR(_ZN5Xne_2C1Ev),
+  NSPAIR(_ZN5Xne_2D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_2;
+extern VTBL_ENTRY _ZTI4ne_2[];
+static Base_Class bases_Xne_2[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_2,    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, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI5Xne_2[];
+extern void _ZN5Xne_23abcEv();
+static  VTBL_ENTRY vtc_Xne_2[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI5Xne_2[0]),
+  (VTBL_ENTRY)&_ZN5Xne_23abcEv,
+};
+extern VTBL_ENTRY _ZTV5Xne_2[];
+static  VTT_ENTRY vtt_Xne_2[] = {
+  {&(_ZTV5Xne_2[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI5Xne_2[];
+extern  VTBL_ENTRY _ZTV5Xne_2[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT5Xne_2[];
+Class_Descriptor cd_Xne_2 = {  "Xne_2", // class name
+  bases_Xne_2, 1,
+  &(vtc_Xne_2[0]), // expected_vtbl_contents
+  &(vtt_Xne_2[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI5Xne_2),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV5Xne_2),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT5Xne_2),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xxx  : virtual xx {
+  virtual void  abc(); // _ZN3Xxx3abcEv
+  ~Xxx(); // tgen
+  Xxx(); // tgen
+};
+//SIG(1 Xxx) C1{ VBC2{ Fi} v1}
+
+
+void  Xxx ::abc(){vfunc_called(this, "_ZN3Xxx3abcEv");}
+Xxx ::~Xxx(){ note_dtor("Xxx", this);} // tgen
+Xxx ::Xxx(){ note_ctor("Xxx", this);} // tgen
+
+static void Test_Xxx()
+{
+  extern Class_Descriptor cd_Xxx;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_Xxx, buf);
+    Xxx *dp, &lv = *(dp=new (buf) Xxx());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Xxx)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xxx)");
+    check_base_class_offset(lv, (xx*), ABISELECT(8,4), "Xxx");
+    test_class_info(&lv, &cd_Xxx);
+    dp->~Xxx();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXxx(Test_Xxx, "Xxx", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN3XxxC1Ev();
+extern void _ZN3XxxD1Ev();
+Name_Map name_map_Xxx[] = {
+  NSPAIR(_ZN3XxxC1Ev),
+  NSPAIR(_ZN3XxxD1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+static Base_Class bases_Xxx[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI3Xxx[];
+extern void _ZN3Xxx3abcEv();
+static  VTBL_ENTRY vtc_Xxx[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3Xxx[0]),
+  (VTBL_ENTRY)&_ZN3Xxx3abcEv,
+};
+extern VTBL_ENTRY _ZTV3Xxx[];
+static  VTT_ENTRY vtt_Xxx[] = {
+  {&(_ZTV3Xxx[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI3Xxx[];
+extern  VTBL_ENTRY _ZTV3Xxx[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3Xxx[];
+Class_Descriptor cd_Xxx = {  "Xxx", // class name
+  bases_Xxx, 1,
+  &(vtc_Xxx[0]), // expected_vtbl_contents
+  &(vtt_Xxx[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI3Xxx),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV3Xxx),4, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT3Xxx),1, //virtual table table var
+  0, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt01  : virtual t01 {
+  virtual void  abc(); // _ZN4Xt013abcEv
+  ~Xt01(); // tgen
+  Xt01(); // tgen
+};
+//SIG(1 Xt01) C1{ VBC2{ BC3{} v2} v1}
+
+
+void  Xt01 ::abc(){vfunc_called(this, "_ZN4Xt013abcEv");}
+Xt01 ::~Xt01(){ note_dtor("Xt01", this);} // tgen
+Xt01 ::Xt01(){ note_ctor("Xt01", this);} // tgen
+
+static void Test_Xt01()
+{
+  extern Class_Descriptor cd_Xt01;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt01, buf);
+    Xt01 *dp, &lv = *(dp=new (buf) Xt01());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt01)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt01)");
+    check_base_class_offset(lv, (em_0*)(t01*), 0, "Xt01");
+    check_base_class_offset(lv, (t01*), 0, "Xt01");
+    test_class_info(&lv, &cd_Xt01);
+    dp->~Xt01();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt01(Test_Xt01, "Xt01", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt01C1Ev();
+extern void _ZN4Xt01D1Ev();
+Name_Map name_map_Xt01[] = {
+  NSPAIR(_ZN4Xt01C1Ev),
+  NSPAIR(_ZN4Xt01D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_t01;
+extern VTBL_ENTRY _ZTI3t01[];
+extern  VTBL_ENTRY _ZTV3t01[];
+static Base_Class bases_Xt01[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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
+  0, 0},
+  {&cd_t01,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt01[];
+extern void _ZN3t013barEv();
+extern void _ZN4Xt013abcEv();
+static  VTBL_ENTRY vtc_Xt01[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt01[0]),
+  (VTBL_ENTRY)&_ZN3t013barEv,
+  (VTBL_ENTRY)&_ZN4Xt013abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt01[];
+static  VTT_ENTRY vtt_Xt01[] = {
+  {&(_ZTV4Xt01[4]),  4,6},
+  {&(_ZTV4Xt01[4]),  4,6},
+};
+extern VTBL_ENTRY _ZTI4Xt01[];
+extern  VTBL_ENTRY _ZTV4Xt01[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt01[];
+Class_Descriptor cd_Xt01 = {  "Xt01", // class name
+  bases_Xt01, 2,
+  &(vtc_Xt01[0]), // expected_vtbl_contents
+  &(vtt_Xt01[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt01),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt01),6, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt01),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt02  : virtual t02 {
+  virtual void  abc(); // _ZN4Xt023abcEv
+  ~Xt02(); // tgen
+  Xt02(); // tgen
+};
+//SIG(1 Xt02) C1{ VBC2{ VBC3{} v2} v1}
+
+
+void  Xt02 ::abc(){vfunc_called(this, "_ZN4Xt023abcEv");}
+Xt02 ::~Xt02(){ note_dtor("Xt02", this);} // tgen
+Xt02 ::Xt02(){ note_ctor("Xt02", this);} // tgen
+
+static void Test_Xt02()
+{
+  extern Class_Descriptor cd_Xt02;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt02, buf);
+    Xt02 *dp, &lv = *(dp=new (buf) Xt02());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt02)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt02)");
+    check_base_class_offset(lv, (em_0*)(t02*), 0, "Xt02");
+    check_base_class_offset(lv, (t02*), 0, "Xt02");
+    test_class_info(&lv, &cd_Xt02);
+    dp->~Xt02();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt02(Test_Xt02, "Xt02", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt02C1Ev();
+extern void _ZN4Xt02D1Ev();
+Name_Map name_map_Xt02[] = {
+  NSPAIR(_ZN4Xt02C1Ev),
+  NSPAIR(_ZN4Xt02D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_t02;
+extern VTBL_ENTRY _ZTI3t02[];
+extern  VTBL_ENTRY _ZTV3t02[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t02[];
+static Base_Class bases_Xt02[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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
+  0, 1},
+  {&cd_t02,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt02[];
+extern void _ZN3t023barEv();
+extern void _ZN4Xt023abcEv();
+static  VTBL_ENTRY vtc_Xt02[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt02[0]),
+  (VTBL_ENTRY)&_ZN3t023barEv,
+  (VTBL_ENTRY)&_ZN4Xt023abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt02[];
+extern void _ZN3t023barEv();
+static  VTBL_ENTRY _tg__ZTV3t02__4Xt02[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t02[0]),
+  (VTBL_ENTRY)&_ZN3t023barEv,
+};
+static  VTT_ENTRY vtt_Xt02[] = {
+  {&(_ZTV4Xt02[5]),  5,7},
+  {&(_ZTV4Xt02[5]),  5,7},
+  {&(_tg__ZTV3t02__4Xt02[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt02[];
+extern  VTBL_ENTRY _ZTV4Xt02[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt02[];
+Class_Descriptor cd_Xt02 = {  "Xt02", // class name
+  bases_Xt02, 2,
+  &(vtc_Xt02[0]), // expected_vtbl_contents
+  &(vtt_Xt02[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt02),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt02),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt02),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt03  : virtual t03 {
+  virtual void  abc(); // _ZN4Xt033abcEv
+  ~Xt03(); // tgen
+  Xt03(); // tgen
+};
+//SIG(1 Xt03) C1{ VBC2{ BC3{} BC4{} v2} v1}
+
+
+void  Xt03 ::abc(){vfunc_called(this, "_ZN4Xt033abcEv");}
+Xt03 ::~Xt03(){ note_dtor("Xt03", this);} // tgen
+Xt03 ::Xt03(){ note_ctor("Xt03", this);} // tgen
+
+static void Test_Xt03()
+{
+  extern Class_Descriptor cd_Xt03;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt03, buf);
+    Xt03 *dp, &lv = *(dp=new (buf) Xt03());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt03)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt03)");
+    check_base_class_offset(lv, (em_0*)(t03*), 0, "Xt03");
+    check_base_class_offset(lv, (em_1*)(t03*), 0, "Xt03");
+    check_base_class_offset(lv, (t03*), 0, "Xt03");
+    test_class_info(&lv, &cd_Xt03);
+    dp->~Xt03();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt03(Test_Xt03, "Xt03", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt03C1Ev();
+extern void _ZN4Xt03D1Ev();
+Name_Map name_map_Xt03[] = {
+  NSPAIR(_ZN4Xt03C1Ev),
+  NSPAIR(_ZN4Xt03D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t03;
+extern VTBL_ENTRY _ZTI3t03[];
+extern  VTBL_ENTRY _ZTV3t03[];
+static Base_Class bases_Xt03[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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_em_1,    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_t03,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt03[];
+extern void _ZN3t033barEv();
+extern void _ZN4Xt033abcEv();
+static  VTBL_ENTRY vtc_Xt03[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt03[0]),
+  (VTBL_ENTRY)&_ZN3t033barEv,
+  (VTBL_ENTRY)&_ZN4Xt033abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt03[];
+static  VTT_ENTRY vtt_Xt03[] = {
+  {&(_ZTV4Xt03[4]),  4,6},
+  {&(_ZTV4Xt03[4]),  4,6},
+};
+extern VTBL_ENTRY _ZTI4Xt03[];
+extern  VTBL_ENTRY _ZTV4Xt03[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt03[];
+Class_Descriptor cd_Xt03 = {  "Xt03", // class name
+  bases_Xt03, 3,
+  &(vtc_Xt03[0]), // expected_vtbl_contents
+  &(vtt_Xt03[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt03),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt03),6, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt03),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt04  : virtual t04 {
+  virtual void  abc(); // _ZN4Xt043abcEv
+  ~Xt04(); // tgen
+  Xt04(); // tgen
+};
+//SIG(1 Xt04) C1{ VBC2{ VBC3{} BC4{} v2} v1}
+
+
+void  Xt04 ::abc(){vfunc_called(this, "_ZN4Xt043abcEv");}
+Xt04 ::~Xt04(){ note_dtor("Xt04", this);} // tgen
+Xt04 ::Xt04(){ note_ctor("Xt04", this);} // tgen
+
+static void Test_Xt04()
+{
+  extern Class_Descriptor cd_Xt04;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt04, buf);
+    Xt04 *dp, &lv = *(dp=new (buf) Xt04());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt04)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt04)");
+    check_base_class_offset(lv, (em_0*)(t04*), 0, "Xt04");
+    check_base_class_offset(lv, (em_1*)(t04*), 0, "Xt04");
+    check_base_class_offset(lv, (t04*), 0, "Xt04");
+    test_class_info(&lv, &cd_Xt04);
+    dp->~Xt04();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt04(Test_Xt04, "Xt04", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt04C1Ev();
+extern void _ZN4Xt04D1Ev();
+Name_Map name_map_Xt04[] = {
+  NSPAIR(_ZN4Xt04C1Ev),
+  NSPAIR(_ZN4Xt04D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t04;
+extern VTBL_ENTRY _ZTI3t04[];
+extern  VTBL_ENTRY _ZTV3t04[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t04[];
+static Base_Class bases_Xt04[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {&cd_em_1,    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_t04,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt04[];
+extern void _ZN3t043barEv();
+extern void _ZN4Xt043abcEv();
+static  VTBL_ENTRY vtc_Xt04[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt04[0]),
+  (VTBL_ENTRY)&_ZN3t043barEv,
+  (VTBL_ENTRY)&_ZN4Xt043abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt04[];
+extern void _ZN3t043barEv();
+static  VTBL_ENTRY _tg__ZTV3t04__4Xt04[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t04[0]),
+  (VTBL_ENTRY)&_ZN3t043barEv,
+};
+static  VTT_ENTRY vtt_Xt04[] = {
+  {&(_ZTV4Xt04[5]),  5,7},
+  {&(_ZTV4Xt04[5]),  5,7},
+  {&(_tg__ZTV3t04__4Xt04[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt04[];
+extern  VTBL_ENTRY _ZTV4Xt04[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt04[];
+Class_Descriptor cd_Xt04 = {  "Xt04", // class name
+  bases_Xt04, 3,
+  &(vtc_Xt04[0]), // expected_vtbl_contents
+  &(vtt_Xt04[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt04),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt04),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt04),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt05  : virtual t05 {
+  virtual void  abc(); // _ZN4Xt053abcEv
+  ~Xt05(); // tgen
+  Xt05(); // tgen
+};
+//SIG(1 Xt05) C1{ VBC2{ BC3{} VBC4{} v2} v1}
+
+
+void  Xt05 ::abc(){vfunc_called(this, "_ZN4Xt053abcEv");}
+Xt05 ::~Xt05(){ note_dtor("Xt05", this);} // tgen
+Xt05 ::Xt05(){ note_ctor("Xt05", this);} // tgen
+
+static void Test_Xt05()
+{
+  extern Class_Descriptor cd_Xt05;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt05, buf);
+    Xt05 *dp, &lv = *(dp=new (buf) Xt05());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt05)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt05)");
+    check_base_class_offset(lv, (em_0*)(t05*), 0, "Xt05");
+    check_base_class_offset(lv, (em_1*)(t05*), 0, "Xt05");
+    check_base_class_offset(lv, (t05*), 0, "Xt05");
+    test_class_info(&lv, &cd_Xt05);
+    dp->~Xt05();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt05(Test_Xt05, "Xt05", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt05C1Ev();
+extern void _ZN4Xt05D1Ev();
+Name_Map name_map_Xt05[] = {
+  NSPAIR(_ZN4Xt05C1Ev),
+  NSPAIR(_ZN4Xt05D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t05;
+extern VTBL_ENTRY _ZTI3t05[];
+extern  VTBL_ENTRY _ZTV3t05[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t05[];
+static Base_Class bases_Xt05[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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_em_1,    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, 1},
+  {&cd_t05,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt05[];
+extern void _ZN3t053barEv();
+extern void _ZN4Xt053abcEv();
+static  VTBL_ENTRY vtc_Xt05[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt05[0]),
+  (VTBL_ENTRY)&_ZN3t053barEv,
+  (VTBL_ENTRY)&_ZN4Xt053abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt05[];
+extern void _ZN3t053barEv();
+static  VTBL_ENTRY _tg__ZTV3t05__4Xt05[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t05[0]),
+  (VTBL_ENTRY)&_ZN3t053barEv,
+};
+static  VTT_ENTRY vtt_Xt05[] = {
+  {&(_ZTV4Xt05[5]),  5,7},
+  {&(_ZTV4Xt05[5]),  5,7},
+  {&(_tg__ZTV3t05__4Xt05[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt05[];
+extern  VTBL_ENTRY _ZTV4Xt05[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt05[];
+Class_Descriptor cd_Xt05 = {  "Xt05", // class name
+  bases_Xt05, 3,
+  &(vtc_Xt05[0]), // expected_vtbl_contents
+  &(vtt_Xt05[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt05),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt05),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt05),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt06  : virtual t06 {
+  virtual void  abc(); // _ZN4Xt063abcEv
+  ~Xt06(); // tgen
+  Xt06(); // tgen
+};
+//SIG(1 Xt06) C1{ VBC2{ VBC3{} VBC4{} v2} v1}
+
+
+void  Xt06 ::abc(){vfunc_called(this, "_ZN4Xt063abcEv");}
+Xt06 ::~Xt06(){ note_dtor("Xt06", this);} // tgen
+Xt06 ::Xt06(){ note_ctor("Xt06", this);} // tgen
+
+static void Test_Xt06()
+{
+  extern Class_Descriptor cd_Xt06;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt06, buf);
+    Xt06 *dp, &lv = *(dp=new (buf) Xt06());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt06)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt06)");
+    check_base_class_offset(lv, (em_0*)(t06*), 0, "Xt06");
+    check_base_class_offset(lv, (em_1*)(t06*), 0, "Xt06");
+    check_base_class_offset(lv, (t06*), 0, "Xt06");
+    test_class_info(&lv, &cd_Xt06);
+    dp->~Xt06();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt06(Test_Xt06, "Xt06", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt06C1Ev();
+extern void _ZN4Xt06D1Ev();
+Name_Map name_map_Xt06[] = {
+  NSPAIR(_ZN4Xt06C1Ev),
+  NSPAIR(_ZN4Xt06D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t06;
+extern VTBL_ENTRY _ZTI3t06[];
+extern  VTBL_ENTRY _ZTV3t06[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t06[];
+static Base_Class bases_Xt06[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {&cd_em_1,    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, 1},
+  {&cd_t06,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt06[];
+extern void _ZN3t063barEv();
+extern void _ZN4Xt063abcEv();
+static  VTBL_ENTRY vtc_Xt06[] = {
+  0,
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt06[0]),
+  (VTBL_ENTRY)&_ZN3t063barEv,
+  (VTBL_ENTRY)&_ZN4Xt063abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt06[];
+extern void _ZN3t063barEv();
+static  VTBL_ENTRY _tg__ZTV3t06__4Xt06[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t06[0]),
+  (VTBL_ENTRY)&_ZN3t063barEv,
+};
+static  VTT_ENTRY vtt_Xt06[] = {
+  {&(_ZTV4Xt06[6]),  6,8},
+  {&(_ZTV4Xt06[6]),  6,8},
+  {&(_tg__ZTV3t06__4Xt06[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI4Xt06[];
+extern  VTBL_ENTRY _ZTV4Xt06[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt06[];
+Class_Descriptor cd_Xt06 = {  "Xt06", // class name
+  bases_Xt06, 3,
+  &(vtc_Xt06[0]), // expected_vtbl_contents
+  &(vtt_Xt06[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt06),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt06),8, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt06),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt07  : virtual t07 {
+  virtual void  abc(); // _ZN4Xt073abcEv
+  ~Xt07(); // tgen
+  Xt07(); // tgen
+};
+//SIG(1 Xt07) C1{ VBC2{ BC3{} BC4{ m Fi:0} v2} v1}
+
+
+void  Xt07 ::abc(){vfunc_called(this, "_ZN4Xt073abcEv");}
+Xt07 ::~Xt07(){ note_dtor("Xt07", this);} // tgen
+Xt07 ::Xt07(){ note_ctor("Xt07", this);} // tgen
+
+static void Test_Xt07()
+{
+  extern Class_Descriptor cd_Xt07;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt07, buf);
+    Xt07 *dp, &lv = *(dp=new (buf) Xt07());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt07)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt07)");
+    check_base_class_offset(lv, (em_0*)(t07*), 0, "Xt07");
+    check_base_class_offset(lv, (ne_1*)(t07*), 0, "Xt07");
+    check_base_class_offset(lv, (t07*), 0, "Xt07");
+    test_class_info(&lv, &cd_Xt07);
+    dp->~Xt07();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt07(Test_Xt07, "Xt07", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt07C1Ev();
+extern void _ZN4Xt07D1Ev();
+Name_Map name_map_Xt07[] = {
+  NSPAIR(_ZN4Xt07C1Ev),
+  NSPAIR(_ZN4Xt07D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t07;
+extern VTBL_ENTRY _ZTI3t07[];
+extern  VTBL_ENTRY _ZTV3t07[];
+static Base_Class bases_Xt07[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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_ne_1,    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_t07,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt07[];
+extern void _ZN3t073barEv();
+extern void _ZN4Xt073abcEv();
+static  VTBL_ENTRY vtc_Xt07[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt07[0]),
+  (VTBL_ENTRY)&_ZN3t073barEv,
+  (VTBL_ENTRY)&_ZN4Xt073abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt07[];
+static  VTT_ENTRY vtt_Xt07[] = {
+  {&(_ZTV4Xt07[4]),  4,6},
+  {&(_ZTV4Xt07[4]),  4,6},
+};
+extern VTBL_ENTRY _ZTI4Xt07[];
+extern  VTBL_ENTRY _ZTV4Xt07[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt07[];
+Class_Descriptor cd_Xt07 = {  "Xt07", // class name
+  bases_Xt07, 3,
+  &(vtc_Xt07[0]), // expected_vtbl_contents
+  &(vtt_Xt07[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt07),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt07),6, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt07),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt08  : virtual t08 {
+  virtual void  abc(); // _ZN4Xt083abcEv
+  ~Xt08(); // tgen
+  Xt08(); // tgen
+};
+//SIG(1 Xt08) C1{ VBC2{ VBC3{} BC4{ m Fi:0} v2} v1}
+
+
+void  Xt08 ::abc(){vfunc_called(this, "_ZN4Xt083abcEv");}
+Xt08 ::~Xt08(){ note_dtor("Xt08", this);} // tgen
+Xt08 ::Xt08(){ note_ctor("Xt08", this);} // tgen
+
+static void Test_Xt08()
+{
+  extern Class_Descriptor cd_Xt08;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt08, buf);
+    Xt08 *dp, &lv = *(dp=new (buf) Xt08());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt08)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt08)");
+    check_base_class_offset(lv, (em_0*)(t08*), 0, "Xt08");
+    check_base_class_offset(lv, (ne_1*)(t08*), 0, "Xt08");
+    check_base_class_offset(lv, (t08*), 0, "Xt08");
+    test_class_info(&lv, &cd_Xt08);
+    dp->~Xt08();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt08(Test_Xt08, "Xt08", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt08C1Ev();
+extern void _ZN4Xt08D1Ev();
+Name_Map name_map_Xt08[] = {
+  NSPAIR(_ZN4Xt08C1Ev),
+  NSPAIR(_ZN4Xt08D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t08;
+extern VTBL_ENTRY _ZTI3t08[];
+extern  VTBL_ENTRY _ZTV3t08[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t08[];
+static Base_Class bases_Xt08[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {&cd_ne_1,    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_t08,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt08[];
+extern void _ZN3t083barEv();
+extern void _ZN4Xt083abcEv();
+static  VTBL_ENTRY vtc_Xt08[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt08[0]),
+  (VTBL_ENTRY)&_ZN3t083barEv,
+  (VTBL_ENTRY)&_ZN4Xt083abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt08[];
+extern void _ZN3t083barEv();
+static  VTBL_ENTRY _tg__ZTV3t08__4Xt08[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t08[0]),
+  (VTBL_ENTRY)&_ZN3t083barEv,
+};
+static  VTT_ENTRY vtt_Xt08[] = {
+  {&(_ZTV4Xt08[5]),  5,7},
+  {&(_ZTV4Xt08[5]),  5,7},
+  {&(_tg__ZTV3t08__4Xt08[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt08[];
+extern  VTBL_ENTRY _ZTV4Xt08[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt08[];
+Class_Descriptor cd_Xt08 = {  "Xt08", // class name
+  bases_Xt08, 3,
+  &(vtc_Xt08[0]), // expected_vtbl_contents
+  &(vtt_Xt08[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt08),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt08),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt08),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt09  : virtual t09 {
+  virtual void  abc(); // _ZN4Xt093abcEv
+  ~Xt09(); // tgen
+  Xt09(); // tgen
+};
+//SIG(1 Xt09) C1{ VBC2{ BC3{} VBC4{ m Fi:0} v2} v1}
+
+
+void  Xt09 ::abc(){vfunc_called(this, "_ZN4Xt093abcEv");}
+Xt09 ::~Xt09(){ note_dtor("Xt09", this);} // tgen
+Xt09 ::Xt09(){ note_ctor("Xt09", this);} // tgen
+
+static void Test_Xt09()
+{
+  extern Class_Descriptor cd_Xt09;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt09, buf);
+    Xt09 *dp, &lv = *(dp=new (buf) Xt09());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt09)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt09)");
+    check_base_class_offset(lv, (em_0*)(t09*), 0, "Xt09");
+    check_base_class_offset(lv, (ne_1*)(t09*), 0, "Xt09");
+    check_base_class_offset(lv, (t09*), 0, "Xt09");
+    test_class_info(&lv, &cd_Xt09);
+    dp->~Xt09();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt09(Test_Xt09, "Xt09", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt09C1Ev();
+extern void _ZN4Xt09D1Ev();
+Name_Map name_map_Xt09[] = {
+  NSPAIR(_ZN4Xt09C1Ev),
+  NSPAIR(_ZN4Xt09D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t09;
+extern VTBL_ENTRY _ZTI3t09[];
+extern  VTBL_ENTRY _ZTV3t09[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t09[];
+static Base_Class bases_Xt09[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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_ne_1,    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, 1},
+  {&cd_t09,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt09[];
+extern void _ZN3t093barEv();
+extern void _ZN4Xt093abcEv();
+static  VTBL_ENTRY vtc_Xt09[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt09[0]),
+  (VTBL_ENTRY)&_ZN3t093barEv,
+  (VTBL_ENTRY)&_ZN4Xt093abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt09[];
+extern void _ZN3t093barEv();
+static  VTBL_ENTRY _tg__ZTV3t09__4Xt09[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t09[0]),
+  (VTBL_ENTRY)&_ZN3t093barEv,
+};
+static  VTT_ENTRY vtt_Xt09[] = {
+  {&(_ZTV4Xt09[5]),  5,7},
+  {&(_ZTV4Xt09[5]),  5,7},
+  {&(_tg__ZTV3t09__4Xt09[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt09[];
+extern  VTBL_ENTRY _ZTV4Xt09[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt09[];
+Class_Descriptor cd_Xt09 = {  "Xt09", // class name
+  bases_Xt09, 3,
+  &(vtc_Xt09[0]), // expected_vtbl_contents
+  &(vtt_Xt09[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt09),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt09),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt09),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt00  : virtual t00 {
+  virtual void  abc(); // _ZN4Xt003abcEv
+  ~Xt00(); // tgen
+  Xt00(); // tgen
+};
+//SIG(1 Xt00) C1{ VBC2{ VBC3{} VBC4{ m Fi:0} v2} v1}
+
+
+void  Xt00 ::abc(){vfunc_called(this, "_ZN4Xt003abcEv");}
+Xt00 ::~Xt00(){ note_dtor("Xt00", this);} // tgen
+Xt00 ::Xt00(){ note_ctor("Xt00", this);} // tgen
+
+static void Test_Xt00()
+{
+  extern Class_Descriptor cd_Xt00;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt00, buf);
+    Xt00 *dp, &lv = *(dp=new (buf) Xt00());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt00)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt00)");
+    check_base_class_offset(lv, (em_0*)(t00*), 0, "Xt00");
+    check_base_class_offset(lv, (ne_1*)(t00*), 0, "Xt00");
+    check_base_class_offset(lv, (t00*), 0, "Xt00");
+    test_class_info(&lv, &cd_Xt00);
+    dp->~Xt00();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt00(Test_Xt00, "Xt00", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt00C1Ev();
+extern void _ZN4Xt00D1Ev();
+Name_Map name_map_Xt00[] = {
+  NSPAIR(_ZN4Xt00C1Ev),
+  NSPAIR(_ZN4Xt00D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_em_0;
+extern VTBL_ENTRY _ZTI4em_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t00;
+extern VTBL_ENTRY _ZTI3t00[];
+extern  VTBL_ENTRY _ZTV3t00[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t00[];
+static Base_Class bases_Xt00[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_em_0,    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, 1},
+  {&cd_ne_1,    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, 1},
+  {&cd_t00,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt00[];
+extern void _ZN3t003barEv();
+extern void _ZN4Xt003abcEv();
+static  VTBL_ENTRY vtc_Xt00[] = {
+  0,
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt00[0]),
+  (VTBL_ENTRY)&_ZN3t003barEv,
+  (VTBL_ENTRY)&_ZN4Xt003abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt00[];
+extern void _ZN3t003barEv();
+static  VTBL_ENTRY _tg__ZTV3t00__4Xt00[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t00[0]),
+  (VTBL_ENTRY)&_ZN3t003barEv,
+};
+static  VTT_ENTRY vtt_Xt00[] = {
+  {&(_ZTV4Xt00[6]),  6,8},
+  {&(_ZTV4Xt00[6]),  6,8},
+  {&(_tg__ZTV3t00__4Xt00[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI4Xt00[];
+extern  VTBL_ENTRY _ZTV4Xt00[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt00[];
+Class_Descriptor cd_Xt00 = {  "Xt00", // class name
+  bases_Xt00, 3,
+  &(vtc_Xt00[0]), // expected_vtbl_contents
+  &(vtt_Xt00[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt00),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt00),8, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt00),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt11  : virtual t11 {
+  virtual void  abc(); // _ZN4Xt113abcEv
+  ~Xt11(); // tgen
+  Xt11(); // tgen
+};
+//SIG(1 Xt11) C1{ VBC2{ BC3{ m} v2} v1}
+
+
+void  Xt11 ::abc(){vfunc_called(this, "_ZN4Xt113abcEv");}
+Xt11 ::~Xt11(){ note_dtor("Xt11", this);} // tgen
+Xt11 ::Xt11(){ note_ctor("Xt11", this);} // tgen
+
+static void Test_Xt11()
+{
+  extern Class_Descriptor cd_Xt11;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt11, buf);
+    Xt11 *dp, &lv = *(dp=new (buf) Xt11());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt11)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt11)");
+    check_base_class_offset(lv, (ne_0*)(t11*), 0, "Xt11");
+    check_base_class_offset(lv, (t11*), 0, "Xt11");
+    test_class_info(&lv, &cd_Xt11);
+    dp->~Xt11();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt11(Test_Xt11, "Xt11", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt11C1Ev();
+extern void _ZN4Xt11D1Ev();
+Name_Map name_map_Xt11[] = {
+  NSPAIR(_ZN4Xt11C1Ev),
+  NSPAIR(_ZN4Xt11D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_t11;
+extern VTBL_ENTRY _ZTI3t11[];
+extern  VTBL_ENTRY _ZTV3t11[];
+static Base_Class bases_Xt11[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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
+  0, 0},
+  {&cd_t11,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt11[];
+extern void _ZN3t113barEv();
+extern void _ZN4Xt113abcEv();
+static  VTBL_ENTRY vtc_Xt11[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt11[0]),
+  (VTBL_ENTRY)&_ZN3t113barEv,
+  (VTBL_ENTRY)&_ZN4Xt113abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt11[];
+static  VTT_ENTRY vtt_Xt11[] = {
+  {&(_ZTV4Xt11[4]),  4,6},
+  {&(_ZTV4Xt11[4]),  4,6},
+};
+extern VTBL_ENTRY _ZTI4Xt11[];
+extern  VTBL_ENTRY _ZTV4Xt11[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt11[];
+Class_Descriptor cd_Xt11 = {  "Xt11", // class name
+  bases_Xt11, 2,
+  &(vtc_Xt11[0]), // expected_vtbl_contents
+  &(vtt_Xt11[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt11),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt11),6, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt11),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt12  : virtual t12 {
+  virtual void  abc(); // _ZN4Xt123abcEv
+  ~Xt12(); // tgen
+  Xt12(); // tgen
+};
+//SIG(1 Xt12) C1{ VBC2{ VBC3{ m} v2} v1}
+
+
+void  Xt12 ::abc(){vfunc_called(this, "_ZN4Xt123abcEv");}
+Xt12 ::~Xt12(){ note_dtor("Xt12", this);} // tgen
+Xt12 ::Xt12(){ note_ctor("Xt12", this);} // tgen
+
+static void Test_Xt12()
+{
+  extern Class_Descriptor cd_Xt12;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt12, buf);
+    Xt12 *dp, &lv = *(dp=new (buf) Xt12());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt12)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt12)");
+    check_base_class_offset(lv, (ne_0*)(t12*), 0, "Xt12");
+    check_base_class_offset(lv, (t12*), 0, "Xt12");
+    test_class_info(&lv, &cd_Xt12);
+    dp->~Xt12();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt12(Test_Xt12, "Xt12", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt12C1Ev();
+extern void _ZN4Xt12D1Ev();
+Name_Map name_map_Xt12[] = {
+  NSPAIR(_ZN4Xt12C1Ev),
+  NSPAIR(_ZN4Xt12D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_t12;
+extern VTBL_ENTRY _ZTI3t12[];
+extern  VTBL_ENTRY _ZTV3t12[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t12[];
+static Base_Class bases_Xt12[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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
+  0, 1},
+  {&cd_t12,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt12[];
+extern void _ZN3t123barEv();
+extern void _ZN4Xt123abcEv();
+static  VTBL_ENTRY vtc_Xt12[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt12[0]),
+  (VTBL_ENTRY)&_ZN3t123barEv,
+  (VTBL_ENTRY)&_ZN4Xt123abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt12[];
+extern void _ZN3t123barEv();
+static  VTBL_ENTRY _tg__ZTV3t12__4Xt12[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t12[0]),
+  (VTBL_ENTRY)&_ZN3t123barEv,
+};
+static  VTT_ENTRY vtt_Xt12[] = {
+  {&(_ZTV4Xt12[5]),  5,7},
+  {&(_ZTV4Xt12[5]),  5,7},
+  {&(_tg__ZTV3t12__4Xt12[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt12[];
+extern  VTBL_ENTRY _ZTV4Xt12[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt12[];
+Class_Descriptor cd_Xt12 = {  "Xt12", // class name
+  bases_Xt12, 2,
+  &(vtc_Xt12[0]), // expected_vtbl_contents
+  &(vtt_Xt12[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt12),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt12),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt12),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt13  : virtual t13 {
+  virtual void  abc(); // _ZN4Xt133abcEv
+  ~Xt13(); // tgen
+  Xt13(); // tgen
+};
+//SIG(1 Xt13) C1{ VBC2{ BC3{ m} BC4{} v2} v1}
+
+
+void  Xt13 ::abc(){vfunc_called(this, "_ZN4Xt133abcEv");}
+Xt13 ::~Xt13(){ note_dtor("Xt13", this);} // tgen
+Xt13 ::Xt13(){ note_ctor("Xt13", this);} // tgen
+
+static void Test_Xt13()
+{
+  extern Class_Descriptor cd_Xt13;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt13, buf);
+    Xt13 *dp, &lv = *(dp=new (buf) Xt13());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt13)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt13)");
+    check_base_class_offset(lv, (ne_0*)(t13*), 0, "Xt13");
+    check_base_class_offset(lv, (em_1*)(t13*), 0, "Xt13");
+    check_base_class_offset(lv, (t13*), 0, "Xt13");
+    test_class_info(&lv, &cd_Xt13);
+    dp->~Xt13();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt13(Test_Xt13, "Xt13", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt13C1Ev();
+extern void _ZN4Xt13D1Ev();
+Name_Map name_map_Xt13[] = {
+  NSPAIR(_ZN4Xt13C1Ev),
+  NSPAIR(_ZN4Xt13D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t13;
+extern VTBL_ENTRY _ZTI3t13[];
+extern  VTBL_ENTRY _ZTV3t13[];
+static Base_Class bases_Xt13[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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_em_1,    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_t13,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt13[];
+extern void _ZN3t133barEv();
+extern void _ZN4Xt133abcEv();
+static  VTBL_ENTRY vtc_Xt13[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt13[0]),
+  (VTBL_ENTRY)&_ZN3t133barEv,
+  (VTBL_ENTRY)&_ZN4Xt133abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt13[];
+static  VTT_ENTRY vtt_Xt13[] = {
+  {&(_ZTV4Xt13[4]),  4,6},
+  {&(_ZTV4Xt13[4]),  4,6},
+};
+extern VTBL_ENTRY _ZTI4Xt13[];
+extern  VTBL_ENTRY _ZTV4Xt13[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt13[];
+Class_Descriptor cd_Xt13 = {  "Xt13", // class name
+  bases_Xt13, 3,
+  &(vtc_Xt13[0]), // expected_vtbl_contents
+  &(vtt_Xt13[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt13),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt13),6, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt13),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt14  : virtual t14 {
+  virtual void  abc(); // _ZN4Xt143abcEv
+  ~Xt14(); // tgen
+  Xt14(); // tgen
+};
+//SIG(1 Xt14) C1{ VBC2{ VBC3{ m} BC4{} v2} v1}
+
+
+void  Xt14 ::abc(){vfunc_called(this, "_ZN4Xt143abcEv");}
+Xt14 ::~Xt14(){ note_dtor("Xt14", this);} // tgen
+Xt14 ::Xt14(){ note_ctor("Xt14", this);} // tgen
+
+static void Test_Xt14()
+{
+  extern Class_Descriptor cd_Xt14;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt14, buf);
+    Xt14 *dp, &lv = *(dp=new (buf) Xt14());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt14)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt14)");
+    check_base_class_offset(lv, (ne_0*)(t14*), 0, "Xt14");
+    check_base_class_offset(lv, (em_1*)(t14*), 0, "Xt14");
+    check_base_class_offset(lv, (t14*), 0, "Xt14");
+    test_class_info(&lv, &cd_Xt14);
+    dp->~Xt14();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt14(Test_Xt14, "Xt14", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt14C1Ev();
+extern void _ZN4Xt14D1Ev();
+Name_Map name_map_Xt14[] = {
+  NSPAIR(_ZN4Xt14C1Ev),
+  NSPAIR(_ZN4Xt14D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t14;
+extern VTBL_ENTRY _ZTI3t14[];
+extern  VTBL_ENTRY _ZTV3t14[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t14[];
+static Base_Class bases_Xt14[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {&cd_em_1,    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_t14,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt14[];
+extern void _ZN3t143barEv();
+extern void _ZN4Xt143abcEv();
+static  VTBL_ENTRY vtc_Xt14[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt14[0]),
+  (VTBL_ENTRY)&_ZN3t143barEv,
+  (VTBL_ENTRY)&_ZN4Xt143abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt14[];
+extern void _ZN3t143barEv();
+static  VTBL_ENTRY _tg__ZTV3t14__4Xt14[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t14[0]),
+  (VTBL_ENTRY)&_ZN3t143barEv,
+};
+static  VTT_ENTRY vtt_Xt14[] = {
+  {&(_ZTV4Xt14[5]),  5,7},
+  {&(_ZTV4Xt14[5]),  5,7},
+  {&(_tg__ZTV3t14__4Xt14[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt14[];
+extern  VTBL_ENTRY _ZTV4Xt14[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt14[];
+Class_Descriptor cd_Xt14 = {  "Xt14", // class name
+  bases_Xt14, 3,
+  &(vtc_Xt14[0]), // expected_vtbl_contents
+  &(vtt_Xt14[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt14),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt14),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt14),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt15  : virtual t15 {
+  virtual void  abc(); // _ZN4Xt153abcEv
+  ~Xt15(); // tgen
+  Xt15(); // tgen
+};
+//SIG(1 Xt15) C1{ VBC2{ BC3{ m} VBC4{} v2} v1}
+
+
+void  Xt15 ::abc(){vfunc_called(this, "_ZN4Xt153abcEv");}
+Xt15 ::~Xt15(){ note_dtor("Xt15", this);} // tgen
+Xt15 ::Xt15(){ note_ctor("Xt15", this);} // tgen
+
+static void Test_Xt15()
+{
+  extern Class_Descriptor cd_Xt15;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt15, buf);
+    Xt15 *dp, &lv = *(dp=new (buf) Xt15());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt15)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt15)");
+    check_base_class_offset(lv, (ne_0*)(t15*), 0, "Xt15");
+    check_base_class_offset(lv, (em_1*)(t15*), 0, "Xt15");
+    check_base_class_offset(lv, (t15*), 0, "Xt15");
+    test_class_info(&lv, &cd_Xt15);
+    dp->~Xt15();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt15(Test_Xt15, "Xt15", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt15C1Ev();
+extern void _ZN4Xt15D1Ev();
+Name_Map name_map_Xt15[] = {
+  NSPAIR(_ZN4Xt15C1Ev),
+  NSPAIR(_ZN4Xt15D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t15;
+extern VTBL_ENTRY _ZTI3t15[];
+extern  VTBL_ENTRY _ZTV3t15[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t15[];
+static Base_Class bases_Xt15[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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_em_1,    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, 1},
+  {&cd_t15,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt15[];
+extern void _ZN3t153barEv();
+extern void _ZN4Xt153abcEv();
+static  VTBL_ENTRY vtc_Xt15[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt15[0]),
+  (VTBL_ENTRY)&_ZN3t153barEv,
+  (VTBL_ENTRY)&_ZN4Xt153abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt15[];
+extern void _ZN3t153barEv();
+static  VTBL_ENTRY _tg__ZTV3t15__4Xt15[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t15[0]),
+  (VTBL_ENTRY)&_ZN3t153barEv,
+};
+static  VTT_ENTRY vtt_Xt15[] = {
+  {&(_ZTV4Xt15[5]),  5,7},
+  {&(_ZTV4Xt15[5]),  5,7},
+  {&(_tg__ZTV3t15__4Xt15[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt15[];
+extern  VTBL_ENTRY _ZTV4Xt15[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt15[];
+Class_Descriptor cd_Xt15 = {  "Xt15", // class name
+  bases_Xt15, 3,
+  &(vtc_Xt15[0]), // expected_vtbl_contents
+  &(vtt_Xt15[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt15),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt15),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt15),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt16  : virtual t16 {
+  virtual void  abc(); // _ZN4Xt163abcEv
+  ~Xt16(); // tgen
+  Xt16(); // tgen
+};
+//SIG(1 Xt16) C1{ VBC2{ VBC3{ m} VBC4{} v2} v1}
+
+
+void  Xt16 ::abc(){vfunc_called(this, "_ZN4Xt163abcEv");}
+Xt16 ::~Xt16(){ note_dtor("Xt16", this);} // tgen
+Xt16 ::Xt16(){ note_ctor("Xt16", this);} // tgen
+
+static void Test_Xt16()
+{
+  extern Class_Descriptor cd_Xt16;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt16, buf);
+    Xt16 *dp, &lv = *(dp=new (buf) Xt16());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt16)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt16)");
+    check_base_class_offset(lv, (ne_0*)(t16*), 0, "Xt16");
+    check_base_class_offset(lv, (em_1*)(t16*), 0, "Xt16");
+    check_base_class_offset(lv, (t16*), 0, "Xt16");
+    test_class_info(&lv, &cd_Xt16);
+    dp->~Xt16();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt16(Test_Xt16, "Xt16", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt16C1Ev();
+extern void _ZN4Xt16D1Ev();
+Name_Map name_map_Xt16[] = {
+  NSPAIR(_ZN4Xt16C1Ev),
+  NSPAIR(_ZN4Xt16D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t16;
+extern VTBL_ENTRY _ZTI3t16[];
+extern  VTBL_ENTRY _ZTV3t16[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t16[];
+static Base_Class bases_Xt16[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {&cd_em_1,    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, 1},
+  {&cd_t16,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt16[];
+extern void _ZN3t163barEv();
+extern void _ZN4Xt163abcEv();
+static  VTBL_ENTRY vtc_Xt16[] = {
+  0,
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt16[0]),
+  (VTBL_ENTRY)&_ZN3t163barEv,
+  (VTBL_ENTRY)&_ZN4Xt163abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt16[];
+extern void _ZN3t163barEv();
+static  VTBL_ENTRY _tg__ZTV3t16__4Xt16[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t16[0]),
+  (VTBL_ENTRY)&_ZN3t163barEv,
+};
+static  VTT_ENTRY vtt_Xt16[] = {
+  {&(_ZTV4Xt16[6]),  6,8},
+  {&(_ZTV4Xt16[6]),  6,8},
+  {&(_tg__ZTV3t16__4Xt16[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI4Xt16[];
+extern  VTBL_ENTRY _ZTV4Xt16[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt16[];
+Class_Descriptor cd_Xt16 = {  "Xt16", // class name
+  bases_Xt16, 3,
+  &(vtc_Xt16[0]), // expected_vtbl_contents
+  &(vtt_Xt16[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt16),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt16),8, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt16),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt17  : virtual t17 {
+  virtual void  abc(); // _ZN4Xt173abcEv
+  ~Xt17(); // tgen
+  Xt17(); // tgen
+};
+//SIG(1 Xt17) C1{ VBC2{ BC3{ m} BC4{ m Fi:0} v2} v1}
+
+
+void  Xt17 ::abc(){vfunc_called(this, "_ZN4Xt173abcEv");}
+Xt17 ::~Xt17(){ note_dtor("Xt17", this);} // tgen
+Xt17 ::Xt17(){ note_ctor("Xt17", this);} // tgen
+
+static void Test_Xt17()
+{
+  extern Class_Descriptor cd_Xt17;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt17, buf);
+    Xt17 *dp, &lv = *(dp=new (buf) Xt17());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt17)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt17)");
+    check_base_class_offset(lv, (ne_0*)(t17*), 0, "Xt17");
+    check_base_class_offset(lv, (ne_1*)(t17*), 0, "Xt17");
+    check_base_class_offset(lv, (t17*), 0, "Xt17");
+    test_class_info(&lv, &cd_Xt17);
+    dp->~Xt17();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt17(Test_Xt17, "Xt17", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt17C1Ev();
+extern void _ZN4Xt17D1Ev();
+Name_Map name_map_Xt17[] = {
+  NSPAIR(_ZN4Xt17C1Ev),
+  NSPAIR(_ZN4Xt17D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t17;
+extern VTBL_ENTRY _ZTI3t17[];
+extern  VTBL_ENTRY _ZTV3t17[];
+static Base_Class bases_Xt17[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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_ne_1,    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_t17,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    3, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt17[];
+extern void _ZN3t173barEv();
+extern void _ZN4Xt173abcEv();
+static  VTBL_ENTRY vtc_Xt17[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt17[0]),
+  (VTBL_ENTRY)&_ZN3t173barEv,
+  (VTBL_ENTRY)&_ZN4Xt173abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt17[];
+static  VTT_ENTRY vtt_Xt17[] = {
+  {&(_ZTV4Xt17[4]),  4,6},
+  {&(_ZTV4Xt17[4]),  4,6},
+};
+extern VTBL_ENTRY _ZTI4Xt17[];
+extern  VTBL_ENTRY _ZTV4Xt17[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt17[];
+Class_Descriptor cd_Xt17 = {  "Xt17", // class name
+  bases_Xt17, 3,
+  &(vtc_Xt17[0]), // expected_vtbl_contents
+  &(vtt_Xt17[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt17),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt17),6, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt17),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt18  : virtual t18 {
+  virtual void  abc(); // _ZN4Xt183abcEv
+  ~Xt18(); // tgen
+  Xt18(); // tgen
+};
+//SIG(1 Xt18) C1{ VBC2{ VBC3{ m} BC4{ m Fi:0} v2} v1}
+
+
+void  Xt18 ::abc(){vfunc_called(this, "_ZN4Xt183abcEv");}
+Xt18 ::~Xt18(){ note_dtor("Xt18", this);} // tgen
+Xt18 ::Xt18(){ note_ctor("Xt18", this);} // tgen
+
+static void Test_Xt18()
+{
+  extern Class_Descriptor cd_Xt18;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt18, buf);
+    Xt18 *dp, &lv = *(dp=new (buf) Xt18());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt18)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt18)");
+    check_base_class_offset(lv, (ne_0*)(t18*), 0, "Xt18");
+    check_base_class_offset(lv, (ne_1*)(t18*), 0, "Xt18");
+    check_base_class_offset(lv, (t18*), 0, "Xt18");
+    test_class_info(&lv, &cd_Xt18);
+    dp->~Xt18();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt18(Test_Xt18, "Xt18", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt18C1Ev();
+extern void _ZN4Xt18D1Ev();
+Name_Map name_map_Xt18[] = {
+  NSPAIR(_ZN4Xt18C1Ev),
+  NSPAIR(_ZN4Xt18D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t18;
+extern VTBL_ENTRY _ZTI3t18[];
+extern  VTBL_ENTRY _ZTV3t18[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t18[];
+static Base_Class bases_Xt18[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {&cd_ne_1,    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_t18,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt18[];
+extern void _ZN3t183barEv();
+extern void _ZN4Xt183abcEv();
+static  VTBL_ENTRY vtc_Xt18[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt18[0]),
+  (VTBL_ENTRY)&_ZN3t183barEv,
+  (VTBL_ENTRY)&_ZN4Xt183abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt18[];
+extern void _ZN3t183barEv();
+static  VTBL_ENTRY _tg__ZTV3t18__4Xt18[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t18[0]),
+  (VTBL_ENTRY)&_ZN3t183barEv,
+};
+static  VTT_ENTRY vtt_Xt18[] = {
+  {&(_ZTV4Xt18[5]),  5,7},
+  {&(_ZTV4Xt18[5]),  5,7},
+  {&(_tg__ZTV3t18__4Xt18[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt18[];
+extern  VTBL_ENTRY _ZTV4Xt18[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt18[];
+Class_Descriptor cd_Xt18 = {  "Xt18", // class name
+  bases_Xt18, 3,
+  &(vtc_Xt18[0]), // expected_vtbl_contents
+  &(vtt_Xt18[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt18),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt18),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt18),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt19  : virtual t19 {
+  virtual void  abc(); // _ZN4Xt193abcEv
+  ~Xt19(); // tgen
+  Xt19(); // tgen
+};
+//SIG(1 Xt19) C1{ VBC2{ BC3{ m} VBC4{ m Fi:0} v2} v1}
+
+
+void  Xt19 ::abc(){vfunc_called(this, "_ZN4Xt193abcEv");}
+Xt19 ::~Xt19(){ note_dtor("Xt19", this);} // tgen
+Xt19 ::Xt19(){ note_ctor("Xt19", this);} // tgen
+
+static void Test_Xt19()
+{
+  extern Class_Descriptor cd_Xt19;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt19, buf);
+    Xt19 *dp, &lv = *(dp=new (buf) Xt19());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt19)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt19)");
+    check_base_class_offset(lv, (ne_0*)(t19*), 0, "Xt19");
+    check_base_class_offset(lv, (ne_1*)(t19*), 0, "Xt19");
+    check_base_class_offset(lv, (t19*), 0, "Xt19");
+    test_class_info(&lv, &cd_Xt19);
+    dp->~Xt19();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt19(Test_Xt19, "Xt19", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt19C1Ev();
+extern void _ZN4Xt19D1Ev();
+Name_Map name_map_Xt19[] = {
+  NSPAIR(_ZN4Xt19C1Ev),
+  NSPAIR(_ZN4Xt19D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t19;
+extern VTBL_ENTRY _ZTI3t19[];
+extern  VTBL_ENTRY _ZTV3t19[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t19[];
+static Base_Class bases_Xt19[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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_ne_1,    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, 1},
+  {&cd_t19,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt19[];
+extern void _ZN3t193barEv();
+extern void _ZN4Xt193abcEv();
+static  VTBL_ENTRY vtc_Xt19[] = {
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt19[0]),
+  (VTBL_ENTRY)&_ZN3t193barEv,
+  (VTBL_ENTRY)&_ZN4Xt193abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt19[];
+extern void _ZN3t193barEv();
+static  VTBL_ENTRY _tg__ZTV3t19__4Xt19[] = {
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t19[0]),
+  (VTBL_ENTRY)&_ZN3t193barEv,
+};
+static  VTT_ENTRY vtt_Xt19[] = {
+  {&(_ZTV4Xt19[5]),  5,7},
+  {&(_ZTV4Xt19[5]),  5,7},
+  {&(_tg__ZTV3t19__4Xt19[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt19[];
+extern  VTBL_ENTRY _ZTV4Xt19[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt19[];
+Class_Descriptor cd_Xt19 = {  "Xt19", // class name
+  bases_Xt19, 3,
+  &(vtc_Xt19[0]), // expected_vtbl_contents
+  &(vtt_Xt19[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt19),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt19),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt19),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt20  : virtual t20 {
+  virtual void  abc(); // _ZN4Xt203abcEv
+  ~Xt20(); // tgen
+  Xt20(); // tgen
+};
+//SIG(1 Xt20) C1{ VBC2{ VBC3{ m} VBC4{ m Fi:0} v2} v1}
+
+
+void  Xt20 ::abc(){vfunc_called(this, "_ZN4Xt203abcEv");}
+Xt20 ::~Xt20(){ note_dtor("Xt20", this);} // tgen
+Xt20 ::Xt20(){ note_ctor("Xt20", this);} // tgen
+
+static void Test_Xt20()
+{
+  extern Class_Descriptor cd_Xt20;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[2];
+    init_test(&cd_Xt20, buf);
+    Xt20 *dp, &lv = *(dp=new (buf) Xt20());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Xt20)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt20)");
+    check_base_class_offset(lv, (ne_0*)(t20*), 0, "Xt20");
+    check_base_class_offset(lv, (ne_1*)(t20*), 0, "Xt20");
+    check_base_class_offset(lv, (t20*), 0, "Xt20");
+    test_class_info(&lv, &cd_Xt20);
+    dp->~Xt20();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt20(Test_Xt20, "Xt20", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4Xt20C1Ev();
+extern void _ZN4Xt20D1Ev();
+Name_Map name_map_Xt20[] = {
+  NSPAIR(_ZN4Xt20C1Ev),
+  NSPAIR(_ZN4Xt20D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_ne_0;
+extern VTBL_ENTRY _ZTI4ne_0[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t20;
+extern VTBL_ENTRY _ZTI3t20[];
+extern  VTBL_ENTRY _ZTV3t20[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t20[];
+static Base_Class bases_Xt20[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_ne_0,    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, 1},
+  {&cd_ne_1,    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, 1},
+  {&cd_t20,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt20[];
+extern void _ZN3t203barEv();
+extern void _ZN4Xt203abcEv();
+static  VTBL_ENTRY vtc_Xt20[] = {
+  0,
+  0,
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt20[0]),
+  (VTBL_ENTRY)&_ZN3t203barEv,
+  (VTBL_ENTRY)&_ZN4Xt203abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt20[];
+extern void _ZN3t203barEv();
+static  VTBL_ENTRY _tg__ZTV3t20__4Xt20[] = {
+  0,
+  0,
+  0,
+  (VTBL_ENTRY)&(_ZTI3t20[0]),
+  (VTBL_ENTRY)&_ZN3t203barEv,
+};
+static  VTT_ENTRY vtt_Xt20[] = {
+  {&(_ZTV4Xt20[6]),  6,8},
+  {&(_ZTV4Xt20[6]),  6,8},
+  {&(_tg__ZTV3t20__4Xt20[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI4Xt20[];
+extern  VTBL_ENTRY _ZTV4Xt20[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt20[];
+Class_Descriptor cd_Xt20 = {  "Xt20", // class name
+  bases_Xt20, 3,
+  &(vtc_Xt20[0]), // expected_vtbl_contents
+  &(vtt_Xt20[0]), // expected_vtt_contents
+  ABISELECT(8,4), // object size
+  NSPAIRA(_ZTI4Xt20),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt20),8, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt20),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt21  : virtual t21 {
+  virtual void  abc(); // _ZN4Xt213abcEv
+  ~Xt21(); // tgen
+  Xt21(); // tgen
+};
+//SIG(1 Xt21) C1{ VBC2{ BC3{ Fi} v2} v1}
+
+
+void  Xt21 ::abc(){vfunc_called(this, "_ZN4Xt213abcEv");}
+Xt21 ::~Xt21(){ note_dtor("Xt21", this);} // tgen
+Xt21 ::Xt21(){ note_ctor("Xt21", this);} // tgen
+
+static void Test_Xt21()
+{
+  extern Class_Descriptor cd_Xt21;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[4];
+    init_test(&cd_Xt21, buf);
+    Xt21 *dp, &lv = *(dp=new (buf) Xt21());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Xt21)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt21)");
+    check_base_class_offset(lv, (xx*)(t21*), ABISELECT(16,8), "Xt21");
+    check_base_class_offset(lv, (t21*), ABISELECT(8,4), "Xt21");
+    test_class_info(&lv, &cd_Xt21);
+    dp->~Xt21();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt21(Test_Xt21, "Xt21", ABISELECT(24,12));
+
+#else // __cplusplus
+
+extern void _ZN4Xt21C1Ev();
+extern void _ZN4Xt21D1Ev();
+Name_Map name_map_Xt21[] = {
+  NSPAIR(_ZN4Xt21C1Ev),
+  NSPAIR(_ZN4Xt21D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_t21;
+extern VTBL_ENTRY _ZTI3t21[];
+extern  VTBL_ENTRY _ZTV3t21[];
+static Base_Class bases_Xt21[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 0},
+  {&cd_t21,    ABISELECT(8,4), //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 _ZTI4Xt21[];
+extern void _ZN4Xt213abcEv();
+extern void _ZN3t213barEv();
+static  VTBL_ENTRY vtc_Xt21[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt21[0]),
+  (VTBL_ENTRY)&_ZN4Xt213abcEv,
+  0,
+  ABISELECT(-8,-4),
+  (VTBL_ENTRY)&(_ZTI4Xt21[0]),
+  (VTBL_ENTRY)&_ZN3t213barEv,
+};
+extern VTBL_ENTRY _ZTV4Xt21[];
+static  VTT_ENTRY vtt_Xt21[] = {
+  {&(_ZTV4Xt21[3]),  3,8},
+  {&(_ZTV4Xt21[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4Xt21[];
+extern  VTBL_ENTRY _ZTV4Xt21[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt21[];
+Class_Descriptor cd_Xt21 = {  "Xt21", // class name
+  bases_Xt21, 2,
+  &(vtc_Xt21[0]), // expected_vtbl_contents
+  &(vtt_Xt21[0]), // expected_vtt_contents
+  ABISELECT(24,12), // object size
+  NSPAIRA(_ZTI4Xt21),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt21),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt21),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt22  : virtual t22 {
+  virtual void  abc(); // _ZN4Xt223abcEv
+  ~Xt22(); // tgen
+  Xt22(); // tgen
+};
+//SIG(1 Xt22) C1{ VBC2{ VBC3{ Fi} v2} v1}
+
+
+void  Xt22 ::abc(){vfunc_called(this, "_ZN4Xt223abcEv");}
+Xt22 ::~Xt22(){ note_dtor("Xt22", this);} // tgen
+Xt22 ::Xt22(){ note_ctor("Xt22", this);} // tgen
+
+static void Test_Xt22()
+{
+  extern Class_Descriptor cd_Xt22;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_Xt22, buf);
+    Xt22 *dp, &lv = *(dp=new (buf) Xt22());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Xt22)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt22)");
+    check_base_class_offset(lv, (xx*)(t22*), ABISELECT(8,4), "Xt22");
+    check_base_class_offset(lv, (t22*), 0, "Xt22");
+    test_class_info(&lv, &cd_Xt22);
+    dp->~Xt22();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt22(Test_Xt22, "Xt22", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4Xt22C1Ev();
+extern void _ZN4Xt22D1Ev();
+Name_Map name_map_Xt22[] = {
+  NSPAIR(_ZN4Xt22C1Ev),
+  NSPAIR(_ZN4Xt22D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_t22;
+extern VTBL_ENTRY _ZTI3t22[];
+extern  VTBL_ENTRY _ZTV3t22[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t22[];
+static Base_Class bases_Xt22[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    1, //immediately_derived
+  0, 1},
+  {&cd_t22,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt22[];
+extern void _ZN3t223barEv();
+extern void _ZN4Xt223abcEv();
+static  VTBL_ENTRY vtc_Xt22[] = {
+  0,
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt22[0]),
+  (VTBL_ENTRY)&_ZN3t223barEv,
+  (VTBL_ENTRY)&_ZN4Xt223abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt22[];
+extern void _ZN3t223barEv();
+static  VTBL_ENTRY _tg__ZTV3t22__4Xt22[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t22[0]),
+  (VTBL_ENTRY)&_ZN3t223barEv,
+};
+static  VTT_ENTRY vtt_Xt22[] = {
+  {&(_ZTV4Xt22[5]),  5,7},
+  {&(_ZTV4Xt22[5]),  5,7},
+  {&(_tg__ZTV3t22__4Xt22[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt22[];
+extern  VTBL_ENTRY _ZTV4Xt22[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt22[];
+Class_Descriptor cd_Xt22 = {  "Xt22", // class name
+  bases_Xt22, 2,
+  &(vtc_Xt22[0]), // expected_vtbl_contents
+  &(vtt_Xt22[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4Xt22),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt22),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt22),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt23  : virtual t23 {
+  virtual void  abc(); // _ZN4Xt233abcEv
+  ~Xt23(); // tgen
+  Xt23(); // tgen
+};
+//SIG(1 Xt23) C1{ VBC2{ BC3{ Fi} BC4{} v2} v1}
+
+
+void  Xt23 ::abc(){vfunc_called(this, "_ZN4Xt233abcEv");}
+Xt23 ::~Xt23(){ note_dtor("Xt23", this);} // tgen
+Xt23 ::Xt23(){ note_ctor("Xt23", this);} // tgen
+
+static void Test_Xt23()
+{
+  extern Class_Descriptor cd_Xt23;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[4];
+    init_test(&cd_Xt23, buf);
+    Xt23 *dp, &lv = *(dp=new (buf) Xt23());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Xt23)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt23)");
+    check_base_class_offset(lv, (xx*)(t23*), ABISELECT(16,8), "Xt23");
+    check_base_class_offset(lv, (em_1*)(t23*), ABISELECT(8,4), "Xt23");
+    check_base_class_offset(lv, (t23*), ABISELECT(8,4), "Xt23");
+    test_class_info(&lv, &cd_Xt23);
+    dp->~Xt23();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt23(Test_Xt23, "Xt23", ABISELECT(24,12));
+
+#else // __cplusplus
+
+extern void _ZN4Xt23C1Ev();
+extern void _ZN4Xt23D1Ev();
+Name_Map name_map_Xt23[] = {
+  NSPAIR(_ZN4Xt23C1Ev),
+  NSPAIR(_ZN4Xt23D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t23;
+extern VTBL_ENTRY _ZTI3t23[];
+extern  VTBL_ENTRY _ZTV3t23[];
+static Base_Class bases_Xt23[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_em_1,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_t23,    ABISELECT(8,4), //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 _ZTI4Xt23[];
+extern void _ZN4Xt233abcEv();
+extern void _ZN3t233barEv();
+static  VTBL_ENTRY vtc_Xt23[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt23[0]),
+  (VTBL_ENTRY)&_ZN4Xt233abcEv,
+  0,
+  ABISELECT(-8,-4),
+  (VTBL_ENTRY)&(_ZTI4Xt23[0]),
+  (VTBL_ENTRY)&_ZN3t233barEv,
+};
+extern VTBL_ENTRY _ZTV4Xt23[];
+static  VTT_ENTRY vtt_Xt23[] = {
+  {&(_ZTV4Xt23[3]),  3,8},
+  {&(_ZTV4Xt23[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4Xt23[];
+extern  VTBL_ENTRY _ZTV4Xt23[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt23[];
+Class_Descriptor cd_Xt23 = {  "Xt23", // class name
+  bases_Xt23, 3,
+  &(vtc_Xt23[0]), // expected_vtbl_contents
+  &(vtt_Xt23[0]), // expected_vtt_contents
+  ABISELECT(24,12), // object size
+  NSPAIRA(_ZTI4Xt23),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt23),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt23),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt24  : virtual t24 {
+  virtual void  abc(); // _ZN4Xt243abcEv
+  ~Xt24(); // tgen
+  Xt24(); // tgen
+};
+//SIG(1 Xt24) C1{ VBC2{ VBC3{ Fi} BC4{} v2} v1}
+
+
+void  Xt24 ::abc(){vfunc_called(this, "_ZN4Xt243abcEv");}
+Xt24 ::~Xt24(){ note_dtor("Xt24", this);} // tgen
+Xt24 ::Xt24(){ note_ctor("Xt24", this);} // tgen
+
+static void Test_Xt24()
+{
+  extern Class_Descriptor cd_Xt24;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_Xt24, buf);
+    Xt24 *dp, &lv = *(dp=new (buf) Xt24());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Xt24)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt24)");
+    check_base_class_offset(lv, (xx*)(t24*), ABISELECT(8,4), "Xt24");
+    check_base_class_offset(lv, (em_1*)(t24*), 0, "Xt24");
+    check_base_class_offset(lv, (t24*), 0, "Xt24");
+    test_class_info(&lv, &cd_Xt24);
+    dp->~Xt24();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt24(Test_Xt24, "Xt24", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4Xt24C1Ev();
+extern void _ZN4Xt24D1Ev();
+Name_Map name_map_Xt24[] = {
+  NSPAIR(_ZN4Xt24C1Ev),
+  NSPAIR(_ZN4Xt24D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t24;
+extern VTBL_ENTRY _ZTI3t24[];
+extern  VTBL_ENTRY _ZTV3t24[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t24[];
+static Base_Class bases_Xt24[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_em_1,    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_t24,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt24[];
+extern void _ZN3t243barEv();
+extern void _ZN4Xt243abcEv();
+static  VTBL_ENTRY vtc_Xt24[] = {
+  0,
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt24[0]),
+  (VTBL_ENTRY)&_ZN3t243barEv,
+  (VTBL_ENTRY)&_ZN4Xt243abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt24[];
+extern void _ZN3t243barEv();
+static  VTBL_ENTRY _tg__ZTV3t24__4Xt24[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t24[0]),
+  (VTBL_ENTRY)&_ZN3t243barEv,
+};
+static  VTT_ENTRY vtt_Xt24[] = {
+  {&(_ZTV4Xt24[5]),  5,7},
+  {&(_ZTV4Xt24[5]),  5,7},
+  {&(_tg__ZTV3t24__4Xt24[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt24[];
+extern  VTBL_ENTRY _ZTV4Xt24[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt24[];
+Class_Descriptor cd_Xt24 = {  "Xt24", // class name
+  bases_Xt24, 3,
+  &(vtc_Xt24[0]), // expected_vtbl_contents
+  &(vtt_Xt24[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4Xt24),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt24),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt24),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt25  : virtual t25 {
+  virtual void  abc(); // _ZN4Xt253abcEv
+  ~Xt25(); // tgen
+  Xt25(); // tgen
+};
+//SIG(1 Xt25) C1{ VBC2{ BC3{ Fi} VBC4{} v2} v1}
+
+
+void  Xt25 ::abc(){vfunc_called(this, "_ZN4Xt253abcEv");}
+Xt25 ::~Xt25(){ note_dtor("Xt25", this);} // tgen
+Xt25 ::Xt25(){ note_ctor("Xt25", this);} // tgen
+
+static void Test_Xt25()
+{
+  extern Class_Descriptor cd_Xt25;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[4];
+    init_test(&cd_Xt25, buf);
+    Xt25 *dp, &lv = *(dp=new (buf) Xt25());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Xt25)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt25)");
+    check_base_class_offset(lv, (xx*)(t25*), ABISELECT(16,8), "Xt25");
+    check_base_class_offset(lv, (em_1*)(t25*), 0, "Xt25");
+    check_base_class_offset(lv, (t25*), ABISELECT(8,4), "Xt25");
+    test_class_info(&lv, &cd_Xt25);
+    dp->~Xt25();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt25(Test_Xt25, "Xt25", ABISELECT(24,12));
+
+#else // __cplusplus
+
+extern void _ZN4Xt25C1Ev();
+extern void _ZN4Xt25D1Ev();
+Name_Map name_map_Xt25[] = {
+  NSPAIR(_ZN4Xt25C1Ev),
+  NSPAIR(_ZN4Xt25D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t25;
+extern VTBL_ENTRY _ZTI3t25[];
+extern  VTBL_ENTRY _ZTV3t25[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t25[];
+static Base_Class bases_Xt25[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_em_1,    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, 1},
+  {&cd_t25,    ABISELECT(8,4), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt25[];
+extern void _ZN4Xt253abcEv();
+extern void _ZN3t253barEv();
+static  VTBL_ENTRY vtc_Xt25[] = {
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt25[0]),
+  (VTBL_ENTRY)&_ZN4Xt253abcEv,
+  0,
+  ABISELECT(-8,-4),
+  ABISELECT(-8,-4),
+  (VTBL_ENTRY)&(_ZTI4Xt25[0]),
+  (VTBL_ENTRY)&_ZN3t253barEv,
+};
+extern VTBL_ENTRY _ZTV4Xt25[];
+extern void _ZN3t253barEv();
+static  VTBL_ENTRY _tg__ZTV3t25__4Xt25[] = {
+  ABISELECT(-8,-4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t25[0]),
+  (VTBL_ENTRY)&_ZN3t253barEv,
+};
+static  VTT_ENTRY vtt_Xt25[] = {
+  {&(_ZTV4Xt25[4]),  4,10},
+  {&(_ZTV4Xt25[9]),  9,10},
+  {&(_tg__ZTV3t25__4Xt25[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt25[];
+extern  VTBL_ENTRY _ZTV4Xt25[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt25[];
+Class_Descriptor cd_Xt25 = {  "Xt25", // class name
+  bases_Xt25, 3,
+  &(vtc_Xt25[0]), // expected_vtbl_contents
+  &(vtt_Xt25[0]), // expected_vtt_contents
+  ABISELECT(24,12), // object size
+  NSPAIRA(_ZTI4Xt25),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt25),10, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt25),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt26  : virtual t26 {
+  virtual void  abc(); // _ZN4Xt263abcEv
+  ~Xt26(); // tgen
+  Xt26(); // tgen
+};
+//SIG(1 Xt26) C1{ VBC2{ VBC3{ Fi} VBC4{} v2} v1}
+
+
+void  Xt26 ::abc(){vfunc_called(this, "_ZN4Xt263abcEv");}
+Xt26 ::~Xt26(){ note_dtor("Xt26", this);} // tgen
+Xt26 ::Xt26(){ note_ctor("Xt26", this);} // tgen
+
+static void Test_Xt26()
+{
+  extern Class_Descriptor cd_Xt26;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_Xt26, buf);
+    Xt26 *dp, &lv = *(dp=new (buf) Xt26());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Xt26)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt26)");
+    check_base_class_offset(lv, (xx*)(t26*), ABISELECT(8,4), "Xt26");
+    check_base_class_offset(lv, (em_1*)(t26*), 0, "Xt26");
+    check_base_class_offset(lv, (t26*), 0, "Xt26");
+    test_class_info(&lv, &cd_Xt26);
+    dp->~Xt26();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt26(Test_Xt26, "Xt26", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4Xt26C1Ev();
+extern void _ZN4Xt26D1Ev();
+Name_Map name_map_Xt26[] = {
+  NSPAIR(_ZN4Xt26C1Ev),
+  NSPAIR(_ZN4Xt26D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_em_1;
+extern VTBL_ENTRY _ZTI4em_1[];
+extern Class_Descriptor cd_t26;
+extern VTBL_ENTRY _ZTI3t26[];
+extern  VTBL_ENTRY _ZTV3t26[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t26[];
+static Base_Class bases_Xt26[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_em_1,    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, 1},
+  {&cd_t26,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt26[];
+extern void _ZN3t263barEv();
+extern void _ZN4Xt263abcEv();
+static  VTBL_ENTRY vtc_Xt26[] = {
+  0,
+  0,
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt26[0]),
+  (VTBL_ENTRY)&_ZN3t263barEv,
+  (VTBL_ENTRY)&_ZN4Xt263abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt26[];
+extern void _ZN3t263barEv();
+static  VTBL_ENTRY _tg__ZTV3t26__4Xt26[] = {
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t26[0]),
+  (VTBL_ENTRY)&_ZN3t263barEv,
+};
+static  VTT_ENTRY vtt_Xt26[] = {
+  {&(_ZTV4Xt26[6]),  6,8},
+  {&(_ZTV4Xt26[6]),  6,8},
+  {&(_tg__ZTV3t26__4Xt26[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI4Xt26[];
+extern  VTBL_ENTRY _ZTV4Xt26[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt26[];
+Class_Descriptor cd_Xt26 = {  "Xt26", // class name
+  bases_Xt26, 3,
+  &(vtc_Xt26[0]), // expected_vtbl_contents
+  &(vtt_Xt26[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4Xt26),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt26),8, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt26),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt27  : virtual t27 {
+  virtual void  abc(); // _ZN4Xt273abcEv
+  ~Xt27(); // tgen
+  Xt27(); // tgen
+};
+//SIG(1 Xt27) C1{ VBC2{ BC3{ Fi} BC4{ m Fi:0} v2} v1}
+
+
+void  Xt27 ::abc(){vfunc_called(this, "_ZN4Xt273abcEv");}
+Xt27 ::~Xt27(){ note_dtor("Xt27", this);} // tgen
+Xt27 ::Xt27(){ note_ctor("Xt27", this);} // tgen
+
+static void Test_Xt27()
+{
+  extern Class_Descriptor cd_Xt27;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[4];
+    init_test(&cd_Xt27, buf);
+    Xt27 *dp, &lv = *(dp=new (buf) Xt27());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Xt27)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt27)");
+    check_base_class_offset(lv, (xx*)(t27*), ABISELECT(16,8), "Xt27");
+    check_base_class_offset(lv, (ne_1*)(t27*), ABISELECT(8,4), "Xt27");
+    check_base_class_offset(lv, (t27*), ABISELECT(8,4), "Xt27");
+    test_class_info(&lv, &cd_Xt27);
+    dp->~Xt27();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt27(Test_Xt27, "Xt27", ABISELECT(24,12));
+
+#else // __cplusplus
+
+extern void _ZN4Xt27C1Ev();
+extern void _ZN4Xt27D1Ev();
+Name_Map name_map_Xt27[] = {
+  NSPAIR(_ZN4Xt27C1Ev),
+  NSPAIR(_ZN4Xt27D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t27;
+extern VTBL_ENTRY _ZTI3t27[];
+extern  VTBL_ENTRY _ZTV3t27[];
+static Base_Class bases_Xt27[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ne_1,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_t27,    ABISELECT(8,4), //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 _ZTI4Xt27[];
+extern void _ZN4Xt273abcEv();
+extern void _ZN3t273barEv();
+static  VTBL_ENTRY vtc_Xt27[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt27[0]),
+  (VTBL_ENTRY)&_ZN4Xt273abcEv,
+  0,
+  ABISELECT(-8,-4),
+  (VTBL_ENTRY)&(_ZTI4Xt27[0]),
+  (VTBL_ENTRY)&_ZN3t273barEv,
+};
+extern VTBL_ENTRY _ZTV4Xt27[];
+static  VTT_ENTRY vtt_Xt27[] = {
+  {&(_ZTV4Xt27[3]),  3,8},
+  {&(_ZTV4Xt27[7]),  7,8},
+};
+extern VTBL_ENTRY _ZTI4Xt27[];
+extern  VTBL_ENTRY _ZTV4Xt27[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt27[];
+Class_Descriptor cd_Xt27 = {  "Xt27", // class name
+  bases_Xt27, 3,
+  &(vtc_Xt27[0]), // expected_vtbl_contents
+  &(vtt_Xt27[0]), // expected_vtt_contents
+  ABISELECT(24,12), // object size
+  NSPAIRA(_ZTI4Xt27),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt27),8, //virtual function table var
+  3, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt27),2, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt28  : virtual t28 {
+  virtual void  abc(); // _ZN4Xt283abcEv
+  ~Xt28(); // tgen
+  Xt28(); // tgen
+};
+//SIG(1 Xt28) C1{ VBC2{ VBC3{ Fi} BC4{ m Fi:0} v2} v1}
+
+
+void  Xt28 ::abc(){vfunc_called(this, "_ZN4Xt283abcEv");}
+Xt28 ::~Xt28(){ note_dtor("Xt28", this);} // tgen
+Xt28 ::Xt28(){ note_ctor("Xt28", this);} // tgen
+
+static void Test_Xt28()
+{
+  extern Class_Descriptor cd_Xt28;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_Xt28, buf);
+    Xt28 *dp, &lv = *(dp=new (buf) Xt28());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Xt28)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt28)");
+    check_base_class_offset(lv, (xx*)(t28*), ABISELECT(8,4), "Xt28");
+    check_base_class_offset(lv, (ne_1*)(t28*), 0, "Xt28");
+    check_base_class_offset(lv, (t28*), 0, "Xt28");
+    test_class_info(&lv, &cd_Xt28);
+    dp->~Xt28();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt28(Test_Xt28, "Xt28", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4Xt28C1Ev();
+extern void _ZN4Xt28D1Ev();
+Name_Map name_map_Xt28[] = {
+  NSPAIR(_ZN4Xt28C1Ev),
+  NSPAIR(_ZN4Xt28D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t28;
+extern VTBL_ENTRY _ZTI3t28[];
+extern  VTBL_ENTRY _ZTV3t28[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t28[];
+static Base_Class bases_Xt28[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ne_1,    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_t28,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt28[];
+extern void _ZN3t283barEv();
+extern void _ZN4Xt283abcEv();
+static  VTBL_ENTRY vtc_Xt28[] = {
+  0,
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt28[0]),
+  (VTBL_ENTRY)&_ZN3t283barEv,
+  (VTBL_ENTRY)&_ZN4Xt283abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt28[];
+extern void _ZN3t283barEv();
+static  VTBL_ENTRY _tg__ZTV3t28__4Xt28[] = {
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t28[0]),
+  (VTBL_ENTRY)&_ZN3t283barEv,
+};
+static  VTT_ENTRY vtt_Xt28[] = {
+  {&(_ZTV4Xt28[5]),  5,7},
+  {&(_ZTV4Xt28[5]),  5,7},
+  {&(_tg__ZTV3t28__4Xt28[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt28[];
+extern  VTBL_ENTRY _ZTV4Xt28[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt28[];
+Class_Descriptor cd_Xt28 = {  "Xt28", // class name
+  bases_Xt28, 3,
+  &(vtc_Xt28[0]), // expected_vtbl_contents
+  &(vtt_Xt28[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4Xt28),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt28),7, //virtual function table var
+  5, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt28),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt29  : virtual t29 {
+  virtual void  abc(); // _ZN4Xt293abcEv
+  ~Xt29(); // tgen
+  Xt29(); // tgen
+};
+//SIG(1 Xt29) C1{ VBC2{ BC3{ Fi} VBC4{ m Fi:0} v2} v1}
+
+
+void  Xt29 ::abc(){vfunc_called(this, "_ZN4Xt293abcEv");}
+Xt29 ::~Xt29(){ note_dtor("Xt29", this);} // tgen
+Xt29 ::Xt29(){ note_ctor("Xt29", this);} // tgen
+
+static void Test_Xt29()
+{
+  extern Class_Descriptor cd_Xt29;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[4];
+    init_test(&cd_Xt29, buf);
+    Xt29 *dp, &lv = *(dp=new (buf) Xt29());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Xt29)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt29)");
+    check_base_class_offset(lv, (xx*)(t29*), ABISELECT(16,8), "Xt29");
+    check_base_class_offset(lv, (ne_1*)(t29*), 0, "Xt29");
+    check_base_class_offset(lv, (t29*), ABISELECT(8,4), "Xt29");
+    test_class_info(&lv, &cd_Xt29);
+    dp->~Xt29();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt29(Test_Xt29, "Xt29", ABISELECT(24,12));
+
+#else // __cplusplus
+
+extern void _ZN4Xt29C1Ev();
+extern void _ZN4Xt29D1Ev();
+Name_Map name_map_Xt29[] = {
+  NSPAIR(_ZN4Xt29C1Ev),
+  NSPAIR(_ZN4Xt29D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t29;
+extern VTBL_ENTRY _ZTI3t29[];
+extern  VTBL_ENTRY _ZTV3t29[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t29[];
+static Base_Class bases_Xt29[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(16,8), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 0},
+  {&cd_ne_1,    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, 1},
+  {&cd_t29,    ABISELECT(8,4), //bcp->offset
+    5, //bcp->virtual_function_table_offset
+    4, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt29[];
+extern void _ZN4Xt293abcEv();
+extern void _ZN3t293barEv();
+static  VTBL_ENTRY vtc_Xt29[] = {
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt29[0]),
+  (VTBL_ENTRY)&_ZN4Xt293abcEv,
+  0,
+  ABISELECT(-8,-4),
+  ABISELECT(-8,-4),
+  (VTBL_ENTRY)&(_ZTI4Xt29[0]),
+  (VTBL_ENTRY)&_ZN3t293barEv,
+};
+extern VTBL_ENTRY _ZTV4Xt29[];
+extern void _ZN3t293barEv();
+static  VTBL_ENTRY _tg__ZTV3t29__4Xt29[] = {
+  ABISELECT(-8,-4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t29[0]),
+  (VTBL_ENTRY)&_ZN3t293barEv,
+};
+static  VTT_ENTRY vtt_Xt29[] = {
+  {&(_ZTV4Xt29[4]),  4,10},
+  {&(_ZTV4Xt29[9]),  9,10},
+  {&(_tg__ZTV3t29__4Xt29[3]),  3,4},
+};
+extern VTBL_ENTRY _ZTI4Xt29[];
+extern  VTBL_ENTRY _ZTV4Xt29[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt29[];
+Class_Descriptor cd_Xt29 = {  "Xt29", // class name
+  bases_Xt29, 3,
+  &(vtc_Xt29[0]), // expected_vtbl_contents
+  &(vtt_Xt29[0]), // expected_vtt_contents
+  ABISELECT(24,12), // object size
+  NSPAIRA(_ZTI4Xt29),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt29),10, //virtual function table var
+  4, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt29),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  Xt30  : virtual t30 {
+  virtual void  abc(); // _ZN4Xt303abcEv
+  ~Xt30(); // tgen
+  Xt30(); // tgen
+};
+//SIG(1 Xt30) C1{ VBC2{ VBC3{ Fi} VBC4{ m Fi:0} v2} v1}
+
+
+void  Xt30 ::abc(){vfunc_called(this, "_ZN4Xt303abcEv");}
+Xt30 ::~Xt30(){ note_dtor("Xt30", this);} // tgen
+Xt30 ::Xt30(){ note_ctor("Xt30", this);} // tgen
+
+static void Test_Xt30()
+{
+  extern Class_Descriptor cd_Xt30;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[3];
+    init_test(&cd_Xt30, buf);
+    Xt30 *dp, &lv = *(dp=new (buf) Xt30());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Xt30)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Xt30)");
+    check_base_class_offset(lv, (xx*)(t30*), ABISELECT(8,4), "Xt30");
+    check_base_class_offset(lv, (ne_1*)(t30*), 0, "Xt30");
+    check_base_class_offset(lv, (t30*), 0, "Xt30");
+    test_class_info(&lv, &cd_Xt30);
+    dp->~Xt30();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vXt30(Test_Xt30, "Xt30", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void _ZN4Xt30C1Ev();
+extern void _ZN4Xt30D1Ev();
+Name_Map name_map_Xt30[] = {
+  NSPAIR(_ZN4Xt30C1Ev),
+  NSPAIR(_ZN4Xt30D1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_xx;
+extern VTBL_ENTRY _ZTI2xx[];
+extern Class_Descriptor cd_ne_1;
+extern VTBL_ENTRY _ZTI4ne_1[];
+extern Class_Descriptor cd_t30;
+extern VTBL_ENTRY _ZTI3t30[];
+extern  VTBL_ENTRY _ZTV3t30[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT3t30[];
+static Base_Class bases_Xt30[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_xx,    ABISELECT(8,4), //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    -1, //init_seq
+    2, //immediately_derived
+  0, 1},
+  {&cd_ne_1,    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, 1},
+  {&cd_t30,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    5, //num_negative_vtable_entries(t, bcp)
+    2, //bcp->index_in_construction_vtbl_array
+    3, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 1},
+  {0}};
+extern VTBL_ENTRY _ZTI4Xt30[];
+extern void _ZN3t303barEv();
+extern void _ZN4Xt303abcEv();
+static  VTBL_ENTRY vtc_Xt30[] = {
+  0,
+  0,
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI4Xt30[0]),
+  (VTBL_ENTRY)&_ZN3t303barEv,
+  (VTBL_ENTRY)&_ZN4Xt303abcEv,
+};
+extern VTBL_ENTRY _ZTV4Xt30[];
+extern void _ZN3t303barEv();
+static  VTBL_ENTRY _tg__ZTV3t30__4Xt30[] = {
+  0,
+  ABISELECT(8,4),
+  0,
+  (VTBL_ENTRY)&(_ZTI3t30[0]),
+  (VTBL_ENTRY)&_ZN3t303barEv,
+};
+static  VTT_ENTRY vtt_Xt30[] = {
+  {&(_ZTV4Xt30[6]),  6,8},
+  {&(_ZTV4Xt30[6]),  6,8},
+  {&(_tg__ZTV3t30__4Xt30[4]),  4,5},
+};
+extern VTBL_ENTRY _ZTI4Xt30[];
+extern  VTBL_ENTRY _ZTV4Xt30[];
+extern  VTBL_ENTRY * __attribute__((weak))_ZTT4Xt30[];
+Class_Descriptor cd_Xt30 = {  "Xt30", // class name
+  bases_Xt30, 3,
+  &(vtc_Xt30[0]), // expected_vtbl_contents
+  &(vtt_Xt30[0]), // expected_vtt_contents
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4Xt30),ABISELECT(40,24), //typeinfo_var
+  NSPAIRA(_ZTV4Xt30),8, //virtual function table var
+  6, // offset into main vftv pointed to by object[0]
+  NSPAIRA(_ZTT4Xt30),3, //virtual table table var
+  1, // n_initialized_bases
+  1, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/T_nearly_empty.x
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/T_purevirt.x
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/T_purevirt.x?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/T_purevirt.x (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/T_purevirt.x Mon Jul 28 16:20:34 2014
@@ -0,0 +1,253 @@
+// 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  abcd  {
+  int p;
+  virtual void  foo1()=0; // _ZN4abcd4foo1Ev
+  virtual void  foo3()=0; // _ZN4abcd4foo3Ev
+   ~abcd(); // _ZN4abcdD1Ev
+   abcd(); // ABISELECT(_ZN4abcdC2Ev,_ZN4abcdC1Ev)
+};
+//SIG(-1 abcd) C1{ v1 v2 Fi}
+
+
+ abcd ::~abcd(){ note_dtor("abcd", this);}
+ abcd ::abcd(){ note_ctor("abcd", this);}
+
+static void Test_abcd()
+{
+  // abstract class test skipped
+}
+static Arrange_To_Call_Me vabcd(Test_abcd, "abcd", ABISELECT(16,8));
+
+#else // __cplusplus
+
+extern void ABISELECT(_ZN4abcdC2Ev,_ZN4abcdC1Ev)();
+extern void _ZN4abcdD1Ev();
+Name_Map name_map_abcd[] = {
+  NSPAIR(ABISELECT(_ZN4abcdC2Ev,_ZN4abcdC1Ev)),
+  NSPAIR(_ZN4abcdD1Ev),
+  {0,0}
+};
+extern VTBL_ENTRY _ZTI4abcd[];
+extern void __cxa_pure_virtual();
+extern void __cxa_pure_virtual();
+static  VTBL_ENTRY vtc_abcd[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4abcd[0]),
+  (VTBL_ENTRY)&__cxa_pure_virtual,
+  (VTBL_ENTRY)&__cxa_pure_virtual,
+};
+extern VTBL_ENTRY _ZTI4abcd[];
+VTBL_ENTRY *P__ZTI4abcd = _ZTI4abcd; 
+extern  VTBL_ENTRY _ZTV4abcd[];
+Class_Descriptor cd_abcd = {  "abcd", // class name
+  0,0,//no base classes
+  &(vtc_abcd[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,8), // object size
+  NSPAIRA(_ZTI4abcd),ABISELECT(16,8), //typeinfo_var
+  NSPAIRA(_ZTV4abcd),4, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  0, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  efgh  : abcd {
+  int q;
+   efgh(); // ABISELECT(_ZN4efghC2Ev,_ZN4efghC1Ev)
+  virtual void  foo2()=0; // _ZN4efgh4foo2Ev
+  virtual void  foo3()=0; // _ZN4efgh4foo3Ev
+   ~efgh(); // _ZN4efghD1Ev
+};
+//SIG(-1 efgh) C1{ BC2{ v3 v2 Fi} v1 v2 Fi}
+
+
+ efgh ::efgh(){ note_ctor("efgh", this);}
+ efgh ::~efgh(){ note_dtor("efgh", this);}
+
+static void Test_efgh()
+{
+  // abstract class test skipped
+}
+static Arrange_To_Call_Me vefgh(Test_efgh, "efgh", ABISELECT(16,12));
+
+#else // __cplusplus
+
+extern void ABISELECT(_ZN4efghC2Ev,_ZN4efghC1Ev)();
+extern void _ZN4efghD1Ev();
+Name_Map name_map_efgh[] = {
+  NSPAIR(ABISELECT(_ZN4efghC2Ev,_ZN4efghC1Ev)),
+  NSPAIR(_ZN4efghD1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_abcd;
+extern VTBL_ENTRY _ZTI4abcd[];
+extern  VTBL_ENTRY _ZTV4abcd[];
+static Base_Class bases_efgh[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_abcd,    0, //bcp->offset
+    -1, //bcp->virtual_function_table_offset
+    2, //num_negative_vtable_entries(t, bcp)
+    0, //bcp->index_in_construction_vtbl_array
+    0, //bcp->base_subarray_index_in_construction_vtbl_array
+    1, //init_seq
+    -1, //immediately_derived
+  1, 0},
+  {0}};
+extern VTBL_ENTRY _ZTI4efgh[];
+extern void __cxa_pure_virtual();
+extern void __cxa_pure_virtual();
+extern void __cxa_pure_virtual();
+static  VTBL_ENTRY vtc_efgh[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4efgh[0]),
+  (VTBL_ENTRY)&__cxa_pure_virtual,
+  (VTBL_ENTRY)&__cxa_pure_virtual,
+  (VTBL_ENTRY)&__cxa_pure_virtual,
+};
+extern VTBL_ENTRY _ZTI4efgh[];
+VTBL_ENTRY *P__ZTI4efgh = _ZTI4efgh; 
+extern  VTBL_ENTRY _ZTV4efgh[];
+Class_Descriptor cd_efgh = {  "efgh", // class name
+  bases_efgh, 1,
+  &(vtc_efgh[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(16,12), // object size
+  NSPAIRA(_ZTI4efgh),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV4efgh),5, //virtual function table var
+  2, // offset into main vftv pointed to by object[0]
+  {0,0},0, // virtual table table var
+  1, // n_initialized_bases
+  0, // has_virtual_bases
+  0, // has_class_type_fields
+  0, // alt-thunk-names
+};
+#endif // __cplusplus
+
+//============================================================================
+
+#ifdef __cplusplus
+
+struct  pqrs  : efgh {
+  int r;
+   pqrs(); // _ZN4pqrsC1Ev
+  virtual void  foo1(); // _ZN4pqrs4foo1Ev
+  virtual void  foo2(); // _ZN4pqrs4foo2Ev
+  virtual void  foo3(); // _ZN4pqrs4foo3Ev
+  virtual void  foo4(); // _ZN4pqrs4foo4Ev
+   ~pqrs(); // _ZN4pqrsD1Ev
+};
+//SIG(1 pqrs) C1{ BC2{ BC3{ v1 v3 Fi} v2 v3 Fi} v1 v2 v3 v4 Fi}
+
+
+ pqrs ::pqrs(){ note_ctor("pqrs", this);}
+void  pqrs ::foo1(){vfunc_called(this, "_ZN4pqrs4foo1Ev");}
+void  pqrs ::foo2(){vfunc_called(this, "_ZN4pqrs4foo2Ev");}
+void  pqrs ::foo3(){vfunc_called(this, "_ZN4pqrs4foo3Ev");}
+void  pqrs ::foo4(){vfunc_called(this, "_ZN4pqrs4foo4Ev");}
+ pqrs ::~pqrs(){ note_dtor("pqrs", this);}
+
+static void Test_pqrs()
+{
+  extern Class_Descriptor cd_pqrs;
+  void *lvp;
+  {
+    ABISELECT(double,int) buf[ABISELECT(4,5)];
+    init_test(&cd_pqrs, buf);
+    pqrs *dp, &lv = *(dp=new (buf) pqrs());
+    lvp = (void*)&lv;
+    check2(sizeof(lv), ABISELECT(24,16), "sizeof(pqrs)");
+    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(pqrs)");
+    check_base_class_offset(lv, (abcd*)(efgh*), 0, "pqrs");
+    check_base_class_offset(lv, (efgh*), 0, "pqrs");
+    check_field_offset(lv, r, ABISELECT(16,12), "pqrs.r");
+    test_class_info(&lv, &cd_pqrs);
+    dp->~pqrs();
+  }
+  Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vpqrs(Test_pqrs, "pqrs", ABISELECT(24,16));
+
+#else // __cplusplus
+
+extern void _ZN4pqrsC1Ev();
+extern void _ZN4pqrsD1Ev();
+Name_Map name_map_pqrs[] = {
+  NSPAIR(_ZN4pqrsC1Ev),
+  NSPAIR(_ZN4pqrsD1Ev),
+  {0,0}
+};
+extern Class_Descriptor cd_abcd;
+extern VTBL_ENTRY _ZTI4abcd[];
+extern  VTBL_ENTRY _ZTV4abcd[];
+extern Class_Descriptor cd_efgh;
+extern VTBL_ENTRY _ZTI4efgh[];
+extern  VTBL_ENTRY _ZTV4efgh[];
+static Base_Class bases_pqrs[] = {
+  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
+  {&cd_abcd,    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
+  0, 0},
+  {&cd_efgh,    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 _ZTI4pqrs[];
+extern void _ZN4pqrs4foo1Ev();
+extern void _ZN4pqrs4foo3Ev();
+extern void _ZN4pqrs4foo2Ev();
+extern void _ZN4pqrs4foo4Ev();
+static  VTBL_ENTRY vtc_pqrs[] = {
+  0,
+  (VTBL_ENTRY)&(_ZTI4pqrs[0]),
+  (VTBL_ENTRY)&_ZN4pqrs4foo1Ev,
+  (VTBL_ENTRY)&_ZN4pqrs4foo3Ev,
+  (VTBL_ENTRY)&_ZN4pqrs4foo2Ev,
+  (VTBL_ENTRY)&_ZN4pqrs4foo4Ev,
+};
+extern VTBL_ENTRY _ZTI4pqrs[];
+extern  VTBL_ENTRY _ZTV4pqrs[];
+Class_Descriptor cd_pqrs = {  "pqrs", // class name
+  bases_pqrs, 2,
+  &(vtc_pqrs[0]), // expected_vtbl_contents
+  0, //no vtt
+  ABISELECT(24,16), // object size
+  NSPAIRA(_ZTI4pqrs),ABISELECT(24,12), //typeinfo_var
+  NSPAIRA(_ZTV4pqrs),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
+
+//============================================================================
+

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/T_purevirt.x
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/lambda_capture.x
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/lambda_capture.x?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/lambda_capture.x (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/lambda_capture.x Mon Jul 28 16:20:34 2014
@@ -0,0 +1,481 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: cxx_compiler -c %s cxx_11 -o %t1.o
+// RUN: c_compiler -c %s -o %t2.o
+// RUN: linker -o %t%exeext %t1.o %t2.o 
+// RUN: runtool %t%exeext | grep  "PASSED"
+#define MAXG 4
+
+typedef signed char chtype;
+#ifdef __cplusplus
+extern "C" int printf(const char *, ...);
+int va[MAXG] = {1, 3, 7, 10}, vb[MAXG] = {-2, -4, -7, 100}, ga, gb, nerr;
+extern "C" void barcc(int, ...);
+void foocc()  {  chtype a ; chtype b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barcc(0,&f);
+  }
+}
+extern "C" void barcs(int, ...);
+void foocs()  {  chtype a ; short b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barcs(0,&f);
+  }
+}
+extern "C" void barci(int, ...);
+void fooci()  {  chtype a ; int b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barci(0,&f);
+  }
+}
+extern "C" void barcl(int, ...);
+void foocl()  {  chtype a ; long b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barcl(0,&f);
+  }
+}
+extern "C" void barcf(int, ...);
+void foocf()  {  chtype a ; float b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barcf(0,&f);
+  }
+}
+extern "C" void barcd(int, ...);
+void foocd()  {  chtype a ; double b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barcd(0,&f);
+  }
+}
+extern "C" void barsc(int, ...);
+void foosc()  {  short a ; chtype b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barsc(0,&f);
+  }
+}
+extern "C" void barss(int, ...);
+void fooss()  {  short a ; short b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barss(0,&f);
+  }
+}
+extern "C" void barsi(int, ...);
+void foosi()  {  short a ; int b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barsi(0,&f);
+  }
+}
+extern "C" void barsl(int, ...);
+void foosl()  {  short a ; long b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barsl(0,&f);
+  }
+}
+extern "C" void barsf(int, ...);
+void foosf()  {  short a ; float b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barsf(0,&f);
+  }
+}
+extern "C" void barsd(int, ...);
+void foosd()  {  short a ; double b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barsd(0,&f);
+  }
+}
+extern "C" void baric(int, ...);
+void fooic()  {  int a ; chtype b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; baric(0,&f);
+  }
+}
+extern "C" void baris(int, ...);
+void foois()  {  int a ; short b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; baris(0,&f);
+  }
+}
+extern "C" void barii(int, ...);
+void fooii()  {  int a ; int b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barii(0,&f);
+  }
+}
+extern "C" void baril(int, ...);
+void fooil()  {  int a ; long b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; baril(0,&f);
+  }
+}
+extern "C" void barif(int, ...);
+void fooif()  {  int a ; float b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barif(0,&f);
+  }
+}
+extern "C" void barid(int, ...);
+void fooid()  {  int a ; double b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barid(0,&f);
+  }
+}
+extern "C" void barlc(int, ...);
+void foolc()  {  long a ; chtype b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barlc(0,&f);
+  }
+}
+extern "C" void barls(int, ...);
+void fools()  {  long a ; short b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barls(0,&f);
+  }
+}
+extern "C" void barli(int, ...);
+void fooli()  {  long a ; int b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barli(0,&f);
+  }
+}
+extern "C" void barll(int, ...);
+void fooll()  {  long a ; long b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barll(0,&f);
+  }
+}
+extern "C" void barlf(int, ...);
+void foolf()  {  long a ; float b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barlf(0,&f);
+  }
+}
+extern "C" void barld(int, ...);
+void foold()  {  long a ; double b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barld(0,&f);
+  }
+}
+extern "C" void barfc(int, ...);
+void foofc()  {  float a ; chtype b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barfc(0,&f);
+  }
+}
+extern "C" void barfs(int, ...);
+void foofs()  {  float a ; short b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barfs(0,&f);
+  }
+}
+extern "C" void barfi(int, ...);
+void foofi()  {  float a ; int b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barfi(0,&f);
+  }
+}
+extern "C" void barfl(int, ...);
+void foofl()  {  float a ; long b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barfl(0,&f);
+  }
+}
+extern "C" void barff(int, ...);
+void fooff()  {  float a ; float b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barff(0,&f);
+  }
+}
+extern "C" void barfd(int, ...);
+void foofd()  {  float a ; double b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; barfd(0,&f);
+  }
+}
+extern "C" void bardc(int, ...);
+void foodc()  {  double a ; chtype b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; bardc(0,&f);
+  }
+}
+extern "C" void bards(int, ...);
+void foods()  {  double a ; short b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; bards(0,&f);
+  }
+}
+extern "C" void bardi(int, ...);
+void foodi()  {  double a ; int b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; bardi(0,&f);
+  }
+}
+extern "C" void bardl(int, ...);
+void foodl()  {  double a ; long b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; bardl(0,&f);
+  }
+}
+extern "C" void bardf(int, ...);
+void foodf()  {  double a ; float b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; bardf(0,&f);
+  }
+}
+extern "C" void bardd(int, ...);
+void foodd()  {  double a ; double b ;
+  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){
+    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; bardd(0,&f);
+  }
+}
+int main() {
+
+  foocc();
+  foocs();
+  fooci();
+  foocl();
+  foocf();
+  foocd();
+  foosc();
+  fooss();
+  foosi();
+  foosl();
+  foosf();
+  foosd();
+  fooic();
+  foois();
+  fooii();
+  fooil();
+  fooif();
+  fooid();
+  foolc();
+  fools();
+  fooli();
+  fooll();
+  foolf();
+  foold();
+  foofc();
+  foofs();
+  foofi();
+  foofl();
+  fooff();
+  foofd();
+  foodc();
+  foods();
+  foodi();
+  foodl();
+  foodf();
+  foodd();
+  printf("%s\n", nerr ? "FAILED":"PASSED");
+}
+#else // __cplusplus
+extern  int printf(const char *, ...);
+extern int nerr, va[MAXG], vb[MAXG], ga, gb;
+void checkvals(int a, int b, int l) {
+  if (a != va[ga] || b != vb[gb])
+    printf("ERROR@%d %d!=va[%d]==%d %d!=vb[%d]==%d %d\n", l, a, ga, va[ga], b, gb, vb[gb], nerr++);
+}
+
+void showvals(void *p, int ln)
+{  
+  int i;
+  unsigned char *pu = (unsigned char*) p;
+  printf("SHOW@%d: ", ln);
+  for (i=0; i<20; i++) printf("%s%02x", (i&3)?"":" ", pu[i]);
+  printf("\n");
+}
+
+
+// ----- chtype chtype ----
+struct Fcc { chtype a; chtype b; };
+void barcc(int x, struct Fcc *p) { checkvals(p->a, p->b, __LINE__); } //showvals(p, __LINE__); 
+
+// ----- chtype short ----
+struct Fcs { chtype a; short b; };
+void barcs(int x, struct Fcs *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- chtype int ----
+struct Fci { chtype a; int b; };
+void barci(int x, struct Fci *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- chtype long ----
+struct Fcl { chtype a; long b; };
+void barcl(int x, struct Fcl *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- chtype float ----
+struct Fcf { chtype a; float b; };
+void barcf(int x, struct Fcf *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- chtype double ----
+struct Fcd { chtype a; double b; };
+void barcd(int x, struct Fcd *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- short chtype ----
+struct Fsc { short a; chtype b; };
+void barsc(int x, struct Fsc *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- short short ----
+struct Fss { short a; short b; };
+void barss(int x, struct Fss *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- short int ----
+struct Fsi { short a; int b; };
+void barsi(int x, struct Fsi *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- short long ----
+struct Fsl { short a; long b; };
+void barsl(int x, struct Fsl *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- short float ----
+struct Fsf { short a; float b; };
+void barsf(int x, struct Fsf *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- short double ----
+struct Fsd { short a; double b; };
+void barsd(int x, struct Fsd *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- int chtype ----
+struct Fic { int a; chtype b; };
+void baric(int x, struct Fic *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- int short ----
+struct Fis { int a; short b; };
+void baris(int x, struct Fis *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- int int ----
+struct Fii { int a; int b; };
+void barii(int x, struct Fii *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- int long ----
+struct Fil { int a; long b; };
+void baril(int x, struct Fil *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- int float ----
+struct Fif { int a; float b; };
+void barif(int x, struct Fif *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- int double ----
+struct Fid { int a; double b; };
+void barid(int x, struct Fid *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- long chtype ----
+struct Flc { long a; chtype b; };
+void barlc(int x, struct Flc *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- long short ----
+struct Fls { long a; short b; };
+void barls(int x, struct Fls *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- long int ----
+struct Fli { long a; int b; };
+void barli(int x, struct Fli *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- long long ----
+struct Fll { long a; long b; };
+void barll(int x, struct Fll *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- long float ----
+struct Flf { long a; float b; };
+void barlf(int x, struct Flf *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- long double ----
+struct Fld { long a; double b; };
+void barld(int x, struct Fld *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- float chtype ----
+struct Ffc { float a; chtype b; };
+void barfc(int x, struct Ffc *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- float short ----
+struct Ffs { float a; short b; };
+void barfs(int x, struct Ffs *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- float int ----
+struct Ffi { float a; int b; };
+void barfi(int x, struct Ffi *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- float long ----
+struct Ffl { float a; long b; };
+void barfl(int x, struct Ffl *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- float float ----
+struct Fff { float a; float b; };
+void barff(int x, struct Fff *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- float double ----
+struct Ffd { float a; double b; };
+void barfd(int x, struct Ffd *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- double chtype ----
+struct Fdc { double a; chtype b; };
+void bardc(int x, struct Fdc *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- double short ----
+struct Fds { double a; short b; };
+void bards(int x, struct Fds *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- double int ----
+struct Fdi { double a; int b; };
+void bardi(int x, struct Fdi *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- double long ----
+struct Fdl { double a; long b; };
+void bardl(int x, struct Fdl *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- double float ----
+struct Fdf { double a; float b; };
+void bardf(int x, struct Fdf *p) { checkvals(p->a, p->b, __LINE__); }
+
+// ----- double double ----
+struct Fdd { double a; double b; };
+void bardd(int x, struct Fdd *p) { checkvals(p->a, p->b, __LINE__); }
+#endif
+
+// generated from the following script
+#if 0
+echo "#define MAXG 4"
+echo "#ifdef __cplusplus"
+echo "extern \"C\" int printf(const char *, ...);"
+#echo "template <class T> void TMPL(T fo);"
+echo "int va[MAXG] = {1, 3, 7, 10}, vb[MAXG] = {-2, -4, -7, 100}, ga, gb, nerr;"
+#  type1 type2 tag1 tag2
+doit()
+{
+   X=`echo $1 | sed -e 's/\(.\).*/\1/' `
+   Y=`echo $2 | sed -e 's/\(.\).*/\1/' `
+   echo "  foo$X$Y();" >> _foocalls
+   echo "extern \"C\" void bar$X$Y(int, ...);"
+   echo "void foo$X$Y()  {  $1 a ; $2 b ;"
+   echo "  for (ga=0; ga<MAXG; ga++) for (gb=0; gb<MAXG; gb++){"
+   echo "    a = va[ga]; b = vb[gb]; auto f = [a, b](int x) { return x + a + b; }; bar$X$Y(0,&f);"
+   echo "  }"
+   echo "}"
+   echo "" >> _cpart
+   echo "// ----- $1 $2 ----" >> _cpart
+   echo "struct F$X$Y { $1 a; $2 b; };" >> _cpart
+   echo "void bar$X${Y}(int x, struct F$X$Y *p) { checkvals(p->a, p->b, __LINE__); }" >> _cpart
+}
+
+echo > _foocalls
+echo > _cpart
+
+#echo "void foo() {"
+for t1 in chtype short int long float double; do
+for t2 in chtype short int long float double; do
+  doit $t1 $t2
+done
+done
+#echo "}"
+   
+echo "int main() {"
+cat _foocalls
+echo "  printf(\"%s\\n\", nerr ? \"FAILED\":\"PASSED\");"
+echo "}"
+echo "#else // __cplusplus"
+echo "extern  int printf(const char *, ...);"
+echo "extern int nerr, va[MAXG], vb[MAXG], ga, gb;"
+echo "void checkvals(int a, int b, int l) {"
+echo "  if (a != va[ga] || b != gb[vb])"
+echo "    printf(\"ERROR@%d %d/%d %d/%d %d\\n\", l, a, va[ga], b, gb[vb], nerr++);"
+echo "}"
+cat _cpart
+echo "#endif"
+#endif

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/lambda_capture.x
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/s2_8a.xpp
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/s2_8a.xpp?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/s2_8a.xpp (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/s2_8a.xpp Mon Jul 28 16:20:34 2014
@@ -0,0 +1,50 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: cxx_compiler -S %s -o %t.s
+// RUN: cat %t.s | FileCheck prefixes %s
+// init guard of plain global static var
+// init guard of function local statis var
+// init guard of template instance
+// check that guard var gets reset by exception
+
+
+
+// CHECK-DAG: .size	_ZGVZ4addxIfET_S0_S0_E1p, 8
+// CHECK-DAG: .size	_ZGVZ3fooiiE1r, 8
+// CHECK-DAG: call{{.*}}	__cxa_guard_acquire
+// CHECK-DAG: call{{.*}}	__cxa_guard_release
+//
+// the static variables themselves
+// CHECK-DAG: .size	_ZZ4addxIfET_S0_S0_E1p,{{ *}}4
+// CHECK-DAG: .size	_ZZ3fooiiE1r,{{ *}}4
+// CHECK-DAG: _ZGVN4pairIiE5countE
+// 
+inline int foo(int p, int q)
+{
+  static int r = q;
+  return p + r;
+}
+
+int bar(int x)
+{
+  return foo(x, x);
+}
+
+template <class T> T addx(T x, T y) {
+  static T p = y;
+  return x + p;
+}
+
+float bar(float x)
+{
+  return addx(x, x);
+}
+template <class T > struct pair {
+    T l, r;
+    static int count;
+};
+int q=123;
+template <class T> int pair<T>::count = q++;
+int w1 = pair<int>::count;
+int x1 = pair<int>::count;
+

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/s2_8a.xpp
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/s2_8b.x
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/s2_8b.x?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/s2_8b.x (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/s2_8b.x Mon Jul 28 16:20:34 2014
@@ -0,0 +1,95 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: cxx_compiler -c %s cxx_rtti -o %t1.o
+// RUN: c_compiler -c %s -o %t2.o
+// RUN: linker -o %t%exeext %t1.o %t2.o 
+// RUN: runtool %t%exeext | grep "PASSED"
+
+typedef long long gvtype;
+#define GVSET 1
+
+#ifdef __cplusplus
+extern "C" {
+   int printf(const char *, ...);
+   gvtype get_foo_gv();
+   void set_foo_gv(gvtype);
+   gvtype get_addx_gv();
+   void set_addx_gv(gvtype);
+}
+
+inline int foo(int x, int y)
+{
+  static int r = y;
+  return x +r;
+}
+
+int bar(int x)
+{
+  return foo(x, x);
+}
+
+template <class T> T addx(T x, T y) {
+  static T p = y;
+  return x + p;
+}
+
+int bart(int x)
+{
+  return addx(x, x);
+}
+
+int nerr=0, ntests=0, verbose=0;
+
+#define check(a, b) {\
+                 long long v=a; \
+                 ntests++; \
+                 if (v!=b) {\
+                   nerr++;\
+                   printf("ERROR @%d %lld != %lld\n", __LINE__, v, (long long)b); \
+                 } else if (verbose) { \
+                   printf("OK @%d %lld\n", __LINE__, v); \
+                 }\
+                }
+
+int main()
+{
+    verbose = 1;
+    // initial values are 0
+    check(get_foo_gv(), 0);
+    check(get_addx_gv(), 0);
+
+    // first call should just return double
+    check(bar(3), 6);
+    check(bart(3), 6);
+
+    // now guard vars are 1
+    check(get_foo_gv(), GVSET);
+    check(get_addx_gv(), GVSET);
+
+    // this call should just add 3
+    check(bar(4), 7);
+    check(bart(4), 7);
+ 
+    // now reset them
+    set_foo_gv(0);
+    set_addx_gv(0);
+
+    // should double agaain
+    check(bar(5), 10);
+    check(bart(5), 10);
+
+    // just add 5 again
+    check(bar(6), 11);
+    check(bart(6), 11);
+    printf("%s. %d tests\n%c", nerr ? "FAILED":"PASSED", ntests, 0x1a);
+
+}
+
+#else
+
+extern gvtype _ZGVZ3fooiiE1r, _ZGVZ4addxIiET_S0_S0_E1p;
+   gvtype get_foo_gv() { return _ZGVZ3fooiiE1r ; }
+   void set_foo_gv(gvtype v) { _ZGVZ3fooiiE1r = 0; }
+   gvtype get_addx_gv() { return _ZGVZ4addxIiET_S0_S0_E1p;}
+   void set_addx_gv(gvtype v) {_ZGVZ4addxIiET_S0_S0_E1p = v;}
+#endif

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/s2_8b.x
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/s2_9_5.x
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/s2_9_5.x?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/s2_9_5.x (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/s2_9_5.x Mon Jul 28 16:20:34 2014
@@ -0,0 +1,232 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: cxx_compiler -c cxx_rtti cxx_exceptions %s -o %t1.o
+// RUN: c_compiler -c %s -o %t2.o
+// RUN: linker -o %t%exeext %t2.o %t1.o
+// RUN: runtool %t%exeext | grep PASSED
+
+//test for section 2.9.4. Test that we generate typeinfo as per the spec
+
+#include "../common/select2.h"
+#ifdef __cplusplus
+#include <typeinfo>
+
+struct abcd { int x; };
+struct efgh : abcd { int y; };
+void bar(){}
+enum enty { e0, e1, e2, e3};
+enum enty enumv;
+abcd *p, q, qa[2];
+efgh efgh_var;
+int abcd::*pdm;
+
+struct str2 {
+  int foo();
+};
+int (str2::*pmf)();
+
+struct str3 : virtual str2 {
+    int f2;
+};
+
+str3 str3_v;
+void foo(int p)
+{
+  if (!p++) throw 3;
+  if (!p++) throw p;
+  if (!p++) throw bar;
+  if (!p++) throw q;
+  if (!p++) throw enumv;
+  if (!p++) throw efgh_var;
+  if (!p++) throw pdm;
+  if (!p++) throw pmf;
+  if (!p++) throw str3_v;
+};
+
+const std::type_info *getti(int x)
+{
+  if (!p++) return &typeid(bar);
+  if (!p++) return &typeid(qa);
+}
+#else
+
+typedef unsigned char  uchar;
+typedef unsigned short ushort;
+typedef unsigned int   uint;
+typedef unsigned long  ulong;
+typedef void *         voidp;
+
+typedef struct { // a field spec. specifies an initialized field
+  char type; // one of 'c', 's', 'i', 'l', or 'p' for integers and pointer
+  long long value; // expected value, if one of ints
+  uchar *ptr; // expected pointer value
+  int plus; // if pointer value has an offset as well
+} FSPEC;
+
+extern uchar _ZTSA2_4abcd;
+extern uchar _ZTVN10__cxxabiv117__array_type_infoE;
+extern uchar _ZTI4str2;
+extern uchar _ZTS4str3;
+extern uchar _ZTVN10__cxxabiv121__vmi_class_type_infoE;
+extern uchar _ZTS4str2;
+extern uchar _ZTVN10__cxxabiv117__class_type_infoE;
+extern uchar _ZTSFivE;
+extern uchar _ZTVN10__cxxabiv120__function_type_infoE;
+extern uchar _ZTI4str2;
+extern uchar _ZTIFivE;
+extern uchar _ZTSM4str2FivE;
+extern uchar _ZTVN10__cxxabiv129__pointer_to_member_type_infoE;
+extern uchar _ZTI4abcd;
+extern uchar _ZTIi;
+extern uchar _ZTSM4abcdi;
+extern uchar _ZTVN10__cxxabiv129__pointer_to_member_type_infoE;
+extern uchar _ZTI4abcd;
+extern uchar _ZTS4efgh;
+extern uchar _ZTVN10__cxxabiv120__si_class_type_infoE;
+extern uchar _ZTS4enty;
+extern uchar _ZTVN10__cxxabiv116__enum_type_infoE;
+extern uchar _ZTS4abcd;
+extern uchar _ZTVN10__cxxabiv117__class_type_infoE;
+extern uchar _ZTSFvvE;
+extern uchar _ZTVN10__cxxabiv120__function_type_infoE;
+extern uchar _ZTIFvvE;
+extern uchar _ZTSPFvvE;
+extern uchar _ZTVN10__cxxabiv119__pointer_type_infoE;
+extern uchar _ZTV4str3;
+
+static int nerr;
+extern int printf(const char *, ...);
+
+FSPEC FS_ZTIPFvvE[] = {
+	{'p', 0, &_ZTVN10__cxxabiv119__pointer_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTSPFvvE},
+        {'i', 0},
+	{'p', 0, &_ZTIFvvE},
+};
+
+FSPEC FS_ZTIFvvE[] = {
+	{'p', 0, &_ZTVN10__cxxabiv120__function_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTSFvvE},
+};
+
+FSPEC FS_ZTI4abcd[] = {
+	{'p', 0, &_ZTVN10__cxxabiv117__class_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTS4abcd},
+};
+
+FSPEC FS_ZTI4enty[] = {
+	{'p', 0, &_ZTVN10__cxxabiv116__enum_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTS4enty},
+};
+
+FSPEC FS_ZTI4efgh[] = {
+	{'p', 0, &_ZTVN10__cxxabiv120__si_class_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTS4efgh},
+	{'p', 0, &_ZTI4abcd},
+};
+
+FSPEC FS_ZTIM4abcdi[] = {
+	{'p', 0, &_ZTVN10__cxxabiv129__pointer_to_member_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTSM4abcdi},
+        {'i', 0},
+	{'p', 0, &_ZTIi},
+	{'p', 0, &_ZTI4abcd},
+};
+
+FSPEC FS_ZTIM4str2FivE[] = {
+	{'p', 0, &_ZTVN10__cxxabiv129__pointer_to_member_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTSM4str2FivE},
+        {'i', 0},
+	{'p', 0, &_ZTIFivE},
+	{'p', 0, &_ZTI4str2},
+};
+
+FSPEC FS_ZTIFivE[] = {
+	{'p', 0, &_ZTVN10__cxxabiv120__function_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTSFivE},
+};
+
+FSPEC FS_ZTI4str2[] = {
+	{'p', 0, &_ZTVN10__cxxabiv117__class_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTS4str2},
+};
+
+FSPEC FS_ZTI4str3[] = {
+	{'p', 0, &_ZTVN10__cxxabiv121__vmi_class_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTS4str3},
+        {'i', 0},
+        {'i', 1},
+	{'p', 0, &_ZTI4str2},
+        {'i', LPSELECT( -6141,-3069)},
+};
+
+FSPEC FS_ZTIA2_4abcd[] = {
+	{'p', 0, &_ZTVN10__cxxabiv117__array_type_infoE, LPSELECT(16,8)},
+	{'p', 0, &_ZTSA2_4abcd},
+};
+
+static int align_tbl[128];
+static void err_f(uchar *addr, int ofst, char *name, int idx, FSPEC *f)
+{
+  printf("ERROR at idx %d of %s ", idx, name);
+  switch (f->type) {
+    case 'c': printf("%x != %x\n", *(uchar*)(addr+ofst), (uchar)f->value); break;
+    case 's': printf("%x != %x\n", *(ushort*)(addr+ofst), (ushort)f->value); break;
+    case 'i': printf("%x != %x\n", *(uint*)(addr+ofst), (uint)f->value); break;
+    case 'l': printf("%lx != %lx\n", *(ulong*)(addr+ofst), (ulong)f->value); break;
+    case 'p': printf("%p != %p\n", *(voidp*)(addr+ofst), (voidp)(f->ptr + f->plus)); break;
+  }
+  nerr ++;
+}
+// check that values at addr are as specified by fspec
+static void 
+test_fs(FSPEC *spec, int spec_size, uchar *addr, char *name)
+{
+  int ofst = 0, i;
+  for (i=0; i<spec_size; i++) {
+    FSPEC *f = spec + i;
+    int al = align_tbl[f->type];
+    if (!al) {
+      printf("ERROR: Bad spec %s %d '%c' \n", name, i, f->type);
+      nerr++;
+      continue;
+    }
+    while (ofst % al) ofst++; // align the offset
+    switch (f->type) {
+#define check(type, addr, ofst, name, idx, f) \
+        if ((*(type*)(addr+ofst)) != ((type)(f->value))) err_f(addr, ofst, name, i, f);
+      case 'c': check(uchar,  addr, ofst, name, i, f); break;
+      case 's': check(ushort, addr, ofst, name, i, f); break;
+      case 'i': check(uint,   addr, ofst, name, i, f); break;
+      case 'l': check(ulong,  addr, ofst, name, i, f); break;
+      case 'p': if ((*(voidp*)(addr+ofst)) != (voidp)(f->ptr+f->plus))
+                                                err_f(addr, ofst, name, i, f);
+
+    }
+    ofst += al; // al and size are always same
+  }
+}
+
+#define TESTIT(n) extern uchar n; test_fs(FS##n, sizeof(FS##n)/sizeof(FSPEC), &n, #n)
+
+int main() {
+  align_tbl['c'] = 1;
+  align_tbl['s'] = 2;
+  align_tbl['i'] = 4;
+  align_tbl['l'] = LPSELECT(8,4);
+  align_tbl['p'] = LPSELECT(8,4);
+  TESTIT(_ZTIPFvvE);
+  TESTIT(_ZTIFvvE);
+  TESTIT(_ZTI4abcd);
+  TESTIT(_ZTI4enty);
+  TESTIT(_ZTI4efgh);
+  TESTIT(_ZTIM4abcdi);
+  TESTIT(_ZTIM4str2FivE);
+  TESTIT(_ZTIFivE);
+  TESTIT(_ZTI4str2);
+  TESTIT(_ZTI4str3);
+  TESTIT(_ZTIA2_4abcd);
+  printf("%s\n", nerr ? "FAILED": "PASSED");
+  return nerr ? 1 : 0;
+}
+#endif

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/s2_9_5.x
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/s3_1.xpp
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/s3_1.xpp?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/s3_1.xpp (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/s3_1.xpp Mon Jul 28 16:20:34 2014
@@ -0,0 +1,74 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: cxx_compiler  -S %s -o %t.s
+// RUN: cat %t.s | FileCheck prefixes %s
+
+// CHECK-DAG: _ZN4pqrsD1Ev
+// CHECK-DAG: _ZN4abcdC1ERKS_
+// CHECK-NOT: _ZN4efghC1ERKS_
+
+// CHECK-DAG: _ZN5pqrsRD1Ev
+// CHECK-NOT: _ZN5abcdRC1ERKS_
+// CHECK-NOT: _ZN5efghRC1ERKS_
+
+// CHECK-DAG: _ZN5abcdSC1ERKS_
+// CHECK-NOT: _ZN5efghSC1ERKS_
+// CHECK-NOT: _ZN5pqrsSC1ERKS_
+
+struct pqrs { int a; int b; ~pqrs();};  // has non trivial dtor
+struct abcd { int a; int b; abcd(const abcd&); };  // has non trivial copy ctor
+struct efgh { int a; int b; }; 
+void foo(abcd x);
+void foo(efgh x);
+void foo(pqrs x);
+extern abcd v_abcd;
+extern efgh v_efgh;
+extern pqrs v_pqrs;
+
+void bar()
+{
+  // class with no copy ctor or non trivial dtor: 3.1.1: no copy ctor call
+  foo(v_abcd);
+
+  // class with non-trivial copy-ctor. call it
+  foo(v_efgh);
+
+  // class with non-trivial dtor
+  foo(v_pqrs);
+}
+
+struct pqrsR { int a; int b; ~pqrsR();};  // has non trivial dtor
+struct abcdR { int a; int b; abcdR(const abcdR&); };  // has non trivial copy ctor
+struct efghR { int a; int b; }; 
+abcdR foo_abcd();
+efghR foo_efgh();
+pqrsR foo_pqrs();
+extern abcdR r_abcd;
+extern efghR r_efgh;
+extern pqrsR r_pqrs;
+
+// check the caller action at return
+void barx()
+{
+  // class with no copy ctor or non trivial dtor: 3.1.1: no copy ctor call
+  r_abcd = foo_abcd();
+
+  // class with non-trivial copy-ctor. call it
+  r_efgh = foo_efgh();
+
+  // class with non-trivial dtor
+  r_pqrs = foo_pqrs();
+}
+
+
+// check the callee action for return
+struct pqrsS { int a; int b; ~pqrsS();};  // has non trivial dtor
+struct abcdS { int a; int b; abcdS(const abcdS&); };  // has non trivial copy ctor
+struct efghS { int a; int b; }; 
+extern abcdS s_abcd;
+extern efghS s_efgh;
+extern pqrsS s_pqrs;
+abcdS bar_abcd(){ return s_abcd;}
+efghS bar_efgh(){ return s_efgh;}
+pqrsS bar_pqrs(){ return s_pqrs;}
+

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/s3_1.xpp
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/sg_2.xpp
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/sg_2.xpp?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/sg_2.xpp (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/sg_2.xpp Mon Jul 28 16:20:34 2014
@@ -0,0 +1,91 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: cxx_compiler -c %s cxx_rtti -o %t1.o
+// RUN: linker -o %t%exeext %t1.o
+// RUN: runtool %t%exeext | grep "PASSED"
+
+
+
+
+// check that __cxa_guard_acuire, __cxa_gaurd_release and __cxa_guard_abort are doing 
+// their jobs
+//
+//
+
+extern "C" {
+  int printf(const char *, ...);
+  int __cxa_guard_acquire(long long *);
+  void __cxa_guard_release(long long *);
+  void __cxa_guard_abort(long long *);
+}
+
+#if 0
+
+extern "C" int __cxa_guard_acquire ( __int64_t *guard_object );
+
+    Returns 1 if the initialization is not yet complete; 0 otherwise. This function is called before initialization takes place. If this function returns 1, either __cxa_guard_release or __cxa_guard_abort must be called with the same argument. The first byte of the guard_object is not modified by this function.
+
+    A thread-safe implementation will probably guard access to the first byte of the guard_object with a mutex. If this function returns 1, the mutex will have been acquired by the calling thread.
+
+extern "C" void __cxa_guard_release ( __int64_t *guard_object );
+
+    Sets the first byte of the guard object to a non-zero value. This function is called after initialization is complete.
+
+    A thread-safe implementation will release the mutex acquired by __cxa_guard_acquire after setting the first byte of the guard object.
+
+extern "C" void __cxa_guard_abort ( __int64_t *guard_object );
+
+    This function is called if the initialization terminates by throwing an exception.
+
+    A thread-safe implementation will release the mutex acquired by __cxa_guard_acquire.
+
+<b>NOTE</b>:
+
+#endif
+
+static int nerr;
+#define ERR(a) {printf("@%d %s\n", __LINE__, a); nerr++;}
+
+int main()
+{
+   long long gv = 0, gv2 = 0;
+   unsigned char *gp = (unsigned char *) &gv;
+   // simple case aquire should succeed and return 1. 
+
+   if (!__cxa_guard_acquire(&gv)) ERR("FAILED TO ACQUIRE");
+
+   if (gp[0]) ERR("Lowest byte of the Guard var set prematurely");
+   // other buytes could be set at this point
+
+   // now release
+   __cxa_guard_release(&gv);
+   if (!gv) ERR("Guard var not set"); 
+   if (!gp[0]) ERR("first byte 0");
+   if (gp[1]||gp[2]||gp[3]||gp[4]||gp[5]||gp[6]||gp[7]) ERR("Other bytes set");
+
+   long long gs = gv;
+
+   // A second call should fail
+   if (__cxa_guard_acquire(&gv)) ERR("Acquired again")
+   
+   // should not change gv
+   if (gs != gv) ERR("gv changed by a failing call");
+
+   // now test abort
+   gp = (unsigned char *)&gv2;
+   if (!__cxa_guard_acquire(&gv2)) ERR("FAILED TO ACQUIRE gv2");
+   if (gp[0]) ERR("Lowest byte of the Guard var set prematurely");
+
+   __cxa_guard_abort(&gv2);
+   if (gv2) ERR("Guard var set by abort ");
+   if (!__cxa_guard_acquire(&gv2)) ERR("FAILED TO ACQUIRE gv2");
+   if (gp[0]) ERR("Lowest byte of the Guard var set prematurely");
+
+   // now release
+   __cxa_guard_release(&gv2);
+   if (!gv2) ERR("Guard var not set"); 
+   if (!gp[0]) ERR("first byte 0");
+   if (gp[1]||gp[2]||gp[3]||gp[4]||gp[5]||gp[6]||gp[7]) ERR("Other bytes set");
+   printf("%s\n", nerr ? "FAILED" : "PASSED");
+   return nerr;
+}

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/sg_2.xpp
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/vc1.xpp
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/vc1.xpp?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/vc1.xpp (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/vc1.xpp Mon Jul 28 16:20:34 2014
@@ -0,0 +1,72 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: cxx_compiler -c %s cxx_rtti -o %t1.o
+// RUN: linker -o %t%exeext %t1.o
+// RUN: runtool %t%exeext | grep "PASSED"
+
+#include "../common/select2.h"
+
+// test case from ABI testsuite
+/*
+Test case for sharing virtual bases.
+In Derived_too,
+the primary base class is NewShareme,
+The bases Base and Shareme share vptr's
+with Derived and are allocated at the
+same offset as Derived.
+Should get:
+60% a.out
+(long)(NewShareme *)dd - (long)dd = 0
+(long)(Derived *)dd - (long)dd = 8
+(long)(Base *)dd - (long)dd = 8
+(long)(Shareme *)dd - (long)dd = 8
+*/
+
+struct Shareme {
+    virtual void foo();
+};
+struct Base : virtual Shareme {
+        virtual void bar();
+};
+struct Derived : virtual Base {
+        virtual void baz();
+};
+
+struct NewShareme {
+        virtual void foo();
+};
+
+struct Derived_too : virtual NewShareme, virtual Derived {
+        virtual void bar();
+};
+
+void Shareme::foo() { }
+void Base::bar() { }
+void Derived::baz() { }
+void NewShareme::foo() { }
+void Derived_too::bar() { }
+
+
+extern "C" int printf(const char *,...);
+//#define EVAL(EXPR) printf( #EXPR " = %d\n", (int) (EXPR) );
+static int nerr;
+static void evalf(int expected, const char *str, int val)
+{
+  expected /= LPSELECT(1,2); //representing the size difference of pointers
+  if (expected != val) {
+    printf("ERROR: expected %d. ", expected);
+    nerr++;
+  }
+  printf(str, val);
+}
+#define EVAL(v,EXPR) evalf(v,  #EXPR " = %d\n", (int) (EXPR) );
+int main()
+{
+  Derived_too *dd = new Derived_too;
+  EVAL(0, (long)(NewShareme *)dd - (long)dd);
+  EVAL(8, (long)(Derived *)dd - (long)dd);
+  EVAL(8, (long)(Base *)dd - (long)dd);
+  EVAL(8, (long)(Shareme *)dd - (long)dd);
+  printf("%s\n", nerr ? "FAILED" : "PASSED");
+}
+

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/vc1.xpp
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/misc/vc2.xpp
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/misc/vc2.xpp?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/misc/vc2.xpp (added)
+++ test-suite/trunk/ABI-Testsuite/test/misc/vc2.xpp Mon Jul 28 16:20:34 2014
@@ -0,0 +1,72 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: cxx_compiler -c %s cxx_rtti -o %t1.o
+// RUN: linker -o %t%exeext %t1.o
+// RUN: runtool %t%exeext | grep "PASSED"
+
+// test case from ABI testsuite
+#include "../common/select2.h"
+/*
+Test case for sharing virtual bases.
+In Most_Derived,
+the primary base class is Nonvirt1,
+Nonvirt2 and Nonvirt3 share vptrs with
+virtual base Shared_Virt.  Shared_Virt
+should be at the same offset as Nonvirt2.
+Should get:
+67% a.out
+(long)(Nonvirt1 *)dd - (long)dd = 0
+(long)(Nonvirt2 *)dd - (long)dd = 8
+(long)(Nonvirt3 *)dd - (long)dd = 16
+(long)(Shared_Virt *)dd - (long)dd = 8
+*/
+
+struct Shared_Virt {
+    virtual void foo();
+};
+struct Nonvirt2 : virtual Shared_Virt {
+        virtual void bar();
+};
+struct Nonvirt3 : virtual Shared_Virt {
+        virtual void baz();
+};
+struct Nonvirt1 {
+        virtual void foo();
+};
+
+struct Most_Derived : Nonvirt1, Nonvirt2, Nonvirt3 {
+        virtual void bar();
+};
+
+void Shared_Virt::foo() { }
+void Nonvirt2::bar() { }
+void Nonvirt3::baz() { }
+void Nonvirt1::foo() { }
+void Most_Derived::bar() { }
+
+extern "C" int printf(const char *,...);
+//#define EVAL(EXPR) printf( #EXPR " = %d\n", (EXPR) );
+
+static int nerr;
+static void evalf(int expected, const char *str, int val)
+{
+  expected /= LPSELECT(1,2); //representing the size difference of pointers
+  if (expected != val) {
+    printf("ERROR: expected %d. ", expected);
+    nerr++;
+  }
+  printf(str, val);
+}
+#define EVAL(v,EXPR) evalf(v,  #EXPR " = %d\n", (int) (EXPR) );
+
+int main()
+{
+  Most_Derived *dd = new Most_Derived;
+  EVAL(0, (long)(Nonvirt1 *)dd - (long)dd);
+  EVAL(8, (long)(Nonvirt2 *)dd - (long)dd);
+  EVAL(16, (long)(Nonvirt3 *)dd - (long)dd);
+  EVAL(8, (long)(Shared_Virt *)dd - (long)dd);
+  printf("%s\n", nerr ? "FAILED" : "PASSED");
+  
+}
+

Propchange: test-suite/trunk/ABI-Testsuite/test/misc/vc2.xpp
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/ABI-Testsuite/test/s2_3/ptrmem.x
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/ABI-Testsuite/test/s2_3/ptrmem.x?rev=214126&view=auto
==============================================================================
--- test-suite/trunk/ABI-Testsuite/test/s2_3/ptrmem.x (added)
+++ test-suite/trunk/ABI-Testsuite/test/s2_3/ptrmem.x Mon Jul 28 16:20:34 2014
@@ -0,0 +1,650 @@
+// This file is distributed under the University of Illinois Open Source License.
+// See LICENSE.TXT for details.
+// RUN: cxx_compiler -c %s -I "common" cxx_rtti -o %t1.o
+// RUN: c_compiler -c %s -o %t2.o -I "common" 
+// RUN: c_compiler -c -o %t3.o -I "common" "common/testsuite.c"
+// RUN: linker -o %t%exeext %t1.o %t2.o %t3.o
+// RUN: runtool %t%exeext | grep "TEST PASSED"
+#include "testsuite.h"
+#ifdef __cplusplus
+extern "C" int printf(const char *, ...);
+
+
+#define PTRSIZE sizeof(int*)
+#define PMFSIZE (2*PTRSIZE)
+
+
+struct abcd {
+
+  int f1();
+  int f3();
+  int f5();
+  int f7();
+  virtual int g1();
+  virtual int g3();
+  virtual int g5();
+  virtual int g7();
+  int a;
+};
+int abcd::f1(){return __LINE__;}
+int abcd::f3(){return __LINE__;}
+int abcd::f5(){return __LINE__;}
+int abcd::f7(){return __LINE__;}
+int abcd::g1(){return __LINE__;}
+int abcd::g3(){return __LINE__;}
+int abcd::g5(){return __LINE__;}
+int abcd::g7(){return __LINE__;}
+
+
+struct efgh {
+  int f2();
+  int f3();
+  int f6();
+  int f7();
+  virtual int g2();
+  virtual int g3();
+  virtual int g6();
+  virtual int g7();
+  int *e, f;
+};
+int efgh::f2() { return __LINE__;}
+int efgh::f3() { return __LINE__;}
+int efgh::f6() { return __LINE__;}
+int efgh::f7() { return __LINE__;}
+int efgh::g2() { return __LINE__;}
+int efgh::g3() { return __LINE__;}
+int efgh::g6() { return __LINE__;}
+int efgh::g7() { return __LINE__;}
+
+struct pqrs : abcd, efgh {
+  int *x, p;
+  int f4();
+  int f5();
+  int f6();
+  int f7();
+  virtual int g4();
+  virtual int g5();
+  virtual int g6();
+  virtual int g7();
+};
+int pqrs::f4() { return __LINE__; }
+int pqrs::f5() { return __LINE__; }
+int pqrs::f6() { return __LINE__; }
+int pqrs::f7() { return __LINE__; }
+int pqrs::g4() { return __LINE__; }
+int pqrs::g5() { return __LINE__; }
+int pqrs::g6() { return __LINE__; }
+int pqrs::g7() { return __LINE__; }
+
+struct lmno : virtual abcd, virtual efgh {
+  int f4();
+  int f5();
+  int f6();
+  int f7();
+  virtual int g4();
+  virtual int g5();
+  virtual int g6();
+  virtual int g7();
+  double d;
+  int p;
+  char x;
+  int r;
+};
+int lmno::f4() { return __LINE__; }
+int lmno::f5() { return __LINE__; }
+int lmno::f6() { return __LINE__; }
+int lmno::f7() { return __LINE__; }
+int lmno::g4() { return __LINE__; }
+int lmno::g5() { return __LINE__; }
+int lmno::g6() { return __LINE__; }
+int lmno::g7() { return __LINE__; }
+
+struct novtbl {
+  int a;
+  char b;
+  int *p;
+  int q;
+};
+
+int abcd::*abcd_null = 0;
+int abcd::*abcd_a = &abcd::a;
+int *efgh::*efgh_e = &efgh::e;
+int efgh::*efgh_f = &efgh::f;
+int *pqrs::*pqrs_x = &pqrs::x;
+int pqrs::*pqrs_p = &pqrs::p;
+
+double lmno::*lmno_d = &lmno::d;
+int    lmno::*lmno_p = &lmno::p;
+char   lmno::*lmno_x = &lmno::x;
+int    lmno::*lmno_r = &lmno::r;
+
+int  novtbl::*novtbl_a = &novtbl::a;
+char novtbl::*novtbl_b = &novtbl::b;
+int  novtbl::*novtbl_q = &novtbl::q;
+int  *novtbl::*novtbl_p = &novtbl::p;
+int  *novtbl::*novtbl_null = 0;
+
+static void reset_pdm()
+{
+  abcd_null = 0;
+  abcd_a = &abcd::a;
+  efgh_e = &efgh::e;
+  efgh_f = &efgh::f;
+  pqrs_x = &pqrs::x;
+  pqrs_p = &pqrs::p;
+  lmno_d = &lmno::d;
+  lmno_p = &lmno::p;
+  lmno_x = &lmno::x;
+  lmno_r = &lmno::r;
+  novtbl_a = &novtbl::a;
+  novtbl_b = &novtbl::b;
+  novtbl_q = &novtbl::q;
+  novtbl_p = &novtbl::p;
+  novtbl_null = 0;
+}
+
+static void 
+check_sz(size_t a, size_t b, const char *varname, const char *filename, int linenum)
+{
+  if (a != b) {
+    printf("sizeof(%s) is %d. Should be %d. @%s:%d\n", varname, (int)a, (int)b, filename, linenum);
+    n_errors++;
+  } else if (verbose) {
+    printf("sizeof(%s) is %d. @%s:%d\n", varname, (int)a, filename, linenum);
+  }
+}
+
+static void 
+check_pdm_val(ptrdiff_t a, ptrdiff_t b, const char *varname, const char *filename, int linenum)
+{
+  if (a != b) {
+    printf("%s is %d. Should be %d. @%s:%d\n", varname, (int)a, (int)b, filename, linenum);
+    n_errors++;
+  } else if (verbose) {
+    printf("%s is %d. @%s:%d\n", varname, (int)a,  filename, linenum);
+  }
+  n_tests++;
+}
+
+
+#define TEST_PDM(var,val) \
+    check_sz(sizeof(var),PTRSIZE, #var, __FILE__, __LINE__);\
+    check_pdm_val(*(ptrdiff_t*)&var, val, #var, __FILE__, __LINE__);
+
+struct pmfty { // a struct representing ptr-to-member function1
+  union {
+    int (*ptr)();
+    ptrdiff_t ofst;
+  } ;
+  ptrdiff_t adj;
+};
+
+extern "C" ptrdiff_t find_func_addr(const char *);
+extern "C" char* find_func_name(ptrdiff_t);
+static const char *lfn;
+static void 
+check_pmf_val(pmfty *a, ptrdiff_t v1, ptrdiff_t v2, const char *varname, const char *filename, int linenum)
+{
+  if (a->ofst != v1 || a->adj != v2) {
+    printf("%s is (%s/%d/0x%x,%d). Should be (%s/%d/0x%x,%d). @%s:%d\n", varname, 
+                  lfn[0]?find_func_name(a->ofst):lfn,
+                  (int)(a->ofst),(int)(a->ofst), (int)(a->adj),
+                  lfn,(int)v1, (int)v1, (int)v2, 
+                  filename, linenum);
+    n_errors++;
+  } else if (verbose) {
+    printf("%s is (%d,%d). @%s:%d\n", varname, (int)v1, (int)v2, filename, linenum);
+  }
+  n_tests++;
+}
+
+
+void test_pdm_x()
+{
+  TEST_PDM(abcd_a, LPSELECT(8,4));
+  TEST_PDM(abcd_null , -1);
+  TEST_PDM(efgh_e , LPSELECT(8,4));
+  TEST_PDM(efgh_f , LPSELECT(16,8));
+  TEST_PDM(pqrs_x , LPSELECT(40,20));
+  TEST_PDM(pqrs_p , LPSELECT(48,24));
+
+  TEST_PDM(lmno_d , LPSELECT(8,4));
+  TEST_PDM(lmno_p , LPSELECT(16,12));
+  TEST_PDM(lmno_x , LPSELECT(20,16));
+  TEST_PDM(lmno_r , LPSELECT(24,20));
+
+  TEST_PDM(novtbl_a , 0);
+  TEST_PDM(novtbl_b , 4);
+  TEST_PDM(novtbl_q , LPSELECT(16,12));
+  TEST_PDM(novtbl_p , 8);
+  TEST_PDM(novtbl_null , -1);
+}
+
+#if 0
+#define N0 abcd
+#define N1 efgh
+#define N2 pqrs
+#define N3 lmno
+#define M0 f1
+#define M1 f2
+#define M2 f3
+#define M3 f4
+#define M4 g1
+#define M5 g2
+#define M6 g3
+#define M7 g4
+<for i in 0..3>
+<for j in 0..3>
+<for k in 0..7>
+int (N<id i>::*N<id i> _ N<id j> _ M<id k>)() = &N<id i>::M<id k>;
+</for>
+</for>
+</for>
+#endif
+
+
+int (abcd::*abcd_abcd_f1)() = &abcd::f1;
+int (abcd::*abcd_abcd_f3)() = &abcd::f3;
+int (abcd::*abcd_abcd_g1)() = &abcd::g1;
+int (abcd::*abcd_abcd_g3)() = &abcd::g3;
+int (abcd::*abcd_efgh_f1)() = &abcd::f1;
+int (abcd::*abcd_efgh_f3)() = &abcd::f3;
+int (abcd::*abcd_efgh_g1)() = &abcd::g1;
+int (abcd::*abcd_efgh_g3)() = &abcd::g3;
+int (abcd::*abcd_pqrs_f1)() = &abcd::f1;
+int (abcd::*abcd_pqrs_f3)() = &abcd::f3;
+int (abcd::*abcd_pqrs_g1)() = &abcd::g1;
+int (abcd::*abcd_pqrs_g3)() = &abcd::g3;
+int (abcd::*abcd_lmno_f1)() = &abcd::f1;
+int (abcd::*abcd_lmno_f3)() = &abcd::f3;
+int (abcd::*abcd_lmno_g1)() = &abcd::g1;
+int (abcd::*abcd_lmno_g3)() = &abcd::g3;
+int (efgh::*efgh_abcd_f2)() = &efgh::f2;
+int (efgh::*efgh_abcd_f3)() = &efgh::f3;
+int (efgh::*efgh_abcd_g2)() = &efgh::g2;
+int (efgh::*efgh_abcd_g3)() = &efgh::g3;
+int (efgh::*efgh_efgh_f2)() = &efgh::f2;
+int (efgh::*efgh_efgh_f3)() = &efgh::f3;
+int (efgh::*efgh_efgh_g2)() = &efgh::g2;
+int (efgh::*efgh_efgh_g3)() = &efgh::g3;
+int (efgh::*efgh_pqrs_f2)() = &efgh::f2;
+int (efgh::*efgh_pqrs_f3)() = &efgh::f3;
+int (efgh::*efgh_pqrs_g2)() = &efgh::g2;
+int (efgh::*efgh_pqrs_g3)() = &efgh::g3;
+int (efgh::*efgh_lmno_f2)() = &efgh::f2;
+int (efgh::*efgh_lmno_f3)() = &efgh::f3;
+int (efgh::*efgh_lmno_g2)() = &efgh::g2;
+int (efgh::*efgh_lmno_g3)() = &efgh::g3;
+int (pqrs::*pqrs_abcd_f1)() = &pqrs::f1;
+int (pqrs::*pqrs_abcd_f2)() = &pqrs::f2;
+int (pqrs::*pqrs_abcd_f4)() = &pqrs::f4;
+int (pqrs::*pqrs_abcd_g1)() = &pqrs::g1;
+int (pqrs::*pqrs_abcd_g2)() = &pqrs::g2;
+int (pqrs::*pqrs_abcd_g4)() = &pqrs::g4;
+int (pqrs::*pqrs_efgh_f1)() = &pqrs::f1;
+int (pqrs::*pqrs_efgh_f2)() = &pqrs::f2;
+int (pqrs::*pqrs_efgh_f4)() = &pqrs::f4;
+int (pqrs::*pqrs_efgh_g1)() = &pqrs::g1;
+int (pqrs::*pqrs_efgh_g2)() = &pqrs::g2;
+int (pqrs::*pqrs_efgh_g4)() = &pqrs::g4;
+int (pqrs::*pqrs_pqrs_f1)() = &pqrs::f1;
+int (pqrs::*pqrs_pqrs_f2)() = &pqrs::f2;
+int (pqrs::*pqrs_pqrs_f4)() = &pqrs::f4;
+int (pqrs::*pqrs_pqrs_g1)() = &pqrs::g1;
+int (pqrs::*pqrs_pqrs_g2)() = &pqrs::g2;
+int (pqrs::*pqrs_pqrs_g4)() = &pqrs::g4;
+int (pqrs::*pqrs_lmno_f1)() = &pqrs::f1;
+int (pqrs::*pqrs_lmno_f2)() = &pqrs::f2;
+int (pqrs::*pqrs_lmno_f4)() = &pqrs::f4;
+int (pqrs::*pqrs_lmno_g1)() = &pqrs::g1;
+int (pqrs::*pqrs_lmno_g2)() = &pqrs::g2;
+int (pqrs::*pqrs_lmno_g4)() = &pqrs::g4;
+int (lmno::*lmno_abcd_f4)() = &lmno::f4;
+int (lmno::*lmno_abcd_g4)() = &lmno::g4;
+int (lmno::*lmno_efgh_f4)() = &lmno::f4;
+int (lmno::*lmno_efgh_g4)() = &lmno::g4;
+int (lmno::*lmno_pqrs_f4)() = &lmno::f4;
+int (lmno::*lmno_pqrs_g4)() = &lmno::g4;
+int (lmno::*lmno_lmno_f4)() = &lmno::f4;
+int (lmno::*lmno_lmno_g4)() = &lmno::g4;
+int (lmno::*lmno_lmno_null)() = 0;
+
+static void reset_pmf()
+{
+  abcd_abcd_f1 = &abcd::f1;
+  abcd_abcd_f3 = &abcd::f3;
+  abcd_abcd_g1 = &abcd::g1;
+  abcd_abcd_g3 = &abcd::g3;
+  abcd_efgh_f1 = &abcd::f1;
+  abcd_efgh_f3 = &abcd::f3;
+  abcd_efgh_g1 = &abcd::g1;
+  abcd_efgh_g3 = &abcd::g3;
+  abcd_pqrs_f1 = &abcd::f1;
+  abcd_pqrs_f3 = &abcd::f3;
+  abcd_pqrs_g1 = &abcd::g1;
+  abcd_pqrs_g3 = &abcd::g3;
+  abcd_lmno_f1 = &abcd::f1;
+  abcd_lmno_f3 = &abcd::f3;
+  abcd_lmno_g1 = &abcd::g1;
+  abcd_lmno_g3 = &abcd::g3;
+  efgh_abcd_f2 = &efgh::f2;
+  efgh_abcd_f3 = &efgh::f3;
+  efgh_abcd_g2 = &efgh::g2;
+  efgh_abcd_g3 = &efgh::g3;
+  efgh_efgh_f2 = &efgh::f2;
+  efgh_efgh_f3 = &efgh::f3;
+  efgh_efgh_g2 = &efgh::g2;
+  efgh_efgh_g3 = &efgh::g3;
+  efgh_pqrs_f2 = &efgh::f2;
+  efgh_pqrs_f3 = &efgh::f3;
+  efgh_pqrs_g2 = &efgh::g2;
+  efgh_pqrs_g3 = &efgh::g3;
+  efgh_lmno_f2 = &efgh::f2;
+  efgh_lmno_f3 = &efgh::f3;
+  efgh_lmno_g2 = &efgh::g2;
+  efgh_lmno_g3 = &efgh::g3;
+  pqrs_abcd_f1 = &pqrs::f1;
+  pqrs_abcd_f2 = &pqrs::f2;
+  pqrs_abcd_f4 = &pqrs::f4;
+  pqrs_abcd_g1 = &pqrs::g1;
+  pqrs_abcd_g2 = &pqrs::g2;
+  pqrs_abcd_g4 = &pqrs::g4;
+  pqrs_efgh_f1 = &pqrs::f1;
+  pqrs_efgh_f2 = &pqrs::f2;
+  pqrs_efgh_f4 = &pqrs::f4;
+  pqrs_efgh_g1 = &pqrs::g1;
+  pqrs_efgh_g2 = &pqrs::g2;
+  pqrs_efgh_g4 = &pqrs::g4;
+  pqrs_pqrs_f1 = &pqrs::f1;
+  pqrs_pqrs_f2 = &pqrs::f2;
+  pqrs_pqrs_f4 = &pqrs::f4;
+  pqrs_pqrs_g1 = &pqrs::g1;
+  pqrs_pqrs_g2 = &pqrs::g2;
+  pqrs_pqrs_g4 = &pqrs::g4;
+  pqrs_lmno_f1 = &pqrs::f1;
+  pqrs_lmno_f2 = &pqrs::f2;
+  pqrs_lmno_f4 = &pqrs::f4;
+  pqrs_lmno_g1 = &pqrs::g1;
+  pqrs_lmno_g2 = &pqrs::g2;
+  pqrs_lmno_g4 = &pqrs::g4;
+  lmno_abcd_f4 = &lmno::f4;
+  lmno_abcd_g4 = &lmno::g4;
+  lmno_efgh_f4 = &lmno::f4;
+  lmno_efgh_g4 = &lmno::g4;
+  lmno_pqrs_f4 = &lmno::f4;
+  lmno_pqrs_g4 = &lmno::g4;
+  lmno_lmno_f4 = &lmno::f4;
+  lmno_lmno_g4 = &lmno::g4;
+  lmno_lmno_null = 0;
+}
+#define TEST_PMF(var,v1, v2) \
+    lfn="";check_sz(sizeof(var),PMFSIZE, #var, __FILE__, __LINE__);\
+    check_pmf_val((pmfty*)&var, v1, v2, #var, __FILE__, __LINE__);
+
+// PMF (ptr to member function) layout: Plain G++ abi 
+//   ptr: func_ptr for non-virtual, or 1+vtbl_ofst for virtual. bit 1 indicates virtual
+//   adj: adjustment to base class, when the declared class of function is at an offset
+//        from the declared class of the PMF.
+
+#define TEST_VPMF(a,b,c) TEST_PMF(a,b,c)
+#define TEST_NVPMF(a,b,c) TEST_PMF(a,b,c)
+
+void test_pmf_x()
+{ 
+  TEST_NVPMF(abcd_abcd_f1, find_func_addr(lfn="_ZN4abcd2f1Ev"), 0);
+  TEST_NVPMF(abcd_abcd_f3, find_func_addr(lfn="_ZN4abcd2f3Ev"), 0);
+  TEST_VPMF (abcd_abcd_g1, 1, 0);
+  TEST_VPMF (abcd_abcd_g3, LPSELECT(9,5), 0);
+  TEST_NVPMF(abcd_efgh_f1, find_func_addr(lfn="_ZN4abcd2f1Ev"), 0);
+  TEST_NVPMF(abcd_efgh_f3, find_func_addr(lfn="_ZN4abcd2f3Ev"), 0);
+  TEST_VPMF (abcd_efgh_g1, 1, 0);
+  TEST_VPMF (abcd_efgh_g3, LPSELECT(9,5), 0);
+  TEST_NVPMF(abcd_pqrs_f1, find_func_addr(lfn="_ZN4abcd2f1Ev"), 0);
+  TEST_NVPMF(abcd_pqrs_f3, find_func_addr(lfn="_ZN4abcd2f3Ev"), 0);
+  TEST_VPMF (abcd_pqrs_g1, 1, 0);
+  TEST_VPMF (abcd_pqrs_g3, LPSELECT(9,5), 0);
+  TEST_NVPMF(abcd_lmno_f1, find_func_addr(lfn="_ZN4abcd2f1Ev"), 0);
+  TEST_NVPMF(abcd_lmno_f3, find_func_addr(lfn="_ZN4abcd2f3Ev"), 0);
+  TEST_VPMF (abcd_lmno_g1, 1, 0);
+  TEST_VPMF (abcd_lmno_g3, LPSELECT(9,5), 0);
+  TEST_NVPMF(efgh_abcd_f2, find_func_addr(lfn="_ZN4efgh2f2Ev"), 0);
+  TEST_NVPMF(efgh_abcd_f3, find_func_addr(lfn="_ZN4efgh2f3Ev"), 0);
+  TEST_VPMF (efgh_abcd_g2, 1, 0);
+  TEST_VPMF (efgh_abcd_g3, LPSELECT(9,5), 0);
+  TEST_NVPMF(efgh_efgh_f2, find_func_addr(lfn="_ZN4efgh2f2Ev"), 0);
+  TEST_NVPMF(efgh_efgh_f3, find_func_addr(lfn="_ZN4efgh2f3Ev"), 0);
+  TEST_VPMF (efgh_efgh_g2, 1, 0);
+  TEST_VPMF (efgh_efgh_g3, LPSELECT(9,5), 0);
+  TEST_NVPMF(efgh_pqrs_f2, find_func_addr(lfn="_ZN4efgh2f2Ev"), 0);
+  TEST_NVPMF(efgh_pqrs_f3, find_func_addr(lfn="_ZN4efgh2f3Ev"), 0);
+  TEST_VPMF (efgh_pqrs_g2, 1, 0);
+  TEST_VPMF (efgh_pqrs_g3, LPSELECT(9,5), 0);
+  TEST_NVPMF(efgh_lmno_f2, find_func_addr(lfn="_ZN4efgh2f2Ev"), 0);
+  TEST_NVPMF(efgh_lmno_f3, find_func_addr(lfn="_ZN4efgh2f3Ev"), 0);
+  TEST_VPMF (efgh_lmno_g2, 1, 0);
+  TEST_VPMF (efgh_lmno_g3, LPSELECT(9,5), 0);
+  TEST_NVPMF(pqrs_abcd_f1, find_func_addr(lfn="_ZN4abcd2f1Ev"), 0);
+  TEST_NVPMF(pqrs_abcd_f2, find_func_addr(lfn="_ZN4efgh2f2Ev"), LPSELECT(16,8));
+  TEST_NVPMF(pqrs_abcd_f4, find_func_addr(lfn="_ZN4pqrs2f4Ev"), 0);
+  TEST_VPMF (pqrs_abcd_g1, 1, 0);
+  TEST_VPMF (pqrs_abcd_g2, 1, LPSELECT(16,8));
+  TEST_VPMF (pqrs_abcd_g4, LPSELECT(33,17), 0);
+  TEST_NVPMF(pqrs_efgh_f1, find_func_addr(lfn="_ZN4abcd2f1Ev"), 0);
+  TEST_NVPMF(pqrs_efgh_f2, find_func_addr(lfn="_ZN4efgh2f2Ev"), LPSELECT(16,8));
+  TEST_NVPMF(pqrs_efgh_f4, find_func_addr(lfn="_ZN4pqrs2f4Ev"), 0);
+  TEST_VPMF (pqrs_efgh_g1, 1, 0);
+  TEST_VPMF (pqrs_efgh_g2, 1, LPSELECT(16,8));
+  TEST_VPMF (pqrs_efgh_g4, LPSELECT(33,17), 0);
+  TEST_NVPMF(pqrs_pqrs_f1, find_func_addr(lfn="_ZN4abcd2f1Ev"), 0);
+  TEST_NVPMF(pqrs_pqrs_f2, find_func_addr(lfn="_ZN4efgh2f2Ev"), LPSELECT(16,8));
+  TEST_NVPMF(pqrs_pqrs_f4, find_func_addr(lfn="_ZN4pqrs2f4Ev"), 0);
+  TEST_VPMF (pqrs_pqrs_g1, 1, 0);
+  TEST_VPMF (pqrs_pqrs_g2, 1, LPSELECT(16,8));
+  TEST_VPMF (pqrs_pqrs_g4, LPSELECT(33,17), 0);
+  TEST_NVPMF(pqrs_lmno_f1, find_func_addr(lfn="_ZN4abcd2f1Ev"), 0);
+  TEST_NVPMF(pqrs_lmno_f2, find_func_addr(lfn="_ZN4efgh2f2Ev"), LPSELECT(16,8));
+  TEST_NVPMF(pqrs_lmno_f4, find_func_addr(lfn="_ZN4pqrs2f4Ev"), 0);
+  TEST_VPMF (pqrs_lmno_g1, 1, 0);
+  TEST_VPMF (pqrs_lmno_g2, 1, LPSELECT(16,8));
+  TEST_VPMF (pqrs_lmno_g4, LPSELECT(33,17), 0);
+  TEST_NVPMF(lmno_abcd_f4, find_func_addr(lfn="_ZN4lmno2f4Ev"), 0);
+  TEST_VPMF (lmno_abcd_g4, 1, 0);
+  TEST_NVPMF(lmno_efgh_f4, find_func_addr(lfn="_ZN4lmno2f4Ev"), 0);
+  TEST_VPMF (lmno_efgh_g4, 1, 0);
+  TEST_NVPMF(lmno_pqrs_f4, find_func_addr(lfn="_ZN4lmno2f4Ev"), 0);
+  TEST_VPMF (lmno_pqrs_g4, 1, 0);
+  TEST_NVPMF(lmno_lmno_f4, find_func_addr(lfn="_ZN4lmno2f4Ev"), 0);
+  TEST_VPMF (lmno_lmno_g4, 1, 0);
+  TEST_VPMF (lmno_lmno_null, 0, 0);
+  TEST_NVPMF(lmno_lmno_null, 0, 0);
+}
+void test_pdm()
+{
+  // test static assignments
+  test_pdm_x();
+  // now test dynamic assignments
+  reset_pdm();
+  test_pdm_x();
+}
+void test_pmf()
+{
+  // test static assignments
+  test_pmf_x();
+  // now test dynamic assignments
+  reset_pmf();
+  test_pmf_x();
+}
+
+static Arrange_To_Call_Me Tpmf(test_pmf, "pmf");
+static Arrange_To_Call_Me Tpdm(test_pdm, "pdm");
+#else
+
+typedef struct {
+  const char *name;
+  void (*pf)();
+} NAME_MAP;
+
+extern void _ZN4abcd2f1Ev();
+extern void _ZN4abcd2f3Ev();
+extern void _ZN4abcd2f1Ev();
+extern void _ZN4abcd2f3Ev();
+extern void _ZN4abcd2f1Ev();
+extern void _ZN4abcd2f3Ev();
+extern void _ZN4abcd2f1Ev();
+extern void _ZN4abcd2f3Ev();
+extern void _ZN4efgh2f2Ev();
+extern void _ZN4efgh2f3Ev();
+extern void _ZN4efgh2f2Ev();
+extern void _ZN4efgh2f3Ev();
+extern void _ZN4efgh2f2Ev();
+extern void _ZN4efgh2f3Ev();
+extern void _ZN4efgh2f2Ev();
+extern void _ZN4efgh2f3Ev();
+extern void _ZN4abcd2f1Ev();
+extern void _ZN4efgh2f2Ev();
+extern void _ZN4pqrs2f4Ev();
+extern void _ZN4abcd2f1Ev();
+extern void _ZN4efgh2f2Ev();
+extern void _ZN4pqrs2f4Ev();
+extern void _ZN4abcd2f1Ev();
+extern void _ZN4efgh2f2Ev();
+extern void _ZN4pqrs2f4Ev();
+extern void _ZN4abcd2f1Ev();
+extern void _ZN4efgh2f2Ev();
+extern void _ZN4pqrs2f4Ev();
+extern void _ZN4lmno2f4Ev();
+extern void _ZN4lmno2f4Ev();
+extern void _ZN4lmno2f4Ev();
+extern void _ZN4lmno2f4Ev();
+
+#define PAIR(a) {#a, a}
+static NAME_MAP map[] = {
+  PAIR(_ZN4abcd2f1Ev),
+  PAIR(_ZN4abcd2f3Ev),
+  PAIR(_ZN4abcd2f1Ev),
+  PAIR(_ZN4abcd2f3Ev),
+  PAIR(_ZN4abcd2f1Ev),
+  PAIR(_ZN4abcd2f3Ev),
+  PAIR(_ZN4abcd2f1Ev),
+  PAIR(_ZN4abcd2f3Ev),
+  PAIR(_ZN4efgh2f2Ev),
+  PAIR(_ZN4efgh2f3Ev),
+  PAIR(_ZN4efgh2f2Ev),
+  PAIR(_ZN4efgh2f3Ev),
+  PAIR(_ZN4efgh2f2Ev),
+  PAIR(_ZN4efgh2f3Ev),
+  PAIR(_ZN4efgh2f2Ev),
+  PAIR(_ZN4efgh2f3Ev),
+  PAIR(_ZN4abcd2f1Ev),
+  PAIR(_ZN4efgh2f2Ev),
+  PAIR(_ZN4pqrs2f4Ev),
+  PAIR(_ZN4abcd2f1Ev),
+  PAIR(_ZN4efgh2f2Ev),
+  PAIR(_ZN4pqrs2f4Ev),
+  PAIR(_ZN4abcd2f1Ev),
+  PAIR(_ZN4efgh2f2Ev),
+  PAIR(_ZN4pqrs2f4Ev),
+  PAIR(_ZN4abcd2f1Ev),
+  PAIR(_ZN4efgh2f2Ev),
+  PAIR(_ZN4pqrs2f4Ev),
+  PAIR(_ZN4lmno2f4Ev),
+  PAIR(_ZN4lmno2f4Ev),
+  PAIR(_ZN4lmno2f4Ev),
+  PAIR(_ZN4lmno2f4Ev),
+  {0,0}
+};
+
+#include <string.h>
+ptrdiff_t 
+find_func_addr(const char *name)
+{
+  NAME_MAP *m;
+  for (m = map; m->name; m++)
+    if (!strcmp(m->name, name))
+      return (ptrdiff_t) m->pf;
+  return (ptrdiff_t) 0x33333333;
+}
+
+const char *
+find_func_name(void (*f)())
+{
+  NAME_MAP *m;
+  if (!f) return "";
+  for (m = map; m->name; m++)
+    if (m->pf == f)
+      return m->name;
+  return "???";
+}
+
+#endif
+    
+
+
+
+
+
+//these combinations break C++ rules
+//int (abcd::*abcd_abcd_f2)() = &abcd::f2;
+//int (abcd::*abcd_abcd_f4)() = &abcd::f4;
+//int (abcd::*abcd_abcd_g2)() = &abcd::g2;
+//int (abcd::*abcd_abcd_g4)() = &abcd::g4;
+//int (abcd::*abcd_efgh_f2)() = &abcd::f2;
+//int (abcd::*abcd_efgh_f4)() = &abcd::f4;
+//int (abcd::*abcd_efgh_g2)() = &abcd::g2;
+//int (abcd::*abcd_efgh_g4)() = &abcd::g4;
+//int (abcd::*abcd_pqrs_f2)() = &abcd::f2;
+//int (abcd::*abcd_pqrs_f4)() = &abcd::f4;
+//int (abcd::*abcd_pqrs_g2)() = &abcd::g2;
+//int (abcd::*abcd_pqrs_g4)() = &abcd::g4;
+//int (abcd::*abcd_lmno_f2)() = &abcd::f2;
+//int (abcd::*abcd_lmno_f4)() = &abcd::f4;
+//int (abcd::*abcd_lmno_g2)() = &abcd::g2;
+//int (abcd::*abcd_lmno_g4)() = &abcd::g4;
+//int (efgh::*efgh_abcd_f1)() = &efgh::f1;
+//int (efgh::*efgh_abcd_f4)() = &efgh::f4;
+//int (efgh::*efgh_abcd_g1)() = &efgh::g1;
+//int (efgh::*efgh_abcd_g4)() = &efgh::g4;
+//int (efgh::*efgh_efgh_f1)() = &efgh::f1;
+//int (efgh::*efgh_efgh_f4)() = &efgh::f4;
+//int (efgh::*efgh_efgh_g1)() = &efgh::g1;
+//int (efgh::*efgh_efgh_g4)() = &efgh::g4;
+//int (efgh::*efgh_pqrs_f1)() = &efgh::f1;
+//int (efgh::*efgh_pqrs_f4)() = &efgh::f4;
+//int (efgh::*efgh_pqrs_g1)() = &efgh::g1;
+//int (efgh::*efgh_pqrs_g4)() = &efgh::g4;
+//int (efgh::*efgh_lmno_f1)() = &efgh::f1;
+//int (efgh::*efgh_lmno_f4)() = &efgh::f4;
+//int (efgh::*efgh_lmno_g1)() = &efgh::g1;
+//int (efgh::*efgh_lmno_g4)() = &efgh::g4;
+//int (pqrs::*pqrs_abcd_f3)() = &pqrs::f3;
+//int (pqrs::*pqrs_abcd_g3)() = &pqrs::g3;
+//int (pqrs::*pqrs_efgh_f3)() = &pqrs::f3;
+//int (pqrs::*pqrs_efgh_g3)() = &pqrs::g3;
+//int (pqrs::*pqrs_pqrs_f3)() = &pqrs::f3;
+//int (pqrs::*pqrs_pqrs_g3)() = &pqrs::g3;
+//int (pqrs::*pqrs_lmno_f3)() = &pqrs::f3;
+//int (pqrs::*pqrs_lmno_g3)() = &pqrs::g3;
+//int (lmno::*lmno_abcd_f1)() = &lmno::f1;
+//int (lmno::*lmno_abcd_f2)() = &lmno::f2;
+//int (lmno::*lmno_abcd_f3)() = &lmno::f3;
+//int (lmno::*lmno_abcd_g1)() = &lmno::g1;
+//int (lmno::*lmno_abcd_g2)() = &lmno::g2;
+//int (lmno::*lmno_abcd_g3)() = &lmno::g3;
+//int (lmno::*lmno_efgh_f1)() = &lmno::f1;
+//int (lmno::*lmno_efgh_f2)() = &lmno::f2;
+//int (lmno::*lmno_efgh_f3)() = &lmno::f3;
+//int (lmno::*lmno_efgh_g1)() = &lmno::g1;
+//int (lmno::*lmno_efgh_g2)() = &lmno::g2;
+//int (lmno::*lmno_efgh_g3)() = &lmno::g3;
+//int (lmno::*lmno_pqrs_f1)() = &lmno::f1;
+//int (lmno::*lmno_pqrs_f2)() = &lmno::f2;
+//int (lmno::*lmno_pqrs_f3)() = &lmno::f3;
+//int (lmno::*lmno_pqrs_g1)() = &lmno::g1;
+//int (lmno::*lmno_pqrs_g2)() = &lmno::g2;
+//int (lmno::*lmno_pqrs_g3)() = &lmno::g3;
+//int (lmno::*lmno_lmno_f1)() = &lmno::f1;
+//int (lmno::*lmno_lmno_f2)() = &lmno::f2;
+//int (lmno::*lmno_lmno_f3)() = &lmno::f3;
+//int (lmno::*lmno_lmno_g1)() = &lmno::g1;
+//int (lmno::*lmno_lmno_g2)() = &lmno::g2;
+//int (lmno::*lmno_lmno_g3)() = &lmno::g3;

Propchange: test-suite/trunk/ABI-Testsuite/test/s2_3/ptrmem.x
------------------------------------------------------------------------------
    svn:executable = *





More information about the llvm-commits mailing list