#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  uint arr[2];
};
struct S {
  uint field0;
  float field1;
  tint_array_wrapper field2;
};

void main_1(thread bool* const tint_symbol_1, thread bool* const tint_symbol_2) {
  while (true) {
    uint x_2_phi = 0u;
    uint x_3_phi = 0u;
    bool const x_101 = *(tint_symbol_1);
    bool const x_102 = *(tint_symbol_2);
    x_2_phi = 0u;
    x_3_phi = 1u;
    if (x_101) {
      break;
    }
    while (true) {
      uint x_4 = 0u;
      uint const x_2 = x_2_phi;
      uint const x_3 = x_3_phi;
      if (x_102) {
        break;
      }
      {
        x_4 = (x_2 + 1u);
        x_2_phi = x_4;
        x_3_phi = x_3;
      }
    }
  }
  return;
}

fragment void tint_symbol() {
  thread bool tint_symbol_3 = false;
  thread bool tint_symbol_4 = false;
  main_1(&(tint_symbol_3), &(tint_symbol_4));
  return;
}

