[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / CodeGenCUDASPIRV / copy-aggregate-byval.cu
blob2692ce4c92b288d3b58eed8412ea92536366f9b2
1 // Tests CUDA kernel arguments get copied by value when targeting SPIR-V, even with
2 // destructor, copy constructor or move constructor defined by user.
4 // RUN: %clang -emit-llvm --cuda-device-only --offload=spirv32 \
5 // RUN:   -nocudalib -nocudainc %s -o %t.bc -c 2>&1
6 // RUN: llvm-dis %t.bc -o %t.ll
7 // RUN: FileCheck %s --input-file=%t.ll
9 // RUN: %clang -emit-llvm --cuda-device-only --offload=spirv64 \
10 // RUN:   -nocudalib -nocudainc %s -o %t.bc -c 2>&1
11 // RUN: llvm-dis %t.bc -o %t.ll
12 // RUN: FileCheck %s --input-file=%t.ll
14 class GpuData {
15  public:
16   __attribute__((host)) __attribute__((device)) GpuData(int* src) {}
17   __attribute__((host)) __attribute__((device)) ~GpuData() {}
18   __attribute__((host)) __attribute__((device)) GpuData(const GpuData& other) {}
19   __attribute__((host)) __attribute__((device)) GpuData(GpuData&& other) {}
22 // CHECK: define
23 // CHECK-SAME: spir_kernel void @_Z6kernel7GpuData(ptr noundef byval(%class.GpuData) align
25 __attribute__((global)) void kernel(GpuData output) {}