#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 = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
      }
      continue;
    }
    {
      int const x_10 = i;
      i = as_type<int>((as_type<uint>(x_10) + as_type<uint>(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 = as_type<int>((as_type<uint>(x_13) + as_type<uint>(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;
}

