Skip to content

Commit 2ea25b8

Browse files
Add missing LValueToRValue cast for pointers. Also added test
for array of pointers not inside a struct. Signed-off-by: Elizabeth Andrews <[email protected]>
1 parent ab583e8 commit 2ea25b8

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1843,6 +1843,9 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
18431843
ParamType = Pointer->getType();
18441844
}
18451845

1846+
DRE = ImplicitCastExpr::Create(SemaRef.Context, ParamType,
1847+
CK_LValueToRValue, DRE, nullptr, VK_RValue);
1848+
18461849
if (PointerTy->getPointeeType().getAddressSpace() !=
18471850
ParamType->getPointeeType().getAddressSpace())
18481851
DRE = ImplicitCastExpr::Create(SemaRef.Context, PointerTy,

clang/test/SemaSYCL/built-in-type-kernel-arg.cpp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ int main() {
2828
int data = 5;
2929
int* data_addr = &data;
3030
int* new_data_addr = nullptr;
31+
int *ptr_array[2];
3132
test_struct s;
3233
s.data = data;
3334
kernel<class kernel_int>(
@@ -42,7 +43,9 @@ int main() {
4243
kernel<class kernel_pointer>(
4344
[=]() {
4445
new_data_addr[0] = data_addr[0];
46+
int *local = ptr_array[1];
4547
});
48+
4649
const int some_const = 10;
4750
test(some_const);
4851
return 0;
@@ -88,48 +91,66 @@ int main() {
8891
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int' <LValueToRValue>
8992
// CHECK-NEXT: DeclRefExpr {{.*}} 'int' lvalue ParmVar {{.*}} '_arg_data' 'int'
9093
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
94+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
9195
// CHECK-NEXT: MemberExpr {{.*}} '__global int *' lvalue . {{.*}}
9296
// CHECK-NEXT: DeclRefExpr {{.*}} '__wrapper_class' lvalue ParmVar {{.*}} '_arg_ptr' '__wrapper_class'
9397
// CHECK-NEXT: InitListExpr {{.*}} 'int *[2]'
9498
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
99+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
95100
// CHECK-NEXT: MemberExpr {{.*}} '__global int *' lvalue . {{.*}}
96101
// CHECK-NEXT: DeclRefExpr {{.*}} '__wrapper_class' lvalue ParmVar {{.*}} '_arg_ptr_array1' '__wrapper_class'
97102
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
103+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
98104
// CHECK-NEXT: MemberExpr {{.*}} '__global int *' lvalue . {{.*}}
99105
// CHECK-NEXT: DeclRefExpr {{.*}} '__wrapper_class' lvalue ParmVar {{.*}} '_arg_ptr_array1' '__wrapper_class'
100106
// CHECK-NEXT: InitListExpr {{.*}} 'int *[2][3]'
101107
// CHECK-NEXT: InitListExpr {{.*}} 'int *[3]'
102108
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
109+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
103110
// CHECK-NEXT: MemberExpr {{.*}} '__global int *' lvalue . {{.*}}
104111
// CHECK-NEXT: DeclRefExpr {{.*}} '__wrapper_class' lvalue ParmVar {{.*}} '_arg_ptr_array2' '__wrapper_class'
105112
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
113+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
106114
// CHECK-NEXT: MemberExpr {{.*}} '__global int *' lvalue . {{.*}}
107115
// CHECK-NEXT: DeclRefExpr {{.*}} '__wrapper_class' lvalue ParmVar {{.*}} '_arg_ptr_array2' '__wrapper_class'
108116
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
117+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
109118
// CHECK-NEXT: MemberExpr {{.*}} '__global int *' lvalue . {{.*}}
110119
// CHECK-NEXT: DeclRefExpr {{.*}} '__wrapper_class' lvalue ParmVar {{.*}} '_arg_ptr_array2' '__wrapper_class'
111120
// CHECK-NEXT: InitListExpr {{.*}} 'int *[3]'
112121
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
122+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
113123
// CHECK-NEXT: MemberExpr {{.*}} '__global int *' lvalue . {{.*}}
114124
// CHECK-NEXT: DeclRefExpr {{.*}} '__wrapper_class' lvalue ParmVar {{.*}} '_arg_ptr_array2' '__wrapper_class'
115125
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
126+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
116127
// CHECK-NEXT: MemberExpr {{.*}} '__global int *' lvalue . {{.*}}
117128
// CHECK-NEXT: DeclRefExpr {{.*}} '__wrapper_class' lvalue ParmVar {{.*}} '_arg_ptr_array2' '__wrapper_class'
118129
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
130+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
119131
// CHECK-NEXT: MemberExpr {{.*}} '__global int *' lvalue . {{.*}}
120132
// CHECK-NEXT: DeclRefExpr {{.*}} '__wrapper_class' lvalue ParmVar {{.*}} '_arg_ptr_array2' '__wrapper_class'
121133

122134
// Check kernel parameters
123-
// CHECK: {{.*}}kernel_pointer{{.*}} 'void (__global int *, __global int *)'
135+
// CHECK: {{.*}}kernel_pointer{{.*}} 'void (__global int *, __global int *, __global int *, __global int *)'
136+
// CHECK: ParmVarDecl {{.*}} used _arg_ '__global int *'
137+
// CHECK: ParmVarDecl {{.*}} used _arg_ '__global int *'
124138
// CHECK: ParmVarDecl {{.*}} used _arg_ '__global int *'
125139
// CHECK: ParmVarDecl {{.*}} used _arg_ '__global int *'
126140
// CHECK: VarDecl {{.*}}'(lambda at {{.*}}built-in-type-kernel-arg.cpp{{.*}})'
127141

128142
// Check that lambda fields of pointer types are initialized
129143
// CHECK: InitListExpr
130144
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
145+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
131146
// CHECK-NEXT: DeclRefExpr {{.*}} '__global int *' lvalue ParmVar {{.*}} '_arg_' '__global int *'
132147
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
148+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
149+
// CHECK-NEXT: DeclRefExpr {{.*}} '__global int *' lvalue ParmVar {{.*}} '_arg_' '__global int *'
150+
// CHECK: InitListExpr {{.*}} 'int *[2]'
151+
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
152+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
153+
// CHECK-NEXT: DeclRefExpr {{.*}} '__global int *' lvalue ParmVar {{.*}} '_arg_' '__global int *'
154+
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <AddressSpaceConversion>
155+
// CHECK-NEXT: ImplicitCastExpr {{.*}} '__global int *' <LValueToRValue>
133156
// CHECK-NEXT: DeclRefExpr {{.*}} '__global int *' lvalue ParmVar {{.*}} '_arg_' '__global int *'
134-
135-
// Check kernel parameters

0 commit comments

Comments
 (0)