| SKIP: FAILED |
| |
| #include <metal_stdlib> |
| using namespace metal; |
| template<typename T, size_t N> |
| struct tint_array { |
| const constant T& operator[](size_t i) const constant { return elements[i]; } |
| device T& operator[](size_t i) device { return elements[i]; } |
| const device T& operator[](size_t i) const device { return elements[i]; } |
| thread T& operator[](size_t i) thread { return elements[i]; } |
| const thread T& operator[](size_t i) const thread { return elements[i]; } |
| threadgroup T& operator[](size_t i) threadgroup { return elements[i]; } |
| const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; } |
| T elements[N]; |
| }; |
| |
| struct str { |
| tint_array<int, 4> arr; |
| }; |
| |
| thread str P = {}; |
| tint_array<int, 4> func(thread tint_array<int, 4>* const pointer) { |
| return pointer; |
| } |
| kernel void tint_symbol() { |
| tint_array<int, 4> const r = func(P.arr); |
| } |
| program_source:19:12: error: program scope variable must reside in constant address space |
| thread str P = {}; |
| ^ |
| program_source:21:10: error: no viable conversion from returned value of type 'tint_array<int, 4> *const' to function return type 'tint_array<int, 4>' |
| return pointer; |
| ^~~~~~~ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const tint_array<int, 4> &' for 1st argument; dereference the argument with * |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const tint_array<int, 4> &' for 1st argument; dereference the argument with * |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const tint_array<int, 4> &' for 1st argument; dereference the argument with * |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const device tint_array<int, 4> &' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const threadgroup tint_array<int, 4> &' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const constant tint_array<int, 4> &' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const device tint_array<int, 4> &' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const threadgroup tint_array<int, 4> &' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const constant tint_array<int, 4> &' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const constant tint_array<int, 4> &' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'tint_array<int, 4> &&' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'device tint_array<int, 4> &&' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'threadgroup tint_array<int, 4> &&' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'tint_array<int, 4> &&' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'device tint_array<int, 4> &&' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'threadgroup tint_array<int, 4> &&' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'tint_array<int, 4> &&' for 1st argument |
| struct tint_array { |
| ^ |
| program_source:24:28: warning: unused variable 'r' [-Wunused-variable] |
| tint_array<int, 4> const r = func(P.arr); |
| ^ |
| |