Mercurial > hg > CbC > CbC_llvm
view clang/test/SemaSYCL/address-space-conversions.cpp @ 222:81f6424ef0e3 llvm-original
LLVM original branch
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 18 Jul 2021 22:10:01 +0900 |
parents | 79ff65ed7e25 |
children | c4bab56944e8 |
line wrap: on
line source
// RUN: %clang_cc1 -fsycl-is-device -verify -fsyntax-only %s void bar(int &Data) {} void bar2(int &Data) {} void bar(__attribute__((opencl_private)) int &Data) {} void foo(int *Data) {} void foo2(int *Data) {} void foo(__attribute__((opencl_private)) int *Data) {} 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}} template <typename T> void tmpl(T *t) {} void usages() { __attribute__((opencl_global)) int *GLOB; __attribute__((opencl_private)) int *PRIV; __attribute__((opencl_local)) int *LOC; int *NoAS; GLOB = PRIV; // expected-error {{assigning '__private int *' to '__global int *' changes address space of pointer}} GLOB = LOC; // expected-error {{assigning '__local int *' to '__global int *' changes address space of pointer}} PRIV = static_cast<__attribute__((opencl_private)) int *>(GLOB); // expected-error {{static_cast from '__global int *' to '__private int *' is not allowed}} PRIV = static_cast<__attribute__((opencl_private)) int *>(LOC); // expected-error {{static_cast from '__local int *' to '__private int *' is not allowed}} NoAS = GLOB + PRIV; // expected-error {{invalid operands to binary expression ('__global int *' and '__private int *')}} NoAS = GLOB + LOC; // expected-error {{invalid operands to binary expression ('__global int *' and '__local int *')}} NoAS += GLOB; // expected-error {{invalid operands to binary expression ('int *' and '__global int *')}} bar(*GLOB); bar2(*GLOB); bar(*PRIV); bar2(*PRIV); bar(*NoAS); bar2(*NoAS); bar(*LOC); bar2(*LOC); foo(GLOB); foo2(GLOB); foo(PRIV); foo2(PRIV); foo(NoAS); foo2(NoAS); foo(LOC); foo2(LOC); tmpl(GLOB); tmpl(PRIV); tmpl(NoAS); tmpl(LOC); // Implicit casts to named address space are disallowed baz(NoAS); // expected-error {{no matching function for call to 'baz'}} __attribute__((opencl_local)) int *l = NoAS; // expected-error {{cannot initialize a variable of type '__local int *' with an lvalue of type 'int *'}} (void)static_cast<int *>(GLOB); (void)static_cast<void *>(GLOB); int *i = GLOB; void *v = GLOB; (void)i; (void)v; __attribute__((opencl_global_host)) int *GLOB_HOST; bar(*GLOB_HOST); bar2(*GLOB_HOST); GLOB = GLOB_HOST; GLOB_HOST = GLOB; // expected-error {{assigning '__global int *' to '__global_host int *' changes address space of pointer}} GLOB_HOST = static_cast<__attribute__((opencl_global_host)) int *>(GLOB); // expected-error {{static_cast from '__global int *' to '__global_host int *' is not allowed}} __attribute__((opencl_global_device)) int *GLOB_DEVICE; bar(*GLOB_DEVICE); bar2(*GLOB_DEVICE); GLOB = GLOB_DEVICE; GLOB_DEVICE = GLOB; // expected-error {{assigning '__global int *' to '__global_device int *' changes address space of pointer}} GLOB_DEVICE = static_cast<__attribute__((opencl_global_device)) int *>(GLOB); // expected-error {{static_cast from '__global int *' to '__global_device int *' is not allowed}} }