diff --git a/loader/icd.c b/loader/icd.c index 6cb2b993..91e38583 100644 --- a/loader/icd.c +++ b/loader/icd.c @@ -159,7 +159,7 @@ void khrIcdVendorAdd(const char *libraryName) KHR_ICD_TRACE("found icd 2 object, but platform is missing clIcdSetPlatformDispatchDataKHR\n"); continue; } - if (KHR_ICD2_HAS_TAG(platforms[i]) && !((intptr_t)((platforms[i])->dispatch->clUnloadCompiler) == CL_ICD2_TAG_KHR)) + if (KHR_ICD2_HAS_TAG(platforms[i]) && !KHR_ICD2_HAS_TAG2(platforms[i])) { KHR_ICD_TRACE("found icd 2 object, but platform is missing tag in clUnloadCompiler\n"); continue; diff --git a/loader/icd_dispatch.h b/loader/icd_dispatch.h index 95d47bc6..bee016cf 100644 --- a/loader/icd_dispatch.h +++ b/loader/icd_dispatch.h @@ -73,8 +73,17 @@ struct KHRDisp struct _cl_icd_dispatch dispatch; }; +#if __CL_HAS_ANON_UNION__ +#define KHR_ICD2_HAS_TAG(object) \ +((object)->dispatch->clGetPlatformIDs_icd2_tag == CL_ICD2_TAG_KHR) +#define KHR_ICD2_HAS_TAG2(object) \ +((object)->dispatch->clUnloadCompiler_icd2_tag == CL_ICD2_TAG_KHR) +#else #define KHR_ICD2_HAS_TAG(object) \ (((intptr_t)((object)->dispatch->clGetPlatformIDs)) == CL_ICD2_TAG_KHR) +#define KHR_ICD2_HAS_TAG2(object) \ +(((intptr_t)((object)->dispatch->clUnloadCompiler)) == CL_ICD2_TAG_KHR) +#endif #define KHR_ICD2_DISPATCH(object) \ (KHR_ICD2_HAS_TAG(object) ? \