Author: Justas Janickas Date: 2021-09-15T10:03:47+01:00 New Revision: 3b9470a6c46d0ecdb586a5a1e9223ea0c832337c
URL: https://github.com/llvm/llvm-project/commit/3b9470a6c46d0ecdb586a5a1e9223ea0c832337c DIFF: https://github.com/llvm/llvm-project/commit/3b9470a6c46d0ecdb586a5a1e9223ea0c832337c.diff LOG: [OpenCL] Supports optional image types in C++ for OpenCL 2021 Adds support for a feature macro `__opencl_c_images` in C++ for OpenCL 2021 enabling a respective optional core feature from OpenCL 3.0. This change aims to achieve compatibility between C++ for OpenCL 2021 and OpenCL 3.0. Differential Revision: https://reviews.llvm.org/D109002 Added: Modified: clang/lib/Sema/SemaType.cpp clang/test/SemaOpenCL/unsupported-image.cl Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index dcf18d3b4ba3d..f7f428c1e6d8d 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -1732,7 +1732,12 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { 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 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { // 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 index 40772460e54d1..8db3f61b0146b 100644 --- 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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits