blob: bccad69007be75033e9fbf6dc806c119b7a943b9 [file] [log] [blame]
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);
^