[clang] a427390 - [OpenCL] Add support of __opencl_c_images feature macro
Anton Zabaznov via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 21 08:24:14 PDT 2021
Author: Anton Zabaznov
Date: 2021-06-21T18:24:07+03:00
New Revision: a4273905583559b613e1f23336978007af5849be
URL: https://github.com/llvm/llvm-project/commit/a4273905583559b613e1f23336978007af5849be
DIFF: https://github.com/llvm/llvm-project/commit/a4273905583559b613e1f23336978007af5849be.diff
LOG: [OpenCL] Add support of __opencl_c_images feature macro
Reviewed By: svenvh
Differential Revision: https://reviews.llvm.org/D103911
Added:
clang/test/SemaOpenCL/unsupported-image.cl
Modified:
clang/lib/Sema/SemaType.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index b0ed636665012..2434554ba4652 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -1721,11 +1721,25 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) {
if (Result->containsErrors())
declarator.setInvalidType();
- if (S.getLangOpts().OpenCL && Result->isOCLImage3dWOType() &&
- !S.getOpenCLOptions().isSupported("cl_khr_3d_image_writes", S.getLangOpts())) {
- S.Diag(DS.getTypeSpecTypeLoc(), diag::err_opencl_requires_extension)
- << 0 << Result << "cl_khr_3d_image_writes";
- declarator.setInvalidType();
+ if (S.getLangOpts().OpenCL) {
+ const auto &OpenCLOptions = S.getOpenCLOptions();
+ StringRef OptName;
+ // OpenCL C v3.0 s6.3.3 - OpenCL image types require __opencl_c_images
+ // support
+ if ((Result->isImageType() || Result->isSamplerT()) &&
+ (S.getLangOpts().OpenCLVersion >= 300 &&
+ !OpenCLOptions.isSupported("__opencl_c_images", S.getLangOpts())))
+ OptName = "__opencl_c_images";
+ else if (Result->isOCLImage3dWOType() &&
+ !OpenCLOptions.isSupported("cl_khr_3d_image_writes",
+ S.getLangOpts()))
+ OptName = "cl_khr_3d_image_writes";
+
+ if (!OptName.empty()) {
+ S.Diag(DS.getTypeSpecTypeLoc(), diag::err_opencl_requires_extension)
+ << 0 << Result << OptName;
+ declarator.setInvalidType();
+ }
}
bool IsFixedPointType = DS.getTypeSpecType() == DeclSpec::TST_accum ||
diff --git a/clang/test/SemaOpenCL/unsupported-image.cl b/clang/test/SemaOpenCL/unsupported-image.cl
new file mode 100644
index 0000000000000..3aed9c1f13199
--- /dev/null
+++ b/clang/test/SemaOpenCL/unsupported-image.cl
@@ -0,0 +1,61 @@
+// RUN: %clang_cc1 -triple spir-unknown-unknown -verify -cl-std=CL3.0 -cl-ext=-__opencl_c_images %s
+// RUN: %clang_cc1 -triple spir-unknown-unknown -verify -cl-std=CL3.0 -cl-ext=+__opencl_c_images %s
+
+#ifdef __opencl_c_images
+//expected-no-diagnostics
+#endif
+
+void test1(image1d_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image1d_t' requires __opencl_c_images support}}
+#endif
+
+void test2(image2d_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image2d_t' requires __opencl_c_images support}}
+#endif
+
+void test3(image1d_array_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image1d_array_t' requires __opencl_c_images support}}
+#endif
+
+void test4(image2d_array_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image2d_array_t' requires __opencl_c_images support}}
+#endif
+
+void test5(image2d_depth_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image2d_depth_t' requires __opencl_c_images support}}
+#endif
+
+void test6(image1d_buffer_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image1d_buffer_t' requires __opencl_c_images support}}
+#endif
+
+void test7(image2d_msaa_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image2d_msaa_t' requires __opencl_c_images support}}
+#endif
+
+void test8(image2d_array_msaa_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image2d_array_msaa_t' requires __opencl_c_images support}}
+#endif
+
+void test9(image2d_msaa_depth_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image2d_msaa_depth_t' requires __opencl_c_images support}}
+#endif
+
+void test10(image2d_array_msaa_depth_t i) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type '__read_only image2d_array_msaa_depth_t' requires __opencl_c_images support}}
+#endif
+
+void test11(sampler_t s) {}
+#if !defined(__opencl_c_images)
+// expected-error at -2{{use of type 'sampler_t' requires __opencl_c_images support}}
+#endif
More information about the cfe-commits
mailing list