summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorJoey Gouly <joey.gouly@gmail.com>2013-12-31 15:47:49 +0000
committerJoey Gouly <joey.gouly@gmail.com>2013-12-31 15:47:49 +0000
commit4ba0f1e2d772691248a9842f8d962d0731e4ccfc (patch)
tree80606f4887147220679cec4afca9876ba48926f2 /clang
parentb771ffaf4c8d85420f7995482a620437ef60abbd (diff)
downloadbcm5719-llvm-4ba0f1e2d772691248a9842f8d962d0731e4ccfc.tar.gz
bcm5719-llvm-4ba0f1e2d772691248a9842f8d962d0731e4ccfc.zip
[OpenCL] Produce an error, instead of a warning, for sizeof(void) in OpenCL.
Patch by joey.gouly@arm.com llvm-svn: 198264
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Basic/DiagnosticSemaKinds.td2
-rw-r--r--clang/lib/Sema/SemaExpr.cpp7
-rw-r--r--clang/test/SemaOpenCL/sizeof.cl5
3 files changed, 12 insertions, 2 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 5a868cf25d4..bbef89d5b8b 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -4243,6 +4243,8 @@ def ext_sizeof_alignof_function_type : Extension<
def ext_sizeof_alignof_void_type : Extension<
"invalid application of '%select{sizeof|alignof|vec_step}0' to a void "
"type">, InGroup<PointerArith>;
+def err_opencl_sizeof_alignof_type : Error<
+ "invalid application of '%select{sizeof|alignof|vec_step}0' to a void type">;
def err_sizeof_alignof_incomplete_type : Error<
"invalid application of '%select{sizeof|alignof|vec_step}0' to an "
"incomplete type %1">;
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 3ead6ec984f..5fd65f53f44 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -3244,9 +3244,12 @@ static bool CheckExtensionTraitOperandType(Sema &S, QualType T,
return false;
}
- // Allow sizeof(void)/alignof(void) as an extension.
+ // Allow sizeof(void)/alignof(void) as an extension, unless in OpenCL where
+ // this is an error (OpenCL v1.1 s6.3.k)
if (T->isVoidType()) {
- S.Diag(Loc, diag::ext_sizeof_alignof_void_type) << TraitKind << ArgRange;
+ unsigned DiagID = S.LangOpts.OpenCL ? diag::err_opencl_sizeof_alignof_type
+ : diag::ext_sizeof_alignof_void_type;
+ S.Diag(Loc, DiagID) << TraitKind << ArgRange;
return false;
}
diff --git a/clang/test/SemaOpenCL/sizeof.cl b/clang/test/SemaOpenCL/sizeof.cl
new file mode 100644
index 00000000000..69fc4309ce2
--- /dev/null
+++ b/clang/test/SemaOpenCL/sizeof.cl
@@ -0,0 +1,5 @@
+// RUN: %clang_cc1 %s -verify -fsyntax-only
+
+kernel void test(global int* buf) {
+ buf[0] = sizeof(void); // expected-error {{invalid application of 'sizeof' to a void type}}
+}
OpenPOWER on IntegriCloud