|
| 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