1 // 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 } 14 15 void explicit_cast(global int* g, local int* l, constant int* c, private int* p, const constant int *cc) 16 { 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}} 19 g = (global int*) cc; // expected-error {{casting 'const __constant int *' to type '__global int *' changes address space of pointer}} 20 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}} 24 l = (local int*) cc; // expected-error {{casting 'const __constant int *' to type '__local int *' changes address space of pointer}} 25 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}} 34 p = (private int*) cc; // expected-error {{casting 'const __constant int *' to type 'int *' changes address space of pointer}} 35 } 36 37 void 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 } 43