Improve error handling in clCreateKernel

return nullptr when kernel initialization fails

Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2021-05-20 17:04:15 +00:00
committed by Compute-Runtime-Automation
parent 84a0813dfa
commit d2ac316e47
2 changed files with 20 additions and 0 deletions

View File

@@ -38,6 +38,9 @@ class MultiDeviceKernel : public BaseObject<_cl_kernel> {
continue;
}
kernels[rootDeviceIndex] = Kernel::create<kernel_t, program_t>(program, *kernelInfos[rootDeviceIndex], *pDevice, errcodeRet);
if (!kernels[rootDeviceIndex]) {
return nullptr;
}
}
auto pMultiDeviceKernel = new multi_device_kernel_t(std::move(kernels), kernelInfos);

View File

@@ -3191,6 +3191,23 @@ TEST(KernelCreateTest, whenInitFailedThenReturnNull) {
EXPECT_EQ(nullptr, ret);
}
TEST(MultiDeviceKernelCreateTest, whenInitFailedThenReturnNullAndPropagateErrorCode) {
MockContext context;
auto pKernelInfo = std::make_unique<MockKernelInfo>();
pKernelInfo->kernelDescriptor.kernelAttributes.simdSize = 0;
KernelInfoContainer kernelInfos;
kernelInfos.push_back(pKernelInfo.get());
MockProgram program(&context, false, context.getDevices());
int32_t retVal = CL_SUCCESS;
auto pMultiDeviceKernel = MultiDeviceKernel::create<MockKernel>(&program, kernelInfos, &retVal);
EXPECT_EQ(nullptr, pMultiDeviceKernel);
EXPECT_EQ(CL_INVALID_KERNEL, retVal);
}
TEST(ArgTypeTraits, GivenDefaultInitializedArgTypeMetadataThenAddressSpaceIsGlobal) {
ArgTypeTraits metadata;
EXPECT_EQ(NEO::KernelArgMetadata::AddrGlobal, metadata.addressQualifier);