#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[2];
};
struct Array {
  tint_array_wrapper values;
};
struct buf0 {
  /* 0x0000 */ int zero;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_8, thread float4* const tint_symbol_5) {
  bool x_52 = false;
  int x_17 = 0;
  int x_18 = 0;
  tint_array_wrapper x_16 = {};
  Array param = {};
  int x_20 = 0;
  int x_21_phi = 0;
  int const x_12 = x_8.zero;
  tint_array_wrapper const x_22 = x_16;
  tint_array_wrapper x_23_1 = x_22;
  x_23_1.arr[0u] = x_12;
  tint_array_wrapper const x_23 = x_23_1;
  x_16 = x_23;
  tint_array_wrapper const x_54 = x_16;
  Array const tint_symbol_3 = {.values=x_54};
  param = tint_symbol_3;
  x_52 = false;
  while (true) {
    int x_20_phi = 0;
    bool x_67_phi = false;
    while (true) {
      int const x_19 = param.values.arr[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;
    bool const x_67 = x_67_phi;
    x_21_phi = x_20;
    if (x_67) {
      break;
    }
    x_52 = true;
    x_17 = 42;
    x_21_phi = 42;
    break;
  }
  int const x_21 = x_21_phi;
  x_18 = x_21;
  if ((x_21 == 42)) {
    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
  thread float4 tint_symbol_6 = 0.0f;
  main_1(x_8, &(tint_symbol_6));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_6};
  tint_symbol_1 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_4;
}

int func_struct_Array_i1_2_1_(constant buf0& x_8, thread Array* const a) {
  bool x_74 = false;
  int x_13 = 0;
  int x_14 = 0;
  bool x_76_phi = false;
  int x_15_phi = 0;
  x_76_phi = false;
  while (true) {
    bool x_81 = false;
    bool x_81_phi = false;
    int x_14_phi = 0;
    bool x_91_phi = false;
    bool const x_76 = x_76_phi;
    x_81_phi = x_76;
    while (true) {
      x_81 = x_81_phi;
      int const x_10 = x_8.zero;
      int const x_11 = (*(a)).values.arr[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;
      {
        x_81_phi = false;
      }
    }
    x_14 = x_14_phi;
    bool const x_91 = x_91_phi;
    x_15_phi = x_14;
    if (x_91) {
      break;
    }
    x_74 = true;
    x_13 = 42;
    x_15_phi = 42;
    break;
    {
      x_76_phi = false;
    }
  }
  int const x_15 = x_15_phi;
  return x_15;
}

