#include <metal_stdlib>

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

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

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

void no_uses() {
}

void outer(threadgroup int* const tint_symbol_4, threadgroup 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() {
  threadgroup int tint_symbol_6 = 0;
  tint_symbol_6 = 42;
  uses_a(&(tint_symbol_6));
  return;
}

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

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

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

