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_52 : bool = false;
  var x_17 : i32;
  var x_18 : i32;
  var x_16 : array<i32, 2>;
  var param : Array;
  var x_20 : i32;
  var x_21_phi : i32;
  let x_12 : i32 = x_8.zero;
  let x_22 : array<i32, 2> = x_16;
  var x_23_1 : array<i32, 2> = x_22;
  x_23_1[0u] = x_12;
  let x_23 : array<i32, 2> = x_23_1;
  x_16 = x_23;
  let x_54 : array<i32, 2> = x_16;
  param = Array(x_54);
  x_52 = false;
  loop {
    var x_20_phi : i32;
    var x_67_phi : bool;
    loop {
      let x_19 : i32 = param.values[x_12];
      if ((x_19 == 0)) {
        x_52 = true;
        x_17 = 42;
        x_20_phi = 42;
        x_67_phi = true;
        break;
      }
      x_20_phi = 0;
      x_67_phi = false;
      break;
    }
    x_20 = x_20_phi;
    let x_67 : bool = x_67_phi;
    x_21_phi = x_20;
    if (x_67) {
      break;
    }
    x_52 = true;
    x_17 = 42;
    x_21_phi = 42;
    break;
  }
  let x_21 : i32 = x_21_phi;
  x_18 = x_21;
  if ((x_21 == 42)) {
    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_74 : bool = false;
  var x_13 : i32;
  var x_14 : i32;
  var x_76_phi : bool;
  var x_15_phi : i32;
  x_76_phi = false;
  loop {
    var x_81 : bool;
    var x_81_phi : bool;
    var x_14_phi : i32;
    var x_91_phi : bool;
    let x_76 : bool = x_76_phi;
    x_81_phi = x_76;
    loop {
      x_81 = x_81_phi;
      let x_10 : i32 = x_8.zero;
      let x_11 : i32 = (*(a)).values[x_10];
      if ((x_11 == 0)) {
        x_74 = true;
        x_13 = 42;
        x_14_phi = 42;
        x_91_phi = true;
        break;
      }
      x_14_phi = 0;
      x_91_phi = x_81;
      break;

      continuing {
        x_81_phi = false;
      }
    }
    x_14 = x_14_phi;
    let x_91 : bool = x_91_phi;
    x_15_phi = x_14;
    if (x_91) {
      break;
    }
    x_74 = true;
    x_13 = 42;
    x_15_phi = 42;
    break;

    continuing {
      x_76_phi = false;
    }
  }
  let x_15 : i32 = x_15_phi;
  return x_15;
}
