|
1 | | -// RUN: %clang_cc1 -fsycl -fsycl-is-device -ast-dump %s | FileCheck %s |
2 | | -#include "Inputs/sycl.hpp" |
| 1 | +// RUN: %clang_cc1 -fsycl -fsycl-is-device -internal-isystem %S/Inputs -ast-dump -sycl-std=2020 %s | FileCheck %s |
3 | 2 |
|
4 | | -struct Base { |
| 3 | +// This test checks inheritance support for struct types with accessors |
| 4 | +// passed as kernel arguments, which are decomposed to individual fields. |
| 5 | + |
| 6 | +#include "sycl.hpp" |
| 7 | + |
| 8 | +sycl::queue myQueue; |
| 9 | + |
| 10 | +struct AccessorBase { |
5 | 11 | int A, B; |
6 | | - cl::sycl::accessor<char, 1, cl::sycl::access::mode::read> AccField; |
| 12 | + sycl::accessor<char, 1, sycl::access::mode::read> AccField; |
7 | 13 | }; |
8 | 14 |
|
9 | | -struct Captured : Base, |
10 | | - cl::sycl::accessor<char, 1, cl::sycl::access::mode::read> { |
| 15 | +struct AccessorDerived : AccessorBase, |
| 16 | + sycl::accessor<char, 1, sycl::access::mode::read> { |
11 | 17 | int C; |
12 | 18 | }; |
13 | 19 |
|
14 | 20 | int main() { |
15 | | - Captured Obj; |
16 | | - cl::sycl::kernel_single_task<class kernel>( |
17 | | - [=]() { |
18 | | - Obj.use(); |
19 | | - }); |
| 21 | + AccessorDerived DerivedObject; |
| 22 | + myQueue.submit([&](sycl::handler &h) { |
| 23 | + h.single_task<class kernel>( |
| 24 | + [=] { |
| 25 | + DerivedObject.use(); |
| 26 | + }); |
| 27 | + }); |
| 28 | + |
| 29 | + return 0; |
20 | 30 | } |
21 | 31 |
|
22 | 32 | // Check kernel parameters |
23 | | -// CHECK: FunctionDecl {{.*}}kernel{{.*}} 'void (int, int, __global char *, cl::sycl::range<1>, cl::sycl::range<1>, cl::sycl::id<1>, __global char *, cl::sycl::range<1>, cl::sycl::range<1>, cl::sycl::id<1>, int)' |
| 33 | +// CHECK: FunctionDecl {{.*}}kernel{{.*}} 'void (int, int, __global char *, sycl::range<1>, sycl::range<1>, sycl::id<1>, __global char *, sycl::range<1>, sycl::range<1>, sycl::id<1>, int)' |
24 | 34 | // CHECK: ParmVarDecl{{.*}} used _arg_A 'int' |
25 | 35 | // CHECK: ParmVarDecl{{.*}} used _arg_B 'int' |
26 | 36 | // CHECK: ParmVarDecl{{.*}} used _arg_AccField '__global char *' |
27 | | -// CHECK: ParmVarDecl{{.*}} used _arg_AccField 'cl::sycl::range<1>' |
28 | | -// CHECK: ParmVarDecl{{.*}} used _arg_AccField 'cl::sycl::range<1>' |
29 | | -// CHECK: ParmVarDecl{{.*}} used _arg_AccField 'cl::sycl::id<1>' |
| 37 | +// CHECK: ParmVarDecl{{.*}} used _arg_AccField 'sycl::range<1>' |
| 38 | +// CHECK: ParmVarDecl{{.*}} used _arg_AccField 'sycl::range<1>' |
| 39 | +// CHECK: ParmVarDecl{{.*}} used _arg_AccField 'sycl::id<1>' |
30 | 40 | // CHECK: ParmVarDecl{{.*}} used _arg__base '__global char *' |
31 | | -// CHECK: ParmVarDecl{{.*}} used _arg__base 'cl::sycl::range<1>' |
32 | | -// CHECK: ParmVarDecl{{.*}} used _arg__base 'cl::sycl::range<1>' |
33 | | -// CHECK: ParmVarDecl{{.*}} used _arg__base 'cl::sycl::id<1>' |
| 41 | +// CHECK: ParmVarDecl{{.*}} used _arg__base 'sycl::range<1>' |
| 42 | +// CHECK: ParmVarDecl{{.*}} used _arg__base 'sycl::range<1>' |
| 43 | +// CHECK: ParmVarDecl{{.*}} used _arg__base 'sycl::id<1>' |
34 | 44 | // CHECK: ParmVarDecl{{.*}} used _arg_C 'int' |
35 | 45 |
|
36 | 46 | // Check lambda initialization |
37 | 47 | // CHECK: VarDecl {{.*}} used '(lambda at {{.*}}accessor_inheritance.cpp |
38 | 48 | // CHECK-NEXT: InitListExpr {{.*}} |
39 | | -// CHECK-NEXT: InitListExpr {{.*}} 'Captured' |
40 | | -// CHECK-NEXT: InitListExpr {{.*}} 'Base' |
| 49 | +// CHECK-NEXT: InitListExpr {{.*}} 'AccessorDerived' |
| 50 | +// CHECK-NEXT: InitListExpr {{.*}} 'AccessorBase' |
41 | 51 | // CHECK-NEXT: ImplicitCastExpr {{.*}} 'int' <LValueToRValue> |
42 | 52 | // CHECK-NEXT: DeclRefExpr {{.*}} 'int' lvalue ParmVar {{.*}} '_arg_A' 'int' |
43 | 53 | // CHECK-NEXT: ImplicitCastExpr {{.*}} 'int' <LValueToRValue> |
44 | 54 | // CHECK-NEXT: DeclRefExpr {{.*}} 'int' lvalue ParmVar {{.*}} '_arg_B' 'int' |
45 | | -// CHECK-NEXT: CXXConstructExpr {{.*}} 'cl::sycl::accessor<char, 1, cl::sycl::access::mode::read>':'cl::sycl::accessor<char, 1, cl::sycl::access::mode::read, cl::sycl::access::target::global_buffer, cl::sycl::access::placeholder::false_t>' 'void () noexcept' |
46 | | -// CHECK-NEXT: CXXConstructExpr {{.*}} 'cl::sycl::accessor<char, 1, cl::sycl::access::mode::read>':'cl::sycl::accessor<char, 1, cl::sycl::access::mode::read, cl::sycl::access::target::global_buffer, cl::sycl::access::placeholder::false_t>' 'void () noexcept' |
| 55 | +// CHECK-NEXT: CXXConstructExpr {{.*}} 'sycl::accessor<char, 1, sycl::access::mode::read>':'sycl::accessor<char, 1, sycl::access::mode::read, sycl::access::target::global_buffer, sycl::access::placeholder::false_t>' 'void () noexcept' |
| 56 | +// CHECK-NEXT: CXXConstructExpr {{.*}} 'sycl::accessor<char, 1, sycl::access::mode::read>':'sycl::accessor<char, 1, sycl::access::mode::read, sycl::access::target::global_buffer, sycl::access::placeholder::false_t>' 'void () noexcept' |
47 | 57 | // CHECK-NEXT: ImplicitCastExpr {{.*}} 'int' <LValueToRValue> |
48 | 58 | // CHECK-NEXT: DeclRefExpr {{.*}} 'int' lvalue ParmVar {{.*}} '_arg_C' 'int' |
49 | 59 |
|
50 | 60 | // Check __init calls |
51 | 61 | // CHECK: CXXMemberCallExpr {{.*}} 'void' |
52 | 62 | // CHECK-NEXT: MemberExpr {{.*}} .__init |
53 | 63 | // CHECK-NEXT: MemberExpr {{.*}} .AccField |
54 | | -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'Base' lvalue <DerivedToBase (Base)> |
55 | | -// CHECK-NEXT: MemberExpr {{.*}} 'Captured' lvalue . |
| 64 | +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'AccessorBase' lvalue <DerivedToBase (AccessorBase)> |
| 65 | +// CHECK-NEXT: MemberExpr {{.*}} 'AccessorDerived' lvalue . |
56 | 66 | // CHECK-NEXT: DeclRefExpr {{.*}}'(lambda at {{.*}}accessor_inheritance.cpp |
57 | 67 | // CHECK-NEXT: ImplicitCastExpr {{.*}} '__global char *' <LValueToRValue> |
58 | 68 | // CHECK-NEXT: DeclRefExpr {{.*}} '__global char *' lvalue ParmVar {{.*}} '_arg_AccField' '__global char *' |
59 | 69 |
|
60 | 70 | // CHECK: CXXMemberCallExpr {{.*}} 'void' |
61 | 71 | // CHECK-NEXT: MemberExpr{{.*}} lvalue .__init |
62 | | -// CHECK-NEXT: MemberExpr{{.*}}'Captured' lvalue . |
| 72 | +// CHECK-NEXT: MemberExpr{{.*}}'AccessorDerived' lvalue . |
63 | 73 | // CHECK-NEXT: DeclRefExpr {{.*}} '(lambda at {{.*}}accessor_inheritance.cpp |
64 | 74 | // CHECK-NEXT: ImplicitCastExpr {{.*}} '__global char *' <LValueToRValue> |
65 | 75 | // CHECK-NEXT: DeclRefExpr {{.*}} '__global char *' lvalue ParmVar {{.*}} '_arg__base' '__global char *' |
0 commit comments