From 5e16ee063283e193d279e50fb1fe407329dbad21 Mon Sep 17 00:00:00 2001 From: Joey Gouly <joey.gouly@gmail.com> Date: Mon, 19 May 2014 14:41:38 +0000 Subject: [PATCH] [OpenCL] Reject reqd_work_group_size(X, Y, Z) where X, Y or Z == 0. Patch by Pedro Ferreira! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209127 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticSemaKinds.td | 2 ++ lib/Sema/SemaDeclAttr.cpp | 11 +++++++++-- test/SemaOpenCL/invalid-kernel-attrs.cl | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 40d92d09531..d6d0d0b3c85 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -2002,6 +2002,8 @@ def warn_concatenated_nsarray_literal : Warning< InGroup<ObjCStringConcatenation>; def note_objc_literal_comparison_isequal : Note< "use 'isEqual:' instead">; +def err_attribute_argument_is_zero : Error< + "%0 attribute must be greater than 0">; let CategoryName = "Cocoa API Issue" in { def warn_objc_redundant_literal_use : Warning< diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 9caf9189b9b..2e97a8aa9d4 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -2180,9 +2180,16 @@ template <typename WorkGroupAttr> static void handleWorkGroupSize(Sema &S, Decl *D, const AttributeList &Attr) { uint32_t WGSize[3]; - for (unsigned i = 0; i < 3; ++i) - if (!checkUInt32Argument(S, Attr, Attr.getArgAsExpr(i), WGSize[i], i)) + for (unsigned i = 0; i < 3; ++i) { + const Expr *E = Attr.getArgAsExpr(i); + if (!checkUInt32Argument(S, Attr, E, WGSize[i], i)) return; + if (WGSize[i] == 0) { + S.Diag(Attr.getLoc(), diag::err_attribute_argument_is_zero) + << Attr.getName() << E->getSourceRange(); + return; + } + } WorkGroupAttr *Existing = D->getAttr<WorkGroupAttr>(); if (Existing && !(Existing->getXDim() == WGSize[0] && diff --git a/test/SemaOpenCL/invalid-kernel-attrs.cl b/test/SemaOpenCL/invalid-kernel-attrs.cl index f766ade0587..4b4fdf79e3d 100644 --- a/test/SemaOpenCL/invalid-kernel-attrs.cl +++ b/test/SemaOpenCL/invalid-kernel-attrs.cl @@ -31,3 +31,7 @@ void f_kernel_image2d_t( kernel image2d_t image ) { // expected-error {{'kernel' read_only int i; // expected-error {{'read_only' attribute only applies to parameters}} __write_only int j; // expected-error {{'__write_only' attribute only applies to parameters}} } + +kernel __attribute__((reqd_work_group_size(1,2,0))) void kernel11(){} // expected-error {{'reqd_work_group_size' attribute must be greater than 0}} +kernel __attribute__((reqd_work_group_size(1,0,2))) void kernel12(){} // expected-error {{'reqd_work_group_size' attribute must be greater than 0}} +kernel __attribute__((reqd_work_group_size(0,1,2))) void kernel13(){} // expected-error {{'reqd_work_group_size' attribute must be greater than 0}} -- GitLab