#include <metal_stdlib>

using namespace metal;
int f(int x, thread bool* const tint_symbol_5) {
  if ((x == 10)) {
    *(tint_symbol_5) = true;
    return int();
  }
  return x;
}

struct tint_symbol_2 {
  int3 x [[user(locn1)]] [[flat]];
};

struct tint_symbol_3 {
  int value [[color(2)]];
};

int tint_symbol_inner(int3 x, thread bool* const tint_symbol_6) {
  int y = x[0];
  while (true) {
    int const r = f(y, tint_symbol_6);
    if (*(tint_symbol_6)) {
      return int();
    }
    if ((r == 0)) {
      break;
    }
  }
  return y;
}

void tint_discard_func() {
  discard_fragment();
}

fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread bool tint_symbol_7 = false;
  int const inner_result = tint_symbol_inner(tint_symbol_1.x, &(tint_symbol_7));
  if (tint_symbol_7) {
    tint_discard_func();
    tint_symbol_3 const tint_symbol_4 = {};
    return tint_symbol_4;
  }
  tint_symbol_3 wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

