diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -1732,7 +1732,12 @@ if (S.getLangOpts().OpenCL) { const auto &OpenCLOptions = S.getOpenCLOptions(); + // FIXME: both variables IsOpenCLC30 and IsOpenCLC30Compatible should be + // unified into one when __opencl_c_3d_image_writes option is enabled in + // C++ for OpenCL 2021 bool IsOpenCLC30 = (S.getLangOpts().OpenCLVersion == 300); + bool IsOpenCLC30Compatible = + S.getLangOpts().getOpenCLCompatibleVersion() == 300; // OpenCL C v3.0 s6.3.3 - OpenCL image types require __opencl_c_images // support. // OpenCL C v3.0 s6.2.1 - OpenCL 3d image write types requires support @@ -1741,7 +1746,7 @@ // that support OpenCL 3.0, cl_khr_3d_image_writes must be returned when and // only when the optional feature is supported if ((Result->isImageType() || Result->isSamplerT()) && - (IsOpenCLC30 && + (IsOpenCLC30Compatible && !OpenCLOptions.isSupported("__opencl_c_images", S.getLangOpts()))) { S.Diag(DS.getTypeSpecTypeLoc(), diag::err_opencl_requires_extension) << 0 << Result << "__opencl_c_images"; diff --git a/clang/test/SemaOpenCL/unsupported-image.cl b/clang/test/SemaOpenCL/unsupported-image.cl --- a/clang/test/SemaOpenCL/unsupported-image.cl +++ b/clang/test/SemaOpenCL/unsupported-image.cl @@ -1,6 +1,8 @@ // RUN: %clang_cc1 -triple spir-unknown-unknown -verify -cl-std=CL3.0 -cl-ext=-__opencl_c_images,-__opencl_c_read_write_images,-cl_khr_3d_image_writes,-__opencl_c_3d_image_writes %s // RUN: %clang_cc1 -triple spir-unknown-unknown -verify -cl-std=CL3.0 -cl-ext=+__opencl_c_images,+__opencl_c_read_write_images,+cl_khr_3d_image_writes,+__opencl_c_3d_image_writes %s // RUN: %clang_cc1 -triple spir-unknown-unknown -verify -cl-std=CL3.0 -cl-ext=+__opencl_c_images,+__opencl_c_read_write_images,-cl_khr_3d_image_writes,-__opencl_c_3d_image_writes %s +// RUN: %clang_cc1 -triple spir-unknown-unknown -verify -cl-std=clc++2021 -cl-ext=-__opencl_c_images,-__opencl_c_read_write_images,-cl_khr_3d_image_writes,-__opencl_c_3d_image_writes %s +// RUN: %clang_cc1 -triple spir-unknown-unknown -verify -cl-std=clc++2021 -cl-ext=+__opencl_c_images %s #if defined(__opencl_c_images) && defined(__opencl_c_3d_image_writes) //expected-no-diagnostics