#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

float func_(thread float4* const tint_symbol_5) {
  float x = 0.0f;
  x = 2.0f;
  float const x_35 = (*(tint_symbol_5)).x;
  if ((x_35 == 12.0f)) {
    float const x_40 = (*(tint_symbol_5)).y;
    if ((x_40 == 13.0f)) {
      float const x_44 = x;
      x = (x_44 + 1.0f);
    }
    float const x_46 = x;
    return x_46;
  }
  return 1.0f;
}

void main_1(thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
  if (false) {
    float const x_31 = func_(tint_symbol_6);
    *(tint_symbol_7) = float4(x_31, x_31, x_31, x_31);
  } else {
    *(tint_symbol_7) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  }
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_8 = 0.0f;
  thread float4 tint_symbol_9 = 0.0f;
  tint_symbol_8 = gl_FragCoord_param;
  main_1(&(tint_symbol_8), &(tint_symbol_9));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_9};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

