Skip to content

Commit e681131

Browse files
kusmavladimirlaz
authored andcommitted
[SYCL] Do not call unsupported function
This degrades the error-mode from a SIGSEGV to a runtime-error when running with an incompatible OpenCL implementation. Signed-off-by: Erik Faye-Lund <[email protected]>
1 parent 8cdf658 commit e681131

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

sycl/source/detail/program_manager/program_manager.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ static cl_program createSpirvProgram(const cl_context Context,
8282
return ClProgram;
8383
}
8484

85-
static cl_program createProgram(cl_context Context,
85+
static cl_program createProgram(const platform &Platform,
86+
cl_context Context,
8687
const vector_class<char> &DeviceProg) {
8788
cl_program Program = nullptr;
8889
int32_t SpirvMagic = 0;
@@ -93,7 +94,13 @@ static cl_program createProgram(cl_context Context,
9394
(char*)&SpirvMagic);
9495

9596
if (SpirvMagic == ValidSpirvMagic) {
96-
Program = createSpirvProgram(Context, DeviceProg);
97+
if (Platform.has_extension("cl_khr_il_program") ||
98+
Platform.get_info<info::platform::version>().find(" 2.1") !=
99+
string_class::npos) {
100+
Program = createSpirvProgram(Context, DeviceProg);
101+
} else {
102+
return nullptr;
103+
}
97104
}
98105
}
99106

@@ -111,7 +118,8 @@ cl_program ProgramManager::getBuiltOpenCLProgram(const context &Context) {
111118
vector_class<char> DeviceProg = getSpirvSource();
112119

113120
cl_context ClContext = Context.get();
114-
ClProgram = createProgram(ClContext, DeviceProg);
121+
const platform &Platform = Context.get_platform();
122+
ClProgram = createProgram(Platform, ClContext, DeviceProg);
115123
clReleaseContext(ClContext);
116124

117125
build(ClProgram);

0 commit comments

Comments
 (0)