#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 nb_mod_f1_(thread float* const limit) {
  int x_injected_loop_counter = 0;
  int x_injected_loop_counter_1 = 0;
  float const x_37 = *(limit);
  if ((1.0f >= x_37)) {
    return 1.0f;
  }
  x_injected_loop_counter = 0;
  while (true) {
    bool const x_42 = (0 < 2);
    x_injected_loop_counter_1 = 0;
    while (true) {
      bool const x_47 = (0 < 1);
      return 1.0f;
    }
  }
  return 0.0f;
}

void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float param = 0.0f;
  float const x_34 = (*(tint_symbol_5)).x;
  param = x_34;
  float const x_35 = nb_mod_f1_(&(param));
  *(tint_symbol_6) = 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_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(&(tint_symbol_7), &(tint_symbol_8));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_8};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

