Skip to content

Commit 279ef89

Browse files
authored
[SYCL] Fix crash for case when a device image has no kernels (#5624)
When a device image has no kernel a vector of KernelIDs is not allocated for it, so dereferencing pointer to it is not correct.
1 parent 8591036 commit 279ef89

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

sycl/source/detail/program_manager/program_manager.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1506,7 +1506,7 @@ ProgramManager::getSYCLDeviceImagesWithCompatibleState(
15061506
std::lock_guard<std::mutex> KernelIDsGuard(m_KernelIDsMutex);
15071507
KernelIDs = m_BinImg2KernelIDs[BinImage];
15081508
// If the image does not contain any non-service kernels we can skip it.
1509-
if (KernelIDs->empty())
1509+
if (!KernelIDs || KernelIDs->empty())
15101510
continue;
15111511
}
15121512

sycl/unittests/SYCL2020/KernelBundle.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,16 @@ generateDefaultImage(std::initializer_list<std::string> KernelNames,
7272
return Img;
7373
}
7474

75-
static sycl::unittest::PiImage Imgs[2] = {
75+
static sycl::unittest::PiImage Imgs[3] = {
7676
generateDefaultImage({"TestKernel"}, PI_DEVICE_BINARY_TYPE_SPIRV,
7777
__SYCL_PI_DEVICE_BINARY_TARGET_SPIRV64),
7878
generateDefaultImage({"TestKernelExeOnly"}, PI_DEVICE_BINARY_TYPE_NATIVE,
79+
__SYCL_PI_DEVICE_BINARY_TARGET_SPIRV64_X86_64),
80+
// A device image without entires
81+
generateDefaultImage({},
82+
PI_DEVICE_BINARY_TYPE_NATIVE,
7983
__SYCL_PI_DEVICE_BINARY_TARGET_SPIRV64_X86_64)};
80-
static sycl::unittest::PiImageArray<2> ImgArray{Imgs};
84+
static sycl::unittest::PiImageArray<3> ImgArray{Imgs};
8185

8286
TEST(KernelBundle, GetKernelBundleFromKernel) {
8387
sycl::platform Plt{sycl::default_selector()};

0 commit comments

Comments
 (0)