#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];
};

void deref_const() {
  tint_array<int, 10> a = {};
  int b = a[0];
  a[0] = 42;
}

void no_deref_const() {
  tint_array<int, 10> a = {};
  int b = a[0];
  a[0] = 42;
}

void deref_let() {
  tint_array<int, 10> a = {};
  int const i = 0;
  int b = a[i];
  a[0] = 42;
}

void no_deref_let() {
  tint_array<int, 10> a = {};
  int const i = 0;
  int b = a[i];
  a[0] = 42;
}

void deref_var() {
  tint_array<int, 10> a = {};
  int i = 0;
  int b = a[i];
  a[0] = 42;
}

void no_deref_var() {
  tint_array<int, 10> a = {};
  int i = 0;
  int b = a[i];
  a[0] = 42;
}

kernel void tint_symbol() {
  deref_const();
  no_deref_const();
  deref_let();
  no_deref_let();
  deref_var();
  no_deref_var();
  return;
}

