summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaOpenCL
diff options
context:
space:
mode:
authorJoey Gouly <joey.gouly@gmail.com>2014-01-14 12:47:29 +0000
committerJoey Gouly <joey.gouly@gmail.com>2014-01-14 12:47:29 +0000
commit8fc32f01dc5dcdf55152c7daac4e8c4cb511ccdb (patch)
tree77edcc72c05fc0a83194a915fe6c7d6960ea1fb2 /clang/test/SemaOpenCL
parent9d2e0df0493e4085c556abf5c5433ca06f43008d (diff)
downloadbcm5719-llvm-8fc32f01dc5dcdf55152c7daac4e8c4cb511ccdb.tar.gz
bcm5719-llvm-8fc32f01dc5dcdf55152c7daac4e8c4cb511ccdb.zip
[OpenCL] Disallow casts between address spaces.
llvm-svn: 199208
Diffstat (limited to 'clang/test/SemaOpenCL')
-rw-r--r--clang/test/SemaOpenCL/address-spaces.cl26
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/test/SemaOpenCL/address-spaces.cl b/clang/test/SemaOpenCL/address-spaces.cl
index 6ab10b3507f..b188ea4576f 100644
--- a/clang/test/SemaOpenCL/address-spaces.cl
+++ b/clang/test/SemaOpenCL/address-spaces.cl
@@ -11,3 +11,29 @@ __kernel void foo(__global int *gip) {
ip = &li; // expected-error {{assigning '__local int *' to 'int *' changes address space of pointer}}
ip = &ci; // expected-error {{assigning '__constant int *' to 'int *' changes address space of pointer}}
}
+
+void explicit_cast(global int* g, local int* l, constant int* c, private int* p)
+{
+ g = (global int*) l; // expected-error {{casting '__local int *' to type '__global int *' changes address space of pointer}}
+ g = (global int*) c; // expected-error {{casting '__constant int *' to type '__global int *' changes address space of pointer}}
+ g = (global int*) p; // expected-error {{casting 'int *' to type '__global int *' changes address space of pointer}}
+
+ l = (local int*) g; // expected-error {{casting '__global int *' to type '__local int *' changes address space of pointer}}
+ l = (local int*) c; // expected-error {{casting '__constant int *' to type '__local int *' changes address space of pointer}}
+ l = (local int*) p; // expected-error {{casting 'int *' to type '__local int *' changes address space of pointer}}
+
+ c = (constant int*) g; // expected-error {{casting '__global int *' to type '__constant int *' changes address space of pointer}}
+ c = (constant int*) l; // expected-error {{casting '__local int *' to type '__constant int *' changes address space of pointer}}
+ c = (constant int*) p; // expected-error {{casting 'int *' to type '__constant int *' changes address space of pointer}}
+
+ p = (private int*) g; // expected-error {{casting '__global int *' to type 'int *' changes address space of pointer}}
+ p = (private int*) l; // expected-error {{casting '__local int *' to type 'int *' changes address space of pointer}}
+ p = (private int*) c; // expected-error {{casting '__constant int *' to type 'int *' changes address space of pointer}}
+}
+
+void ok_explicit_casts(global int *g, global int* g2, local int* l, local int* l2, private int* p, private int* p2)
+{
+ g = (global int*) g2;
+ l = (local int*) l2;
+ p = (private int*) p2;
+}
OpenPOWER on IntegriCloud