struct Array {
  values : array<i32, 2>;
};

struct buf0 {
  zero : i32;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_50 : bool = false;
  var x_15 : i32;
  var x_16 : i32;
  var param : Array;
  var x_19 : i32;
  var x_20_phi : i32;
  param = Array(array<i32, 2>(0, 0));
  x_50 = false;
  loop {
    var x_19_phi : i32;
    var x_63_phi : bool;
    loop {
      let x_17 : i32 = x_8.zero;
      let x_18 : i32 = param.values[x_17];
      if ((x_18 == 1)) {
        x_50 = true;
        x_15 = 1;
        x_19_phi = 1;
        x_63_phi = true;
        break;
      }
      x_19_phi = 0;
      x_63_phi = false;
      break;
    }
    x_19 = x_19_phi;
    let x_63 : bool = x_63_phi;
    x_20_phi = x_19;
    if (x_63) {
      break;
    }
    x_50 = true;
    x_15 = 1;
    x_20_phi = 1;
    break;
  }
  let x_20 : i32 = x_20_phi;
  x_16 = x_20;
  if ((x_20 == 1)) {
    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);
}

fn func_struct_Array_i1_2_1_(a : ptr<function, Array>) -> i32 {
  var x_70 : bool = false;
  var x_12 : i32;
  var x_13 : i32;
  var x_72_phi : bool;
  var x_14_phi : i32;
  x_72_phi = false;
  loop {
    var x_77 : bool;
    var x_77_phi : bool;
    var x_13_phi : i32;
    var x_87_phi : bool;
    let x_72 : bool = x_72_phi;
    x_77_phi = x_72;
    loop {
      x_77 = x_77_phi;
      let x_10 : i32 = x_8.zero;
      let x_11 : i32 = (*(a)).values[x_10];
      if ((x_11 == 1)) {
        x_70 = true;
        x_12 = 1;
        x_13_phi = 1;
        x_87_phi = true;
        break;
      }
      x_13_phi = 0;
      x_87_phi = x_77;
      break;

      continuing {
        x_77_phi = false;
      }
    }
    x_13 = x_13_phi;
    let x_87 : bool = x_87_phi;
    x_14_phi = x_13;
    if (x_87) {
      break;
    }
    x_70 = true;
    x_12 = 1;
    x_14_phi = 1;
    break;

    continuing {
      x_72_phi = false;
    }
  }
  let x_14 : i32 = x_14_phi;
  return x_14;
}
