aboutsummaryrefslogtreecommitdiff
path: root/final/ABI-Testsuite/test/misc/T_deletedfunc.x
diff options
context:
space:
mode:
Diffstat (limited to 'final/ABI-Testsuite/test/misc/T_deletedfunc.x')
-rwxr-xr-xfinal/ABI-Testsuite/test/misc/T_deletedfunc.x171
1 files changed, 171 insertions, 0 deletions
diff --git a/final/ABI-Testsuite/test/misc/T_deletedfunc.x b/final/ABI-Testsuite/test/misc/T_deletedfunc.x
new file mode 100755
index 00000000..0e28f01d
--- /dev/null
+++ b/final/ABI-Testsuite/test/misc/T_deletedfunc.x
@@ -0,0 +1,171 @@
+// 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_11 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 {
+ virtual void xar(); // _ZN4abcd3xarEv
+ virtual void foo()=delete; // _ZN4abcd3fooEv
+ ~abcd(); // tgen
+ abcd(); // tgen
+};
+//SIG(-1 abcd) C1{ v1 v2}
+
+
+void abcd ::xar(){vfunc_called(this, "_ZN4abcd3xarEv");}
+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[2];
+ init_test(&cd_abcd, buf);
+ abcd *dp, &lv = *(dp=new (buf) abcd());
+ lvp = (void*)&lv;
+ check2(sizeof(lv), ABISELECT(8,4), "sizeof(abcd)");
+ check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(abcd)");
+ test_class_info(&lv, &cd_abcd);
+ dp->~abcd();
+ }
+ Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vabcd(Test_abcd, "abcd", ABISELECT(8,4));
+
+#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 _ZN4abcd3xarEv();
+extern void __cxa_deleted_virtual();
+static VTBL_ENTRY vtc_abcd[] = {
+ 0,
+ (VTBL_ENTRY)&(_ZTI4abcd[0]),
+ (VTBL_ENTRY)&_ZN4abcd3xarEv,
+ (VTBL_ENTRY)&__cxa_deleted_virtual,
+};
+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(8,4), // 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 {
+ virtual void bar(); // _ZN4efgh3barEv
+ virtual void foo()=delete; // _ZN4efgh3fooEv
+ virtual void zoo(); // _ZN4efgh3zooEv
+ ~efgh(); // tgen
+ efgh(); // tgen
+};
+//SIG(1 efgh) C1{ BC2{ v4 v2} v1 v2 v3}
+
+
+void efgh ::bar(){vfunc_called(this, "_ZN4efgh3barEv");}
+void efgh ::zoo(){vfunc_called(this, "_ZN4efgh3zooEv");}
+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[2];
+ init_test(&cd_efgh, buf);
+ efgh *dp, &lv = *(dp=new (buf) efgh());
+ lvp = (void*)&lv;
+ check2(sizeof(lv), ABISELECT(8,4), "sizeof(efgh)");
+ check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(efgh)");
+ check_base_class_offset(lv, (abcd*), 0, "efgh");
+ test_class_info(&lv, &cd_efgh);
+ dp->~efgh();
+ }
+ Check_Ctor_Dtor_Calls(lvp);
+}
+static Arrange_To_Call_Me vefgh(Test_efgh, "efgh", ABISELECT(8,4));
+
+#else // __cplusplus
+
+extern void _ZN4efghC1Ev();
+extern void _ZN4efghD1Ev();
+Name_Map name_map_efgh[] = {
+ NSPAIR(_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 _ZN4abcd3xarEv();
+extern void __cxa_deleted_virtual();
+extern void _ZN4efgh3barEv();
+extern void _ZN4efgh3zooEv();
+static VTBL_ENTRY vtc_efgh[] = {
+ 0,
+ (VTBL_ENTRY)&(_ZTI4efgh[0]),
+ (VTBL_ENTRY)&_ZN4abcd3xarEv,
+ (VTBL_ENTRY)&__cxa_deleted_virtual,
+ (VTBL_ENTRY)&_ZN4efgh3barEv,
+ (VTBL_ENTRY)&_ZN4efgh3zooEv,
+};
+extern VTBL_ENTRY _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(8,4), // object size
+ NSPAIRA(_ZTI4efgh),ABISELECT(24,12), //typeinfo_var
+ NSPAIRA(_ZTV4efgh),6, //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
+
+//============================================================================
+