1 // RUN: %clang_cc1 -fsycl-is-device -verify -fsyntax-only %s
4 void bar2(int &Data
) {}
5 void bar(__attribute__((opencl_private
)) int &Data
) {}
7 void foo2(int *Data
) {}
8 void foo(__attribute__((opencl_private
)) int *Data
) {}
9 void baz(__attribute__((opencl_private
)) int *Data
) {} // expected-note {{candidate function not viable: cannot pass pointer to generic address space as a pointer to address space '__private' in 1st argument}}
15 __attribute__((opencl_global
)) int *GLOB
;
16 __attribute__((opencl_private
)) int *PRIV
;
17 __attribute__((opencl_local
)) int *LOC
;
20 GLOB
= PRIV
; // expected-error {{assigning '__private int *' to '__global int *' changes address space of pointer}}
21 GLOB
= LOC
; // expected-error {{assigning '__local int *' to '__global int *' changes address space of pointer}}
22 PRIV
= static_cast<__attribute__((opencl_private
)) int *>(GLOB
); // expected-error {{static_cast from '__global int *' to '__private int *' is not allowed}}
23 PRIV
= static_cast<__attribute__((opencl_private
)) int *>(LOC
); // expected-error {{static_cast from '__local int *' to '__private int *' is not allowed}}
24 NoAS
= GLOB
+ PRIV
; // expected-error {{invalid operands to binary expression ('__global int *' and '__private int *')}}
25 NoAS
= GLOB
+ LOC
; // expected-error {{invalid operands to binary expression ('__global int *' and '__local int *')}}
26 NoAS
+= GLOB
; // expected-error {{invalid operands to binary expression ('int *' and '__global int *')}}
54 // Implicit casts to named address space are disallowed
55 baz(NoAS
); // expected-error {{no matching function for call to 'baz'}}
56 __attribute__((opencl_local
)) int *l
= NoAS
; // expected-error {{cannot initialize a variable of type '__local int *' with an lvalue of type 'int *'}}
58 // Explicit casts between disjoint address spaces are disallowed
59 GLOB
= (__attribute__((opencl_global
)) int *)PRIV
; // expected-error {{C-style cast from '__private int *' to '__global int *' converts between mismatching address spaces}}
61 (void)static_cast<int *>(GLOB
);
62 (void)static_cast<void *>(GLOB
);
68 __attribute__((opencl_global_host
)) int *GLOB_HOST
;
72 GLOB_HOST
= GLOB
; // expected-error {{assigning '__global int *' to '__global_host int *' changes address space of pointer}}
73 GLOB_HOST
= static_cast<__attribute__((opencl_global_host
)) int *>(GLOB
); // expected-error {{static_cast from '__global int *' to '__global_host int *' is not allowed}}
74 __attribute__((opencl_global_device
)) int *GLOB_DEVICE
;
78 GLOB_DEVICE
= GLOB
; // expected-error {{assigning '__global int *' to '__global_device int *' changes address space of pointer}}
79 GLOB_DEVICE
= static_cast<__attribute__((opencl_global_device
)) int *>(GLOB
); // expected-error {{static_cast from '__global int *' to '__global_device int *' is not allowed}}