struct S {
  x : i32;
  y : i32;
};

struct buf0 {
  one : i32;
};

@group(0) @binding(0) var<uniform> x_10 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn func_struct_S_i1_i11_(arg : ptr<function, S>) {
  (*(arg)).y = 1;
  return;
}

fn main_1() {
  var a : f32;
  var b : array<S, 2>;
  var param : S;
  a = 5.0;
  loop {
    let x_43 : i32 = x_10.one;
    b[x_43].x = 1;
    let x_46 : i32 = b[1].x;
    if ((x_46 == 1)) {
      let x_51 : i32 = x_10.one;
      if ((x_51 == 1)) {
        break;
      }
      let x_56 : S = b[1];
      param = x_56;
      func_struct_S_i1_i11_(&(param));
      let x_58 : S = param;
      b[1] = x_58;
      let x_61 : i32 = b[1].y;
      a = f32(x_61);
    }
    a = 0.0;

    continuing {
      if (false) {
      } else {
        break;
      }
    }
  }
  let x_63 : f32 = a;
  if ((x_63 == 5.0)) {
    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);
}
