#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 tint_private_vars_struct { uint i; }; struct S { int a; float4 b; float2x2 c; }; int idx1(thread tint_private_vars_struct* const tint_private_vars) { (*(tint_private_vars)).i = ((*(tint_private_vars)).i + 1u); return 1; } int idx2(thread tint_private_vars_struct* const tint_private_vars) { (*(tint_private_vars)).i = ((*(tint_private_vars)).i + 2u); return 1; } int idx3(thread tint_private_vars_struct* const tint_private_vars) { (*(tint_private_vars)).i = ((*(tint_private_vars)).i + 3u); return 1; } void foo(thread tint_private_vars_struct* const tint_private_vars) { tint_array a = tint_array{}; { int const tint_symbol_2 = idx1(tint_private_vars); 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_private_vars); if (!((a[tint_symbol_3] < 10.0f))) { break; } { } { int const tint_symbol_4 = idx3(tint_private_vars); int const tint_symbol_1_save = tint_symbol_4; a[tint_symbol_1_save] = (a[tint_symbol_1_save] + 1.0f); } } } }