var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn x_47() {
  discard;
}

fn main_1() {
  loop {
    var x_30_phi : i32;
    var x_48_phi : bool;
    x_30_phi = 0;
    loop {
      var x_31 : i32;
      let x_30 : i32 = x_30_phi;
      x_48_phi = false;
      if ((x_30 < 10)) {
      } else {
        break;
      }
      let x_37 : f32 = gl_FragCoord.y;
      if ((x_37 < 0.0)) {
        let x_42 : f32 = gl_FragCoord.x;
        if ((x_42 < 0.0)) {
          x_48_phi = false;
          break;
        } else {
          continue;
        }
        continue;
      }
      x_47();
      x_48_phi = true;
      break;

      continuing {
        x_31 = (x_30 + 1);
        x_30_phi = x_31;
      }
    }
    let x_48 : bool = x_48_phi;
    if (x_48) {
      break;
    }
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
    break;
  }
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
