struct S {
  a : i32;
  b : i32;
  c : i32;
};

struct buf0 {
  one : i32;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_43 : i32;
  var x_44 : bool = false;
  var arr : array<S, 2>;
  var param : S;
  var param_1 : i32;
  loop {
    var x_50 : i32;
    x_50 = x_10.one;
    arr[x_50].a = 2;
    let x_53 : i32 = arr[1].a;
    if ((x_53 < 1)) {
      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
      x_44 = true;
      break;
    } else {
      let x_60 : S = arr[1];
      param = x_60;
      param_1 = (2 + bitcast<i32>(x_50));
      let x_61 : i32 = param_1;
      let x_62 : ptr<function, i32> = &(param.a);
      let x_63 : S = param;
      var x_64_1 : S = x_63;
      x_64_1.a = x_61;
      let x_64 : S = x_64_1;
      param = x_64;
      let x_65 : S = param;
      if ((x_65.a == 2)) {
        let x_70 : S = param;
        var x_71_1 : S = x_70;
        x_71_1.a = 9;
        let x_71 : S = x_71_1;
        param = x_71;
      }
      let x_72 : i32 = param_1;
      let x_74 : ptr<function, i32> = &(param.b);
      let x_75 : S = param;
      var x_76_1 : S = x_75;
      x_76_1.b = (x_72 + 1);
      let x_76 : S = x_76_1;
      param = x_76;
      let x_77 : i32 = param_1;
      let x_79 : ptr<function, i32> = &(param.c);
      let x_80 : S = param;
      var x_81_1 : S = x_80;
      x_81_1.c = (x_77 + 2);
      let x_81 : S = x_81_1;
      param = x_81;
      let x_82 : S = param;
      if ((x_82.b == 2)) {
        let x_87 : S = param;
        var x_88_1 : S = x_87;
        x_88_1.b = 7;
        let x_88 : S = x_88_1;
        param = x_88;
      }
      let x_89 : S = param;
      let x_91 : S = param;
      let x_94 : S = param;
      x_43 = ((x_89.a + x_91.b) + x_94.c);
      let x_97 : i32 = x_43;
      if ((x_97 == 12)) {
        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);
      }
    }
    x_44 = true;
    break;
  }
  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_S_i1_i1_i11_i1_(s : ptr<function, S>, x : ptr<function, i32>) -> i32 {
  let x_103 : i32 = *(x);
  let x_104 : ptr<function, i32> = &((*(s)).a);
  *(x_104) = x_103;
  let x_105 : i32 = *(x_104);
  if ((x_105 == 2)) {
    *(x_104) = 9;
  }
  let x_109 : i32 = *(x);
  let x_111 : ptr<function, i32> = &((*(s)).b);
  *(x_111) = (x_109 + 1);
  let x_112 : i32 = *(x);
  let x_114 : ptr<function, i32> = &((*(s)).c);
  *(x_114) = (x_112 + 2);
  let x_115 : i32 = *(x_111);
  if ((x_115 == 2)) {
    *(x_111) = 7;
  }
  let x_119 : i32 = *(x_104);
  let x_120 : i32 = *(x_111);
  let x_122 : i32 = *(x_114);
  return ((x_119 + x_120) + x_122);
}
