#include <metal_stdlib>

using namespace metal;
void uses_a(thread int* const tint_symbol) {
  *(tint_symbol) = (*(tint_symbol) + 1);
}

void uses_b(thread int* const tint_symbol_1) {
  *(tint_symbol_1) = (*(tint_symbol_1) * 2);
}

void uses_a_and_b(thread int* const tint_symbol_2, thread int* const tint_symbol_3) {
  *(tint_symbol_2) = *(tint_symbol_3);
}

void no_uses() {
}

void outer(thread int* const tint_symbol_4, thread int* const tint_symbol_5) {
  *(tint_symbol_4) = 0;
  uses_a(tint_symbol_4);
  uses_a_and_b(tint_symbol_5, tint_symbol_4);
  uses_b(tint_symbol_5);
  no_uses();
}

kernel void main1() {
  thread int tint_symbol_6 = 0;
  tint_symbol_6 = 42;
  uses_a(&(tint_symbol_6));
  return;
}

kernel void main2() {
  thread int tint_symbol_7 = 0;
  tint_symbol_7 = 7;
  uses_b(&(tint_symbol_7));
  return;
}

kernel void main3() {
  thread int tint_symbol_8 = 0;
  thread int tint_symbol_9 = 0;
  outer(&(tint_symbol_8), &(tint_symbol_9));
  no_uses();
  return;
}

kernel void main4() {
  no_uses();
  return;
}

