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, 2u>;
  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_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_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_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);
  (*(s)).a = x_103;
  let x_105 : i32 = (*(s)).a;
  if ((x_105 == 2)) {
    (*(s)).a = 9;
  }
  let x_109 : i32 = *(x);
  (*(s)).b = (x_109 + 1);
  let x_112 : i32 = *(x);
  (*(s)).c = (x_112 + 2);
  let x_115 : i32 = (*(s)).b;
  if ((x_115 == 2)) {
    (*(s)).b = 7;
  }
  let x_119 : i32 = (*(s)).a;
  let x_120 : i32 = (*(s)).b;
  let x_122 : i32 = (*(s)).c;
  return ((x_119 + x_120) + x_122);
}
