• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
15void explicit_cast(global int* g, local int* l, constant int* c, private int* p)
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*) p;    // expected-error {{casting 'int *' to type '__global int *' changes address space of pointer}}
20
21  l = (local int*) g;     // expected-error {{casting '__global int *' to type '__local int *' changes address space of pointer}}
22  l = (local int*) c;     // expected-error {{casting '__constant int *' to type '__local int *' changes address space of pointer}}
23  l = (local int*) p;     // expected-error {{casting 'int *' to type '__local int *' changes address space of pointer}}
24
25  c = (constant int*) g;  // expected-error {{casting '__global int *' to type '__constant int *' changes address space of pointer}}
26  c = (constant int*) l;  // expected-error {{casting '__local int *' to type '__constant int *' changes address space of pointer}}
27  c = (constant int*) p;  // expected-error {{casting 'int *' to type '__constant int *' changes address space of pointer}}
28
29  p = (private int*) g;   // expected-error {{casting '__global int *' to type 'int *' changes address space of pointer}}
30  p = (private int*) l;   // expected-error {{casting '__local int *' to type 'int *' changes address space of pointer}}
31  p = (private int*) c;   // expected-error {{casting '__constant int *' to type 'int *' changes address space of pointer}}
32}
33
34void ok_explicit_casts(global int *g, global int* g2, local int* l, local int* l2, private int* p, private int* p2)
35{
36  g = (global int*) g2;
37  l = (local int*) l2;
38  p = (private int*) p2;
39}
40