blob: 7026d1bc086d6ac248ab5007f39211b3c239b03b [file] [log] [blame]
Peter Collingbournea97b4432011-11-08 02:52:58 +00001// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only
2
3__constant int ci = 1;
4
5__kernel void foo(__global int *gip) {
6 __local int li;
7 __local int lj = 2; // expected-error {{'__local' variable cannot have an initializer}}
8
9 int *ip;
10 ip = gip; // expected-error {{assigning '__global int *' to 'int *' changes address space of pointer}}
11 ip = &li; // expected-error {{assigning '__local int *' to 'int *' changes address space of pointer}}
12 ip = &ci; // expected-error {{assigning '__constant int *' to 'int *' changes address space of pointer}}
13}
Stephen Hines651f13c2014-04-23 16:59:28 -070014
Stephen Hines176edba2014-12-01 14:53:08 -080015void explicit_cast(global int* g, local int* l, constant int* c, private int* p, const constant int *cc)
Stephen Hines651f13c2014-04-23 16:59:28 -070016{
17 g = (global int*) l; // expected-error {{casting '__local int *' to type '__global int *' changes address space of pointer}}
18 g = (global int*) c; // expected-error {{casting '__constant int *' to type '__global int *' changes address space of pointer}}
Stephen Hines176edba2014-12-01 14:53:08 -080019 g = (global int*) cc; // expected-error {{casting 'const __constant int *' to type '__global int *' changes address space of pointer}}
Stephen Hines651f13c2014-04-23 16:59:28 -070020 g = (global int*) p; // expected-error {{casting 'int *' to type '__global int *' changes address space of pointer}}
21
22 l = (local int*) g; // expected-error {{casting '__global int *' to type '__local int *' changes address space of pointer}}
23 l = (local int*) c; // expected-error {{casting '__constant int *' to type '__local int *' changes address space of pointer}}
Stephen Hines176edba2014-12-01 14:53:08 -080024 l = (local int*) cc; // expected-error {{casting 'const __constant int *' to type '__local int *' changes address space of pointer}}
Stephen Hines651f13c2014-04-23 16:59:28 -070025 l = (local int*) p; // expected-error {{casting 'int *' to type '__local int *' changes address space of pointer}}
26
27 c = (constant int*) g; // expected-error {{casting '__global int *' to type '__constant int *' changes address space of pointer}}
28 c = (constant int*) l; // expected-error {{casting '__local int *' to type '__constant int *' changes address space of pointer}}
29 c = (constant int*) p; // expected-error {{casting 'int *' to type '__constant int *' changes address space of pointer}}
30
31 p = (private int*) g; // expected-error {{casting '__global int *' to type 'int *' changes address space of pointer}}
32 p = (private int*) l; // expected-error {{casting '__local int *' to type 'int *' changes address space of pointer}}
33 p = (private int*) c; // expected-error {{casting '__constant int *' to type 'int *' changes address space of pointer}}
Stephen Hines176edba2014-12-01 14:53:08 -080034 p = (private int*) cc; // expected-error {{casting 'const __constant int *' to type 'int *' changes address space of pointer}}
Stephen Hines651f13c2014-04-23 16:59:28 -070035}
36
37void ok_explicit_casts(global int *g, global int* g2, local int* l, local int* l2, private int* p, private int* p2)
38{
39 g = (global int*) g2;
40 l = (local int*) l2;
41 p = (private int*) p2;
42}