#include <metal_stdlib>

using namespace metal;
struct tint_private_vars_struct {
  float2 v2f;
  int3 v3i;
  uint4 v4u;
  bool2 v2b;
};

void foo(thread tint_private_vars_struct* const tint_private_vars) {
  for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
    (*(tint_private_vars)).v2f[i] = 1.0f;
    (*(tint_private_vars)).v3i[i] = 1;
    (*(tint_private_vars)).v4u[i] = 1u;
    (*(tint_private_vars)).v2b[i] = true;
  }
}

kernel void tint_symbol() {
  thread tint_private_vars_struct tint_private_vars = {};
  for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
    foo(&(tint_private_vars));
  }
  return;
}

