#include using namespace metal; template 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 S { int a; float4 b; float2x2 c; }; int idx1(thread uint* const tint_symbol_5) { *(tint_symbol_5) = (*(tint_symbol_5) + 1u); return 1; } int idx2(thread uint* const tint_symbol_6) { *(tint_symbol_6) = (*(tint_symbol_6) + 2u); return 1; } int idx3(thread uint* const tint_symbol_7) { *(tint_symbol_7) = (*(tint_symbol_7) + 3u); return 1; } void foo(thread uint* const tint_symbol_8) { tint_array a = tint_array{}; { int const tint_symbol_2 = idx1(tint_symbol_8); int const tint_symbol_save = tint_symbol_2; a[tint_symbol_save] = (a[tint_symbol_save] * 2.0f); while (true) { int const tint_symbol_3 = idx2(tint_symbol_8); if (!((a[tint_symbol_3] < 10.0f))) { break; } { } { int const tint_symbol_4 = idx3(tint_symbol_8); int const tint_symbol_1_save = tint_symbol_4; a[tint_symbol_1_save] = (a[tint_symbol_1_save] + 1.0f); } } } }