blob: 1d1c035c95ed6c2b8d1a76c79361f34ac4b4225a [file] [log] [blame]
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// 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 ::abcd * foo(int ); // _ZN4abcd3fooEi
~abcd(); // tgen
abcd(); // tgen
};
//SIG(-1 abcd) C1{ v1 Fi}
abcd * abcd ::foo(int ){vfunc_called(this, "_ZN4abcd3fooEi");}
abcd ::~abcd(){ note_dtor("abcd", this);} // tgen
abcd ::abcd(){ note_ctor("abcd", this);} // tgen
static void Test_abcd()
{
extern Class_Descriptor cd_abcd;
void *lvp;
{
ABISELECT(double,int) buf[3];
init_test(&cd_abcd, buf);
abcd *dp, &lv = *(dp=new (buf) abcd());
lvp = (void*)&lv;
check2(sizeof(lv), ABISELECT(16,8), "sizeof(abcd)");
check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(abcd)");
check_field_offset(lv, p, ABISELECT(8,4), "abcd.p");
test_class_info(&lv, &cd_abcd);
dp->~abcd();
}
Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vabcd(Test_abcd, "abcd", ABISELECT(16,8));
#else // __cplusplus
extern void _ZN4abcdC1Ev();
extern void _ZN4abcdD1Ev();
Name_Map name_map_abcd[] = {
NSPAIR(_ZN4abcdC1Ev),
NSPAIR(_ZN4abcdD1Ev),
{0,0}
};
extern VTBL_ENTRY _ZTI4abcd[];
extern void _ZN4abcd3fooEi();
static VTBL_ENTRY vtc_abcd[] = {
0,
(VTBL_ENTRY)&(_ZTI4abcd[0]),
(VTBL_ENTRY)&_ZN4abcd3fooEi,
};
extern VTBL_ENTRY _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),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 efgh {
int q;
virtual ::efgh * foo(int ); // _ZN4efgh3fooEi
~efgh(); // tgen
efgh(); // tgen
};
//SIG(-1 efgh) C1{ v1 Fi}
efgh * efgh ::foo(int ){vfunc_called(this, "_ZN4efgh3fooEi");}
efgh ::~efgh(){ note_dtor("efgh", this);} // tgen
efgh ::efgh(){ note_ctor("efgh", this);} // tgen
static void Test_efgh()
{
extern Class_Descriptor cd_efgh;
void *lvp;
{
ABISELECT(double,int) buf[3];
init_test(&cd_efgh, buf);
efgh *dp, &lv = *(dp=new (buf) efgh());
lvp = (void*)&lv;
check2(sizeof(lv), ABISELECT(16,8), "sizeof(efgh)");
check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(efgh)");
check_field_offset(lv, q, ABISELECT(8,4), "efgh.q");
test_class_info(&lv, &cd_efgh);
dp->~efgh();
}
Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vefgh(Test_efgh, "efgh", ABISELECT(16,8));
#else // __cplusplus
extern void _ZN4efghC1Ev();
extern void _ZN4efghD1Ev();
Name_Map name_map_efgh[] = {
NSPAIR(_ZN4efghC1Ev),
NSPAIR(_ZN4efghD1Ev),
{0,0}
};
extern VTBL_ENTRY _ZTI4efgh[];
extern void _ZN4efgh3fooEi();
static VTBL_ENTRY vtc_efgh[] = {
0,
(VTBL_ENTRY)&(_ZTI4efgh[0]),
(VTBL_ENTRY)&_ZN4efgh3fooEi,
};
extern VTBL_ENTRY _ZTI4efgh[];
extern VTBL_ENTRY _ZTV4efgh[];
Class_Descriptor cd_efgh = { "efgh", // class name
0,0,//no base classes
&(vtc_efgh[0]), // expected_vtbl_contents
0, //no vtt
ABISELECT(16,8), // object size
NSPAIRA(_ZTI4efgh),ABISELECT(16,8), //typeinfo_var
NSPAIRA(_ZTV4efgh),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 pqrs : abcd , efgh {
int r;
virtual ::pqrs * foo(int ); // _ZN4pqrs3fooEi
~pqrs(); // tgen
pqrs(); // tgen
};
//SIG(1 pqrs) C1{ BC2{ v1 Fi} BC3{ v1 Fi} v1 Fi}
pqrs * pqrs ::foo(int ){vfunc_called(this, "_ZN4pqrs3fooEi");}
pqrs ::~pqrs(){ note_dtor("pqrs", this);} // tgen
pqrs ::pqrs(){ note_ctor("pqrs", this);} // tgen
static void Test_pqrs()
{
extern Class_Descriptor cd_pqrs;
void *lvp;
{
ABISELECT(double,int) buf[ABISELECT(5,6)];
init_test(&cd_pqrs, buf);
pqrs *dp, &lv = *(dp=new (buf) pqrs());
lvp = (void*)&lv;
check2(sizeof(lv), ABISELECT(32,20), "sizeof(pqrs)");
check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(pqrs)");
check_base_class_offset(lv, (abcd*), 0, "pqrs");
check_base_class_offset(lv, (efgh*), ABISELECT(16,8), "pqrs");
check_field_offset(lv, r, ABISELECT(28,16), "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(32,20));
#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
1, 0},
{&cd_efgh, ABISELECT(16,8), //bcp->offset
3, //bcp->virtual_function_table_offset
2, //num_negative_vtable_entries(t, bcp)
0, //bcp->index_in_construction_vtbl_array
0, //bcp->base_subarray_index_in_construction_vtbl_array
2, //init_seq
-1, //immediately_derived
1, 0},
{0}};
extern VTBL_ENTRY _ZTI4pqrs[];
extern void _ZN4pqrs3fooEi();
extern void ABISELECT(_ZTchn16_h16_N4pqrs3fooEi,_ZTchn8_h8_N4pqrs3fooEi)();
static VTBL_ENTRY vtc_pqrs[] = {
0,
(VTBL_ENTRY)&(_ZTI4pqrs[0]),
(VTBL_ENTRY)&_ZN4pqrs3fooEi,
ABISELECT(-16,-8),
(VTBL_ENTRY)&(_ZTI4pqrs[0]),
(VTBL_ENTRY)&ABISELECT(_ZTchn16_h16_N4pqrs3fooEi,_ZTchn8_h8_N4pqrs3fooEi),
};
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(32,20), // object size
NSPAIRA(_ZTI4pqrs),ABISELECT(56,32), //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
//============================================================================
#ifdef __cplusplus
struct aaa1 {
int x;
int y;
virtual ::abcd * fff(int ); // _ZN4aaa13fffEi
virtual ::efgh * kkk(int ); // _ZN4aaa13kkkEi
~aaa1(); // tgen
aaa1(); // tgen
};
//SIG(-1 aaa1) C1{ v1 v2 Fi[2]}
abcd * aaa1 ::fff(int ){vfunc_called(this, "_ZN4aaa13fffEi");}
efgh * aaa1 ::kkk(int ){vfunc_called(this, "_ZN4aaa13kkkEi");}
aaa1 ::~aaa1(){ note_dtor("aaa1", this);} // tgen
aaa1 ::aaa1(){ note_ctor("aaa1", this);} // tgen
static void Test_aaa1()
{
extern Class_Descriptor cd_aaa1;
void *lvp;
{
ABISELECT(double,int) buf[ABISELECT(3,4)];
init_test(&cd_aaa1, buf);
aaa1 *dp, &lv = *(dp=new (buf) aaa1());
lvp = (void*)&lv;
check2(sizeof(lv), ABISELECT(16,12), "sizeof(aaa1)");
check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(aaa1)");
check_field_offset(lv, x, ABISELECT(8,4), "aaa1.x");
check_field_offset(lv, y, ABISELECT(12,8), "aaa1.y");
test_class_info(&lv, &cd_aaa1);
dp->~aaa1();
}
Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vaaa1(Test_aaa1, "aaa1", ABISELECT(16,12));
#else // __cplusplus
extern void _ZN4aaa1C1Ev();
extern void _ZN4aaa1D1Ev();
Name_Map name_map_aaa1[] = {
NSPAIR(_ZN4aaa1C1Ev),
NSPAIR(_ZN4aaa1D1Ev),
{0,0}
};
extern VTBL_ENTRY _ZTI4aaa1[];
extern void _ZN4aaa13fffEi();
extern void _ZN4aaa13kkkEi();
static VTBL_ENTRY vtc_aaa1[] = {
0,
(VTBL_ENTRY)&(_ZTI4aaa1[0]),
(VTBL_ENTRY)&_ZN4aaa13fffEi,
(VTBL_ENTRY)&_ZN4aaa13kkkEi,
};
extern VTBL_ENTRY _ZTI4aaa1[];
extern VTBL_ENTRY _ZTV4aaa1[];
Class_Descriptor cd_aaa1 = { "aaa1", // class name
0,0,//no base classes
&(vtc_aaa1[0]), // expected_vtbl_contents
0, //no vtt
ABISELECT(16,12), // object size
NSPAIRA(_ZTI4aaa1),ABISELECT(16,8), //typeinfo_var
NSPAIRA(_ZTV4aaa1),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 bbb1 {
int p;
int q;
virtual ::abcd * fff(int ); // _ZN4bbb13fffEi
virtual ::efgh * kkk(int ); // _ZN4bbb13kkkEi
~bbb1(); // tgen
bbb1(); // tgen
};
//SIG(-1 bbb1) C1{ v1 v2 Fi[2]}
abcd * bbb1 ::fff(int ){vfunc_called(this, "_ZN4bbb13fffEi");}
efgh * bbb1 ::kkk(int ){vfunc_called(this, "_ZN4bbb13kkkEi");}
bbb1 ::~bbb1(){ note_dtor("bbb1", this);} // tgen
bbb1 ::bbb1(){ note_ctor("bbb1", this);} // tgen
static void Test_bbb1()
{
extern Class_Descriptor cd_bbb1;
void *lvp;
{
ABISELECT(double,int) buf[ABISELECT(3,4)];
init_test(&cd_bbb1, buf);
bbb1 *dp, &lv = *(dp=new (buf) bbb1());
lvp = (void*)&lv;
check2(sizeof(lv), ABISELECT(16,12), "sizeof(bbb1)");
check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(bbb1)");
check_field_offset(lv, p, ABISELECT(8,4), "bbb1.p");
check_field_offset(lv, q, ABISELECT(12,8), "bbb1.q");
test_class_info(&lv, &cd_bbb1);
dp->~bbb1();
}
Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vbbb1(Test_bbb1, "bbb1", ABISELECT(16,12));
#else // __cplusplus
extern void _ZN4bbb1C1Ev();
extern void _ZN4bbb1D1Ev();
Name_Map name_map_bbb1[] = {
NSPAIR(_ZN4bbb1C1Ev),
NSPAIR(_ZN4bbb1D1Ev),
{0,0}
};
extern VTBL_ENTRY _ZTI4bbb1[];
extern void _ZN4bbb13fffEi();
extern void _ZN4bbb13kkkEi();
static VTBL_ENTRY vtc_bbb1[] = {
0,
(VTBL_ENTRY)&(_ZTI4bbb1[0]),
(VTBL_ENTRY)&_ZN4bbb13fffEi,
(VTBL_ENTRY)&_ZN4bbb13kkkEi,
};
extern VTBL_ENTRY _ZTI4bbb1[];
extern VTBL_ENTRY _ZTV4bbb1[];
Class_Descriptor cd_bbb1 = { "bbb1", // class name
0,0,//no base classes
&(vtc_bbb1[0]), // expected_vtbl_contents
0, //no vtt
ABISELECT(16,12), // object size
NSPAIRA(_ZTI4bbb1),ABISELECT(16,8), //typeinfo_var
NSPAIRA(_ZTV4bbb1),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 ccc1 : virtual aaa1 , virtual bbb1 {
int d;
int f;
virtual ::pqrs * fff(int ); // _ZN4ccc13fffEi
virtual ::pqrs * kkk(int ); // _ZN4ccc13kkkEi
~ccc1(); // tgen
ccc1(); // tgen
};
//SIG(1 ccc1) C1{ VBC2{ v1 v2 Fi[2]} VBC3{ v1 v2 Fi[2]} v1 v2 Fi[2]}
pqrs * ccc1 ::fff(int ){vfunc_called(this, "_ZN4ccc13fffEi");}
pqrs * ccc1 ::kkk(int ){vfunc_called(this, "_ZN4ccc13kkkEi");}
ccc1 ::~ccc1(){ note_dtor("ccc1", this);} // tgen
ccc1 ::ccc1(){ note_ctor("ccc1", this);} // tgen
static void Test_ccc1()
{
extern Class_Descriptor cd_ccc1;
void *lvp;
{
ABISELECT(double,int) buf[ABISELECT(7,10)];
init_test(&cd_ccc1, buf);
ccc1 *dp, &lv = *(dp=new (buf) ccc1());
lvp = (void*)&lv;
check2(sizeof(lv), ABISELECT(48,36), "sizeof(ccc1)");
check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ccc1)");
check_base_class_offset(lv, (aaa1*), ABISELECT(16,12), "ccc1");
check_base_class_offset(lv, (bbb1*), ABISELECT(32,24), "ccc1");
check_field_offset(lv, d, ABISELECT(8,4), "ccc1.d");
check_field_offset(lv, f, ABISELECT(12,8), "ccc1.f");
test_class_info(&lv, &cd_ccc1);
dp->~ccc1();
}
Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vccc1(Test_ccc1, "ccc1", ABISELECT(48,36));
#else // __cplusplus
extern void _ZN4ccc1C1Ev();
extern void _ZN4ccc1D1Ev();
Name_Map name_map_ccc1[] = {
NSPAIR(_ZN4ccc1C1Ev),
NSPAIR(_ZN4ccc1D1Ev),
{0,0}
};
extern Class_Descriptor cd_aaa1;
extern VTBL_ENTRY _ZTI4aaa1[];
extern VTBL_ENTRY _ZTV4aaa1[];
extern Class_Descriptor cd_bbb1;
extern VTBL_ENTRY _ZTI4bbb1[];
extern VTBL_ENTRY _ZTV4bbb1[];
static Base_Class bases_ccc1[] = {
// ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
{&cd_aaa1, ABISELECT(16,12), //bcp->offset
6, //bcp->virtual_function_table_offset
4, //num_negative_vtable_entries(t, bcp)
2, //bcp->index_in_construction_vtbl_array
0, //bcp->base_subarray_index_in_construction_vtbl_array
1, //init_seq
-1, //immediately_derived
1, 1},
{&cd_bbb1, ABISELECT(32,24), //bcp->offset
12, //bcp->virtual_function_table_offset
4, //num_negative_vtable_entries(t, bcp)
3, //bcp->index_in_construction_vtbl_array
0, //bcp->base_subarray_index_in_construction_vtbl_array
2, //init_seq
-1, //immediately_derived
1, 1},
{0}};
extern VTBL_ENTRY _ZTI4ccc1[];
extern void _ZN4ccc13fffEi();
extern void _ZN4ccc13kkkEi();
extern void ABISELECT(_ZTv0_n24_N4ccc13fffEi,_ZTv0_n12_N4ccc13fffEi)();
extern void ABISELECT(_ZThn16_N4ccc13fffEi,_ZThn12_N4ccc13fffEi)() __attribute__((weak));
extern void ABISELECT(_ZTcv0_n32_h16_N4ccc13kkkEi,_ZTcv0_n16_h8_N4ccc13kkkEi)();
extern void ABISELECT(_ZTv0_n24_N4ccc13fffEi,_ZTv0_n12_N4ccc13fffEi)();
extern void ABISELECT(_ZThn32_N4ccc13fffEi,_ZThn24_N4ccc13fffEi)() __attribute__((weak));
extern void ABISELECT(_ZTcv0_n32_h16_N4ccc13kkkEi,_ZTcv0_n16_h8_N4ccc13kkkEi)();
static VTBL_ENTRY vtc_ccc1[] = {
ABISELECT(32,24),
ABISELECT(16,12),
0,
(VTBL_ENTRY)&(_ZTI4ccc1[0]),
(VTBL_ENTRY)&_ZN4ccc13fffEi,
(VTBL_ENTRY)&_ZN4ccc13kkkEi,
ABISELECT(-16,-12),
ABISELECT(-16,-12),
ABISELECT(-16,-12),
(VTBL_ENTRY)&(_ZTI4ccc1[0]),
(VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ccc13fffEi,_ZTv0_n12_N4ccc13fffEi),
(VTBL_ENTRY)&ABISELECT(_ZTcv0_n32_h16_N4ccc13kkkEi,_ZTcv0_n16_h8_N4ccc13kkkEi),
ABISELECT(-32,-24),
ABISELECT(-32,-24),
ABISELECT(-32,-24),
(VTBL_ENTRY)&(_ZTI4ccc1[0]),
(VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N4ccc13fffEi,_ZTv0_n12_N4ccc13fffEi),
(VTBL_ENTRY)&ABISELECT(_ZTcv0_n32_h16_N4ccc13kkkEi,_ZTcv0_n16_h8_N4ccc13kkkEi),
};
extern VTBL_ENTRY _ZTV4ccc1[];
static VTT_ENTRY vtt_ccc1[] = {
{&(_ZTV4ccc1[4]), 4,18},
{&(_ZTV4ccc1[10]), 10,18},
{&(_ZTV4ccc1[16]), 16,18},
};
extern VTBL_ENTRY _ZTI4ccc1[];
extern VTBL_ENTRY _ZTV4ccc1[];
extern VTBL_ENTRY * __attribute__((weak))_ZTT4ccc1[];
static VTBL_ENTRY alt_thunk_names1[] = {
(VTBL_ENTRY)ABISELECT(_ZTv0_n24_N4ccc13fffEi,_ZTv0_n12_N4ccc13fffEi), //
(VTBL_ENTRY)ABISELECT(_ZThn32_N4ccc13fffEi,_ZThn24_N4ccc13fffEi),
(VTBL_ENTRY)ABISELECT(_ZThn16_N4ccc13fffEi,_ZThn12_N4ccc13fffEi),
ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_ccc1 = { "ccc1", // class name
bases_ccc1, 2,
&(vtc_ccc1[0]), // expected_vtbl_contents
&(vtt_ccc1[0]), // expected_vtt_contents
ABISELECT(48,36), // object size
NSPAIRA(_ZTI4ccc1),ABISELECT(56,32), //typeinfo_var
NSPAIRA(_ZTV4ccc1),18, //virtual function table var
4, // offset into main vftv pointed to by object[0]
NSPAIRA(_ZTT4ccc1),3, //virtual table table var
2, // n_initialized_bases
1, // has_virtual_bases
0, // has_class_type_fields
alt_thunk_names1,
};
#endif // __cplusplus
//============================================================================
#ifdef __cplusplus
struct ddd1 : aaa1 , bbb1 {
int d;
int f;
virtual ::pqrs * fff(int ); // _ZN4ddd13fffEi
virtual ::pqrs * kkk(int ); // _ZN4ddd13kkkEi
~ddd1(); // tgen
ddd1(); // tgen
};
//SIG(1 ddd1) C1{ BC2{ v1 v2 Fi[2]} BC3{ v1 v2 Fi[2]} v1 v2 Fi[2]}
pqrs * ddd1 ::fff(int ){vfunc_called(this, "_ZN4ddd13fffEi");}
pqrs * ddd1 ::kkk(int ){vfunc_called(this, "_ZN4ddd13kkkEi");}
ddd1 ::~ddd1(){ note_dtor("ddd1", this);} // tgen
ddd1 ::ddd1(){ note_ctor("ddd1", this);} // tgen
static void Test_ddd1()
{
extern Class_Descriptor cd_ddd1;
void *lvp;
{
ABISELECT(double,int) buf[ABISELECT(6,9)];
init_test(&cd_ddd1, buf);
ddd1 *dp, &lv = *(dp=new (buf) ddd1());
lvp = (void*)&lv;
check2(sizeof(lv), ABISELECT(40,32), "sizeof(ddd1)");
check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(ddd1)");
check_base_class_offset(lv, (aaa1*), 0, "ddd1");
check_base_class_offset(lv, (bbb1*), ABISELECT(16,12), "ddd1");
check_field_offset(lv, d, ABISELECT(32,24), "ddd1.d");
check_field_offset(lv, f, ABISELECT(36,28), "ddd1.f");
test_class_info(&lv, &cd_ddd1);
dp->~ddd1();
}
Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vddd1(Test_ddd1, "ddd1", ABISELECT(40,32));
#else // __cplusplus
extern void _ZN4ddd1C1Ev();
extern void _ZN4ddd1D1Ev();
Name_Map name_map_ddd1[] = {
NSPAIR(_ZN4ddd1C1Ev),
NSPAIR(_ZN4ddd1D1Ev),
{0,0}
};
extern Class_Descriptor cd_aaa1;
extern VTBL_ENTRY _ZTI4aaa1[];
extern VTBL_ENTRY _ZTV4aaa1[];
extern Class_Descriptor cd_bbb1;
extern VTBL_ENTRY _ZTI4bbb1[];
extern VTBL_ENTRY _ZTV4bbb1[];
static Base_Class bases_ddd1[] = {
// ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
{&cd_aaa1, 0, //bcp->offset
-1, //bcp->virtual_function_table_offset
2, //num_negative_vtable_entries(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_bbb1, ABISELECT(16,12), //bcp->offset
5, //bcp->virtual_function_table_offset
2, //num_negative_vtable_entries(t, bcp)
0, //bcp->index_in_construction_vtbl_array
0, //bcp->base_subarray_index_in_construction_vtbl_array
2, //init_seq
-1, //immediately_derived
1, 0},
{0}};
extern VTBL_ENTRY _ZTI4ddd1[];
extern void _ZN4ddd13fffEi();
extern void ABISELECT(_ZTch0_h16_N4ddd13kkkEi,_ZTch0_h8_N4ddd13kkkEi)();
extern void _ZN4ddd13kkkEi();
extern void ABISELECT(_ZThn16_N4ddd13fffEi,_ZThn12_N4ddd13fffEi)();
extern void ABISELECT(_ZTchn16_h16_N4ddd13kkkEi,_ZTchn12_h8_N4ddd13kkkEi)();
static VTBL_ENTRY vtc_ddd1[] = {
0,
(VTBL_ENTRY)&(_ZTI4ddd1[0]),
(VTBL_ENTRY)&_ZN4ddd13fffEi,
(VTBL_ENTRY)&ABISELECT(_ZTch0_h16_N4ddd13kkkEi,_ZTch0_h8_N4ddd13kkkEi),
(VTBL_ENTRY)&_ZN4ddd13kkkEi,
ABISELECT(-16,-12),
(VTBL_ENTRY)&(_ZTI4ddd1[0]),
(VTBL_ENTRY)&ABISELECT(_ZThn16_N4ddd13fffEi,_ZThn12_N4ddd13fffEi),
(VTBL_ENTRY)&ABISELECT(_ZTchn16_h16_N4ddd13kkkEi,_ZTchn12_h8_N4ddd13kkkEi),
};
extern VTBL_ENTRY _ZTI4ddd1[];
extern VTBL_ENTRY _ZTV4ddd1[];
Class_Descriptor cd_ddd1 = { "ddd1", // class name
bases_ddd1, 2,
&(vtc_ddd1[0]), // expected_vtbl_contents
0, //no vtt
ABISELECT(40,32), // object size
NSPAIRA(_ZTI4ddd1),ABISELECT(56,32), //typeinfo_var
NSPAIRA(_ZTV4ddd1),9, //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
//============================================================================