[[block]]
struct buf0 {
  zero : i32;
};

[[group(0), binding(0)]] var<uniform> x_9 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn func_i1_(x : ptr<function, i32>) -> i32 {
  let x_45 : i32 = *(x);
  if ((x_45 == 10)) {
    discard;
  }
  let x_49 : i32 = *(x);
  return x_49;
}

fn main_1() {
  var a : i32;
  var b : i32;
  var param : i32;
  var x_37 : i32;
  var x_35_phi : i32;
  a = 0;
  let x_33 : i32 = x_9.zero;
  b = x_33;
  x_35_phi = x_33;
  loop {
    let x_35 : i32 = x_35_phi;
    param = x_35;
    x_37 = func_i1_(&(param));
    a = x_37;
    let x_36 : i32 = (x_35 + 1);
    b = x_36;
    x_35_phi = x_36;
    if ((x_36 < 4)) {
    } else {
      break;
    }
  }
  if ((x_37 == bitcast<i32>(3))) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  } else {
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  }
  return;
}

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

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
