@@ -371,6 +371,62 @@ bool test_5(queue Queue) {
371371 return PassA && PassB;
372372}
373373
374+ constexpr int TestArrSize = 3 ;
375+
376+ template <int ArrSize>
377+ struct KArgWithPtrArray {
378+ int *data[ArrSize];
379+ int start[ArrSize];
380+ int end[ArrSize];
381+ constexpr int getArrSize () { return ArrSize; }
382+ };
383+
384+ template <int ArrSize>
385+ SYCL_EXT_ONEAPI_FUNCTION_PROPERTY (
386+ (ext::oneapi::experimental::single_task_kernel))
387+ void ff_6(KArgWithPtrArray<ArrSize> KArg) {
388+ for (int j = 0 ; j < ArrSize; j++)
389+ for (int i = KArg.start [j]; i <= KArg.end [j]; i++)
390+ KArg.data [j][i] = KArg.start [j] + KArg.end [j];
391+ }
392+
393+ template void ff_6 (KArgWithPtrArray<TestArrSize> KArg);
394+
395+ bool test_6 (queue Queue) {
396+ constexpr int Range = 10 ;
397+ KArgWithPtrArray<TestArrSize> KArg;
398+ for (int i = 0 ; i < TestArrSize; ++i) {
399+ KArg.data [i] = malloc_shared<int >(Range, Queue);
400+ memset (KArg.data [i], 0 , Range * sizeof (int ));
401+ KArg.start [i]= 3 ;
402+ KArg.end [i] = 5 ;
403+ }
404+ int Result[Range] = {0 , 0 , 0 , 8 , 8 , 8 , 0 , 0 , 0 , 0 };
405+ range<1 > R1{Range};
406+
407+ bool Pass = true ;
408+ #ifndef __SYCL_DEVICE_ONLY__
409+ kernel_bundle Bundle =
410+ get_kernel_bundle<bundle_state::executable>(Queue.get_context ());
411+ kernel_id Kernel_id = ext::oneapi::experimental::get_kernel_id<(
412+ void (*)(KArgWithPtrArray<TestArrSize>))ff_6<TestArrSize>>();
413+ kernel Kernel = Bundle.get_kernel (Kernel_id);
414+ Queue.submit ([&](handler &Handler) {
415+ Handler.set_arg (0 , KArg);
416+ Handler.single_task (Kernel);
417+ });
418+ Queue.wait ();
419+ for (int i = 0 ; i < TestArrSize; ++i) {
420+ Pass &= checkUSM (KArg.data [i], Range, Result);
421+ std::cout << " Test 6, array: " << i << (Pass ? " PASS" : " FAIL" )
422+ << std::endl;
423+ free (KArg.data [i], Queue);
424+ }
425+
426+ #endif
427+ return Pass;
428+ }
429+
374430int main () {
375431 queue Queue;
376432
@@ -381,6 +437,7 @@ int main() {
381437 Pass &= test_3 (Queue);
382438 Pass &= test_4 (Queue);
383439 Pass &= test_5 (Queue);
440+ Pass &= test_6 (Queue);
384441
385442 return Pass ? 0 : 1 ;
386443}
0 commit comments