On laptop with two graphics cards (Intel in processor + NVidia) where the Optimus technology is used, the Intel OpenCL ICD does not work when run with the 'optirun' program. The optirun program allows one to use the alternate (NVidia) graphic card. But, as Intel OpenCL ICD only use the processor for now, there is no reason why it cannot run, and, in any case, it should not crash.
A code such as
error = clGetPlatformInfo(platforms[i], CL_PLATFORM_EXTENSIONS, 0, NULL, ¶m_value_size_ret );
platform_vendor = (char *)malloc(param_value_size_ret);
clGetPlatformInfo(platforms[i], CL_PLATFORM_EXTENSIONS, param_value_size_ret, platform_vendor, NULL );
crashes when run with the Intel OpenCL plateform under optirun.
It means that the Intel OpenCL ICD cannot be loaded at all by a ICD loader that respects Kronos specification (check that the ICD declare the cl_khr_icd extension) : the program will crash (segmentation fault) at initialisation time. Note that ICD loaders from Intel, AMD and NVidia does not respect this specification and load any ICD even if the cl_khr_icd extension is not declared (ocl-icd checks it but, due to this bug, the check can be disabled by using the envvar OCL_ICD_ASSUME_ICD_EXTENSION).
Moreover, when run under optirun, Intel OpenCL clGetDeviceIDs function returns CL_DEVICE_NOT_FOUND. It probably means that something is not initialized correctly in the Intel ICD.
Do not hesitate to point me to a better place for such bug reports.