#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ int zero;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

int func_i1_(thread int* const x) {
  int const x_45 = *(x);
  if ((x_45 == 10)) {
    discard_fragment();
  }
  int const x_49 = *(x);
  return x_49;
}

void main_1(constant buf0& x_9, thread float4* const tint_symbol_4) {
  int a = 0;
  int b = 0;
  int param = 0;
  int x_37 = 0;
  int x_35_phi = 0;
  a = 0;
  int const x_33 = x_9.zero;
  b = x_33;
  x_35_phi = x_33;
  while (true) {
    int const x_35 = x_35_phi;
    param = x_35;
    x_37 = func_i1_(&(param));
    a = x_37;
    int const x_36 = (x_35 + 1);
    b = x_36;
    x_35_phi = x_36;
    if ((x_36 < 4)) {
    } else {
      break;
    }
  }
  if ((x_37 == as_type<int>(3))) {
    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_9, &(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

