| 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; |
| }; |
| |
| tint_array<int, 4> func(thread tint_array<int, 4>* const pointer) { |
| return pointer; |
| } |
| kernel void tint_symbol() { |
| str F = {}; |
| tint_array<int, 4> const r = func(F.arr); |
| } |
| program_source:20: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:32: error: no matching function for call to 'func' |
| tint_array<int, 4> const r = func(F.arr); |
| ^~~~ |
| program_source:19:20: note: candidate function not viable: no known conversion from 'tint_array<int, 4>' to 'tint_array<int, 4> *const' for 1st argument; take the address of the argument with & |
| tint_array<int, 4> func(thread tint_array<int, 4>* const pointer) { |
| ^ |
| |