#include <metal_stdlib>

using namespace metal;
int tint_div(int lhs, int rhs) {
  return (lhs / select(rhs, 1, bool((rhs == 0) | bool((lhs == (-2147483647 - 1)) & (rhs == -1)))));
}

int tint_mod(int lhs, int rhs) {
  int const rhs_or_one = select(rhs, 1, bool((rhs == 0) | bool((lhs == (-2147483647 - 1)) & (rhs == -1))));
  if (any(((uint((lhs | rhs_or_one)) & 2147483648u) != 0u))) {
    return as_type<int>((as_type<uint>(lhs) - as_type<uint>(as_type<int>((as_type<uint>((lhs / rhs_or_one)) * as_type<uint>(rhs_or_one))))));
  } else {
    return (lhs % rhs_or_one);
  }
}

void foo(int maybe_zero) {
  thread int tint_symbol = 0;
  thread float tint_symbol_1 = 0.0f;
  tint_symbol = tint_div(tint_symbol, 0);
  tint_symbol = tint_mod(tint_symbol, 0);
  tint_symbol = tint_div(tint_symbol, maybe_zero);
  tint_symbol = tint_mod(tint_symbol, maybe_zero);
  tint_symbol_1 = (tint_symbol_1 / 0.0f);
  tint_symbol_1 = fmod(tint_symbol_1, 0.0f);
  tint_symbol_1 = (tint_symbol_1 / float(maybe_zero));
  tint_symbol_1 = fmod(tint_symbol_1, float(maybe_zero));
}

