#include <metal_stdlib>

using namespace metal;
struct S {
};
struct tint_array_wrapper_0 {
  float array[4];
};

kernel void tint_symbol() {
  thread bool tint_symbol_4 = false;
  thread bool* const tint_symbol_3 = &(tint_symbol_4);
  thread int tint_symbol_6 = 0;
  thread int* const tint_symbol_5 = &(tint_symbol_6);
  thread uint tint_symbol_8 = 0u;
  thread uint* const tint_symbol_7 = &(tint_symbol_8);
  thread float tint_symbol_10 = 0.0f;
  thread float* const tint_symbol_9 = &(tint_symbol_10);
  thread int2 tint_symbol_12 = 0;
  thread int2* const tint_symbol_11 = &(tint_symbol_12);
  thread uint3 tint_symbol_14 = 0u;
  thread uint3* const tint_symbol_13 = &(tint_symbol_14);
  thread float4 tint_symbol_16 = 0.0f;
  thread float4* const tint_symbol_15 = &(tint_symbol_16);
  thread float2x3 tint_symbol_18 = float2x3(0.0f);
  thread float2x3* const tint_symbol_17 = &(tint_symbol_18);
  thread tint_array_wrapper_0 tint_symbol_20 = {0.0f};
  thread tint_array_wrapper_0* const tint_symbol_19 = &(tint_symbol_20);
  thread S tint_symbol_22 = {};
  thread S* const tint_symbol_21 = &(tint_symbol_22);
  *(tint_symbol_3) = bool();
  *(tint_symbol_5) = int();
  *(tint_symbol_7) = uint();
  *(tint_symbol_9) = float();
  *(tint_symbol_11) = int2();
  *(tint_symbol_13) = uint3();
  *(tint_symbol_15) = float4();
  *(tint_symbol_17) = float2x3();
  tint_array_wrapper_0 const tint_symbol_1 = {};
  *(tint_symbol_19) = tint_symbol_1;
  S const tint_symbol_2 = {};
  *(tint_symbol_21) = tint_symbol_2;
  return;
}

