|
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