blob: 94f059d7de20bdac384ea138b1e81e3003381888 [file] [log] [blame]
#include <metal_stdlib>
using namespace metal;
struct S1 {
int a;
int b;
int c;
int d;
};
struct S2 {
int e;
S1 f;
};
struct S3 {
int g;
S1 h;
S2 i;
};
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 T {
tint_array<int, 2> a;
};
kernel void tint_symbol() {
int const x = 42;
S1 const empty = S1{};
S1 const nonempty = S1{.a=1, .b=2, .c=3, .d=4};
S1 const nonempty_with_expr = S1{.a=1, .b=x, .c=(x + 1), .d=nonempty.d};
S3 const nested_empty = S3{};
S3 const nested_nonempty = S3{.g=1, .h=S1{.a=2, .b=3, .c=4, .d=5}, .i=S2{.e=6, .f=S1{.a=7, .b=8, .c=9, .d=10}}};
S1 const v = S1{.a=2, .b=x, .c=(x + 1), .d=nested_nonempty.i.f.d};
S3 const nested_nonempty_with_expr = S3{.g=1, .h=v, .i=S2{.e=6, .f=nonempty}};
int const subexpr_empty = 0;
int const subexpr_nonempty = 2;
int const subexpr_nonempty_with_expr = S1{.a=1, .b=x, .c=(x + 1), .d=nonempty.d}.c;
S1 const subexpr_nested_empty = S1{};
S1 const subexpr_nested_nonempty = S1{.a=2, .b=3, .c=4, .d=5};
S1 const subexpr_nested_nonempty_with_expr = S2{.e=1, .f=S1{.a=2, .b=x, .c=(x + 1), .d=nested_nonempty.i.f.d}}.f;
tint_array<T, 2> const aosoa_empty = tint_array<T, 2>{};
tint_array<T, 2> const aosoa_nonempty = tint_array<T, 2>{T{.a=tint_array<int, 2>{1, 2}}, T{.a=tint_array<int, 2>{3, 4}}};
tint_array<T, 2> const aosoa_nonempty_with_expr = tint_array<T, 2>{T{.a=tint_array<int, 2>{1, (aosoa_nonempty[0].a[0] + 1)}}, aosoa_nonempty[1]};
}