From de17e411147b3000bce411077fcab9dae5049469 Mon Sep 17 00:00:00 2001 From: Artur Gainullin Date: Fri, 12 Jul 2024 08:05:30 -0700 Subject: [PATCH 1/5] [SYCL][Test] Add test for ABI-neutrality of sycl classes --- .../abi/sycl_classes_abi_neutral_test.cpp | 333 ++++++++++++++++++ 1 file changed, 333 insertions(+) create mode 100644 sycl/test/abi/sycl_classes_abi_neutral_test.cpp diff --git a/sycl/test/abi/sycl_classes_abi_neutral_test.cpp b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp new file mode 100644 index 000000000000..403966df6745 --- /dev/null +++ b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp @@ -0,0 +1,333 @@ +// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -fsycl-device-only -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | FileCheck %s +// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | FileCheck %s +// REQUIRES: linux +// UNSUPPORTED: libcxx + +// The purpose of this test is to check that classes in sycl namespace which are +// defined in SYCL headers don't have std::string and std::list data members to +// avoid having dual-abi issues (see +// https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html). I.e. if +// application is built with the old ABI and such data member is crossing ABI +// boundary then it will result in issues as SYCL RT is using new ABI by +// default. All such data members can potentially cross ABI boundaries and +// that's why we need to be sure that we use only abi-neutral data members. + +// New exclusions are NOT ALLOWED to this file unless it is guaranteed that data +// member is not crossing ABI boundary. All current exclusions are listed below. + +// CHECK: 0 | class sycl::detail::CG +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGExecKernel +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 408 | class std::basic_string MKernelName +// CHECK-NEXT: 408 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 424 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGCopy +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGFill +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGUpdateHost +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGCopyUSM +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGFillUSM +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGPrefetchUSM +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGAdviseUSM +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGBarrier +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGProfilingTag +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGCopy2DUSM +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGFill2DUSM +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGMemset2DUSM +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGReadWriteHostPipe +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 208 | class std::basic_string PipeName +// CHECK-NOT: {{^0}} | class +// CHECK: 224 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGCopyToDeviceGlobal +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGCopyFromDeviceGlobal +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGCopyImage +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGSemaphoreWait +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGSemaphoreSignal +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGExecCommandBuffer +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} +// CHECK: 0 | class sycl::detail::CGHostTask +// CHECK-NEXT: 0 | class sycl::detail::CG (primary base) +// CHECK-NEXT: 0 | (CG vtable pointer) +// CHECK-NOT: {{^0}} | class +// CHECK: 136 | class std::basic_string MFunctionName +// CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 168 | class std::basic_string MFileName +// CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{std::basic_string|std::list}} + +#include From 2698a4c99290a96ea0a1d6554a78edb13330100b Mon Sep 17 00:00:00 2001 From: Artur Gainullin Date: Fri, 12 Jul 2024 11:34:51 -0700 Subject: [PATCH 2/5] Sort sycl::class blocks before FileCheck to work with any order --- .../abi/sycl_classes_abi_neutral_test.cpp | 81 ++++++++++++------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/sycl/test/abi/sycl_classes_abi_neutral_test.cpp b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp index 403966df6745..676b368485e4 100644 --- a/sycl/test/abi/sycl_classes_abi_neutral_test.cpp +++ b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp @@ -1,5 +1,5 @@ -// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -fsycl-device-only -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | FileCheck %s -// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | FileCheck %s +// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -fsycl-device-only -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | sort -z | FileCheck %s +// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | sort -z | FileCheck %s // REQUIRES: linux // UNSUPPORTED: libcxx @@ -26,7 +26,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGExecKernel + +// CHECK: 0 | class sycl::detail::CGAdviseUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -39,13 +40,9 @@ // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class -// CHECK: 408 | class std::basic_string MKernelName -// CHECK-NEXT: 408 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class -// CHECK: 424 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGCopy + +// CHECK: 0 | class sycl::detail::CGBarrier // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -59,7 +56,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGFill + +// CHECK: 0 | class sycl::detail::CGCopy // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -73,7 +71,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGUpdateHost + +// CHECK: 0 | class sycl::detail::CGCopy2DUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -87,7 +86,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGCopyUSM + +// CHECK: 0 | class sycl::detail::CGCopyFromDeviceGlobal // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -101,7 +101,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGFillUSM + +// CHECK: 0 | class sycl::detail::CGCopyImage // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -115,7 +116,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGPrefetchUSM + +// CHECK: 0 | class sycl::detail::CGCopyToDeviceGlobal // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -129,7 +131,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGAdviseUSM + +// CHECK: 0 | class sycl::detail::CGCopyUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -143,7 +146,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGBarrier + +// CHECK: 0 | class sycl::detail::CGExecCommandBuffer // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -157,7 +161,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGProfilingTag + +// CHECK: 0 | class sycl::detail::CGExecKernel // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -170,8 +175,14 @@ // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 408 | class std::basic_string MKernelName +// CHECK-NEXT: 408 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0}} | class +// CHECK: 424 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGCopy2DUSM + +// CHECK: 0 | class sycl::detail::CGFill // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -185,6 +196,7 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} + // CHECK: 0 | class sycl::detail::CGFill2DUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) @@ -199,7 +211,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGMemset2DUSM + +// CHECK: 0 | class sycl::detail::CGFillUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -213,7 +226,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGReadWriteHostPipe + +// CHECK: 0 | class sycl::detail::CGHostTask // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -226,12 +240,9 @@ // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class -// CHECK: 208 | class std::basic_string PipeName -// CHECK-NOT: {{^0}} | class -// CHECK: 224 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGCopyToDeviceGlobal + +// CHECK: 0 | class sycl::detail::CGMemset2DUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -245,7 +256,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGCopyFromDeviceGlobal + +// CHECK: 0 | class sycl::detail::CGPrefetchUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -259,7 +271,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGCopyImage + +// CHECK: 0 | class sycl::detail::CGProfilingTag // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -273,7 +286,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGSemaphoreWait + +// CHECK: 0 | class sycl::detail::CGReadWriteHostPipe // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -286,7 +300,12 @@ // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0}} | class +// CHECK: 208 | class std::basic_string PipeName +// CHECK-NOT: {{^0}} | class +// CHECK: 224 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} + // CHECK: 0 | class sycl::detail::CGSemaphoreSignal // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) @@ -301,7 +320,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGExecCommandBuffer + +// CHECK: 0 | class sycl::detail::CGSemaphoreWait // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class @@ -315,7 +335,8 @@ // CHECK-NOT: {{^0}} | class // CHECK: 184 | union std::basic_string::(anonymous at // CHECK-NOT: {{std::basic_string|std::list}} -// CHECK: 0 | class sycl::detail::CGHostTask + +// CHECK: 0 | class sycl::detail::CGUpdateHost // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) // CHECK-NOT: {{^0}} | class From 0793ab95118f1b9a4a85386c886096fb016586a8 Mon Sep 17 00:00:00 2001 From: Artur Gainullin Date: Fri, 12 Jul 2024 16:14:27 -0700 Subject: [PATCH 3/5] Use implicit-check-not for reliability --- .../abi/sycl_classes_abi_neutral_test.cpp | 211 ++++++++---------- 1 file changed, 97 insertions(+), 114 deletions(-) diff --git a/sycl/test/abi/sycl_classes_abi_neutral_test.cpp b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp index 676b368485e4..33d135ba5f9f 100644 --- a/sycl/test/abi/sycl_classes_abi_neutral_test.cpp +++ b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp @@ -1,4 +1,4 @@ -// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -fsycl-device-only -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | sort -z | FileCheck %s +// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -fsycl-device-only -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | sort -z | FileCheck --implicit-check-not "{{std::basic_string|std::list}}" %s // RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | sort -z | FileCheck %s // REQUIRES: linux // UNSUPPORTED: libcxx @@ -15,340 +15,323 @@ // New exclusions are NOT ALLOWED to this file unless it is guaranteed that data // member is not crossing ABI boundary. All current exclusions are listed below. + + // CHECK: 0 | class sycl::detail::CG // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} +// CHECK: 152 | union std::basic_string::(anonymous at +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGAdviseUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGBarrier // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGCopy // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGCopy2DUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGCopyFromDeviceGlobal // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGCopyImage // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGCopyToDeviceGlobal // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGCopyUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGExecCommandBuffer // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGExecKernel // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 408 | class std::basic_string MKernelName // CHECK-NEXT: 408 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 424 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGFill // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGFill2DUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGFillUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGHostTask // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGMemset2DUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGPrefetchUSM // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGProfilingTag // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGReadWriteHostPipe // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 208 | class std::basic_string PipeName -// CHECK-NOT: {{^0}} | class +// CHECK-NEXT: 208 | struct std::basic_string::_Alloc_hider _M_dataplus +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 224 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGSemaphoreSignal // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGSemaphoreWait // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} // CHECK: 0 | class sycl::detail::CGUpdateHost // CHECK-NEXT: 0 | class sycl::detail::CG (primary base) // CHECK-NEXT: 0 | (CG vtable pointer) -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 136 | class std::basic_string MFunctionName // CHECK-NEXT: 136 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 152 | union std::basic_string::(anonymous at -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 168 | class std::basic_string MFileName // CHECK-NEXT: 168 | struct std::basic_string::_Alloc_hider _M_dataplus -// CHECK-NOT: {{^0}} | class +// CHECK-NOT: {{^0 \| class|std::basic_string|std::list}} // CHECK: 184 | union std::basic_string::(anonymous at -// CHECK-NOT: {{std::basic_string|std::list}} #include From 798b0a2c5457480be199767d711f54362d91dbe0 Mon Sep 17 00:00:00 2001 From: Artur Gainullin Date: Mon, 15 Jul 2024 10:05:59 -0700 Subject: [PATCH 4/5] Fix wording --- sycl/test/abi/sycl_classes_abi_neutral_test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sycl/test/abi/sycl_classes_abi_neutral_test.cpp b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp index 33d135ba5f9f..296ca6f1bb13 100644 --- a/sycl/test/abi/sycl_classes_abi_neutral_test.cpp +++ b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp @@ -3,14 +3,14 @@ // REQUIRES: linux // UNSUPPORTED: libcxx -// The purpose of this test is to check that classes in sycl namespace which are +// The purpose of this test is to check that classes in sycl namespace that are // defined in SYCL headers don't have std::string and std::list data members to -// avoid having dual-abi issues (see +// avoid having the dual ABI issue (see // https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html). I.e. if // application is built with the old ABI and such data member is crossing ABI // boundary then it will result in issues as SYCL RT is using new ABI by // default. All such data members can potentially cross ABI boundaries and -// that's why we need to be sure that we use only abi-neutral data members. +// that's why we need to be sure that we use only ABI-neutral data members. // New exclusions are NOT ALLOWED to this file unless it is guaranteed that data // member is not crossing ABI boundary. All current exclusions are listed below. From 96883f38c6e591f62979b88139e96ec9cbfe3960 Mon Sep 17 00:00:00 2001 From: Artur Gainullin Date: Mon, 15 Jul 2024 10:55:23 -0700 Subject: [PATCH 5/5] Use -fdump-record-layouts-complete and add missed implicit-check-not --- sycl/test/abi/sycl_classes_abi_neutral_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sycl/test/abi/sycl_classes_abi_neutral_test.cpp b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp index 296ca6f1bb13..c16bdc756a3e 100644 --- a/sycl/test/abi/sycl_classes_abi_neutral_test.cpp +++ b/sycl/test/abi/sycl_classes_abi_neutral_test.cpp @@ -1,5 +1,5 @@ -// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -fsycl-device-only -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | sort -z | FileCheck --implicit-check-not "{{std::basic_string|std::list}}" %s -// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -c -fno-color-diagnostics -Xclang -fdump-record-layouts %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | sort -z | FileCheck %s +// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -fsycl-device-only -c -fno-color-diagnostics -Xclang -fdump-record-layouts-complete %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | sort -z | FileCheck --implicit-check-not "{{std::basic_string|std::list}}" %s +// RUN: %clangxx -std=c++17 -I %sycl_include -I %sycl_include/sycl -c -fno-color-diagnostics -Xclang -fdump-record-layouts-complete %s -o %t.out | grep -Pzo "0 \| class sycl::.*\n([^\n].*\n)*" | sort -z | FileCheck --implicit-check-not "{{std::basic_string|std::list}}" %s // REQUIRES: linux // UNSUPPORTED: libcxx