Home | History | Annotate | Download | only in SemaOpenCL
      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