Skip to content

Commit 6132ad1

Browse files
author
Alexander Batashev
authored
[SYCL][NFC] Add vtable ABI checks (#3032)
1 parent 59bd877 commit 6132ad1

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

sycl/test/abi/vtable.cpp

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// RUN: %clangxx -fsycl -c -fno-color-diagnostics -Xclang -fdump-vtable-layouts %s | FileCheck %s
2+
// REQUIRES: linux
3+
4+
#include <CL/sycl.hpp>
5+
6+
// clang-format off
7+
8+
// Changing vtable breaks ABI. If this test fails, please, refer to ABI Policy
9+
// Guide for further instructions.
10+
11+
void foo(sycl::detail::HostKernelBase &HKB) {
12+
sycl::detail::NDRDescT Desc;
13+
sycl::detail::HostProfilingInfo HPInfo;
14+
HKB.call(Desc, &HPInfo);
15+
}
16+
17+
// CHECK: Vtable for 'sycl::detail::HostKernelBase' (6 entries).
18+
// CHECK-NEXT: 0 | offset_to_top (0)
19+
// CHECK-NEXT: 1 | sycl::detail::HostKernelBase RTTI
20+
// CHECK-NEXT: -- (sycl::detail::HostKernelBase, 0) vtable address --
21+
// CHECK-NEXT: 2 | void sycl::detail::HostKernelBase::call(const sycl::detail::NDRDescT &, sycl::detail::HostProfilingInfo *) [pure]
22+
// CHECK-NEXT: 3 | char *sycl::detail::HostKernelBase::getPtr() [pure]
23+
// CHECK-NEXT: 4 | sycl::detail::HostKernelBase::~HostKernelBase() [complete]
24+
// CHECK-NEXT: 5 | sycl::detail::HostKernelBase::~HostKernelBase() [deleting]
25+
26+
void foo(sycl::detail::SYCLMemObjI &MemObj) { (void)MemObj.getType(); }
27+
28+
// CHECK: Vtable for 'sycl::detail::SYCLMemObjI' (11 entries).
29+
// CHECK-NEXT: 0 | offset_to_top (0)
30+
// CHECK-NEXT: 1 | sycl::detail::SYCLMemObjI RTTI
31+
// CHECK-NEXT: -- (sycl::detail::SYCLMemObjI, 0) vtable address --
32+
// CHECK-NEXT: 2 | sycl::detail::SYCLMemObjI::~SYCLMemObjI() [complete]
33+
// CHECK-NEXT: 3 | sycl::detail::SYCLMemObjI::~SYCLMemObjI() [deleting]
34+
// CHECK-NEXT: 4 | sycl::detail::SYCLMemObjI::MemObjType sycl::detail::SYCLMemObjI::getType() const [pure]
35+
// CHECK-NEXT: 5 | void *sycl::detail::SYCLMemObjI::allocateMem(sycl::detail::ContextImplPtr, bool, void *, RT::PiEvent &) [pure]
36+
// CHECK-NEXT: 6 | void *sycl::detail::SYCLMemObjI::allocateHostMem() [pure]
37+
// CHECK-NEXT: 7 | void sycl::detail::SYCLMemObjI::releaseMem(sycl::detail::ContextImplPtr, void *) [pure]
38+
// CHECK-NEXT: 8 | void sycl::detail::SYCLMemObjI::releaseHostMem(void *) [pure]
39+
// CHECK-NEXT: 9 | size_t sycl::detail::SYCLMemObjI::getSize() const [pure]
40+
// CHECK-NEXT: 10 | sycl::detail::ContextImplPtr sycl::detail::SYCLMemObjI::getInteropContext() const [pure]
41+
42+
void foo(sycl::detail::pi::DeviceBinaryImage &Img) { Img.print(); }
43+
// CHECK: Vtable for 'sycl::detail::pi::DeviceBinaryImage' (6 entries).
44+
// CHECK-NEXT: 0 | offset_to_top (0)
45+
// CHECK-NEXT: 1 | sycl::detail::pi::DeviceBinaryImage RTTI
46+
// CHECK-NEXT: -- (sycl::detail::pi::DeviceBinaryImage, 0) vtable address --
47+
// CHECK-NEXT: 2 | void sycl::detail::pi::DeviceBinaryImage::print() const
48+
// CHECK-NEXT: 3 | void sycl::detail::pi::DeviceBinaryImage::dump(std::ostream &) const
49+
// CHECK-NEXT: 4 | sycl::detail::pi::DeviceBinaryImage::~DeviceBinaryImage() [complete]
50+
// CHECK-NEXT: 5 | sycl::detail::pi::DeviceBinaryImage::~DeviceBinaryImage() [deleting]
51+
52+
void foo(sycl::detail::CG *CG) { delete CG; }
53+
// CHECK: Vtable for 'sycl::detail::CG' (4 entries).
54+
// CHECK-NEXT: 0 | offset_to_top (0)
55+
// CHECK-NEXT: 1 | sycl::detail::CG RTTI
56+
// CHECK-NEXT: -- (sycl::detail::CG, 0) vtable address --
57+
// CHECK-NEXT: 2 | sycl::detail::CG::~CG() [complete]
58+
// CHECK-NEXT: 3 | sycl::detail::CG::~CG() [deleting]
59+
60+
void foo(sycl::detail::PropertyWithDataBase *Prop) { delete Prop; }
61+
// CHECK: Vtable for 'sycl::detail::PropertyWithDataBase' (4 entries).
62+
// CHECK-NEXT: 0 | offset_to_top (0)
63+
// CHECK-NEXT: 1 | sycl::detail::PropertyWithDataBase RTTI
64+
// CHECK-NEXT: -- (sycl::detail::PropertyWithDataBase, 0) vtable address --
65+
// CHECK-NEXT: 2 | sycl::detail::PropertyWithDataBase::~PropertyWithDataBase() [complete]
66+
// CHECK-NEXT: 3 | sycl::detail::PropertyWithDataBase::~PropertyWithDataBase() [deleting]
67+
68+
void foo(sycl::detail::SYCLMemObjAllocator &Allocator) {
69+
(void)Allocator.allocate(0);
70+
}
71+
// CHECK: Vtable for 'sycl::detail::SYCLMemObjAllocator' (9 entries).
72+
// CHECK-NEXT: 0 | offset_to_top (0)
73+
// CHECK-NEXT: 1 | sycl::detail::SYCLMemObjAllocator RTTI
74+
// CHECK-NEXT: -- (sycl::detail::SYCLMemObjAllocator, 0) vtable address --
75+
// CHECK-NEXT: 2 | void *sycl::detail::SYCLMemObjAllocator::getAllocatorImpl() [pure]
76+
// CHECK-NEXT: 3 | sycl::detail::SYCLMemObjAllocator::~SYCLMemObjAllocator() [complete]
77+
// CHECK-NEXT: 4 | sycl::detail::SYCLMemObjAllocator::~SYCLMemObjAllocator() [deleting]
78+
// CHECK-NEXT: 5 | void *sycl::detail::SYCLMemObjAllocator::allocate(std::size_t) [pure]
79+
// CHECK-NEXT: 6 | void sycl::detail::SYCLMemObjAllocator::deallocate(void *, std::size_t) [pure]
80+
// CHECK-NEXT: 7 | std::size_t sycl::detail::SYCLMemObjAllocator::getValueSize() const [pure]
81+
// CHECK-NEXT: 8 | void sycl::detail::SYCLMemObjAllocator::setAlignment(std::size_t) [pure]
82+
83+
void foo(sycl::device_selector &DeviceSelector) {
84+
(void)DeviceSelector.select_device();
85+
}
86+
// CHECK: Vtable for 'sycl::device_selector' (6 entries).
87+
// CHECK-NEXT: 0 | offset_to_top (0)
88+
// CHECK-NEXT: 1 | sycl::device_selector RTTI
89+
// CHECK-NEXT: -- (sycl::device_selector, 0) vtable address --
90+
// CHECK-NEXT: 2 | sycl::device_selector::~device_selector() [complete]
91+
// CHECK-NEXT: 3 | sycl::device_selector::~device_selector() [deleting]
92+
// CHECK-NEXT: 4 | sycl::device sycl::device_selector::select_device() const
93+
// CHECK-NEXT: 5 | int sycl::device_selector::operator()(const sycl::device &) const [pure]

0 commit comments

Comments
 (0)