#include <metal_stdlib>

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

float f_() {
  int i = 0;
  i = 1;
  while (true) {
    int const x_8 = i;
    if ((x_8 < 10)) {
    } else {
      break;
    }
    int const x_9 = i;
    if ((float(x_9) >= 1.0f)) {
      return 1.0f;
    } else {
      {
        int const x_10 = i;
        i = (x_10 + 1);
      }
      continue;
    }
    {
      int const x_10 = i;
      i = (x_10 + 1);
    }
  }
  return 1.0f;
}

void main_1(thread float4* const tint_symbol_4) {
  float4 c = 0.0f;
  int i_1 = 0;
  c = float4(1.0f, 0.0f, 0.0f, 1.0f);
  i_1 = 0;
  while (true) {
    int const x_12 = i_1;
    if ((x_12 < 1)) {
    } else {
      break;
    }
    {
      float const x_39 = f_();
      c.x = x_39;
      int const x_13 = i_1;
      i_1 = (x_13 + 1);
    }
  }
  float4 const x_41 = c;
  *(tint_symbol_4) = x_41;
  return;
}

fragment tint_symbol_1 tint_symbol() {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(&(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;
}

