#include <metal_stdlib>

using namespace metal;
struct Communicators {
  float alice;
  float4 bob;
};
struct main_out {
  float x_1_1;
  float4 x_1_2;
  float4 x_2_1;
};
struct tint_symbol_1 {
  float x_1_1 [[user(locn9)]];
  float4 x_1_2 [[user(locn10)]];
  float4 x_2_1 [[position]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(thread Communicators* const tint_symbol_3, thread float4* const tint_symbol_4) {
  main_1();
  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_3)).alice, .x_1_2=(*(tint_symbol_3)).bob, .x_2_1=*(tint_symbol_4)};
  return tint_symbol_2;
}

vertex tint_symbol_1 tint_symbol() {
  thread Communicators tint_symbol_5 = {};
  thread float4 tint_symbol_6 = 0.0f;
  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5), &(tint_symbol_6));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_1_1 = inner_result.x_1_1;
  wrapper_result.x_1_2 = inner_result.x_1_2;
  wrapper_result.x_2_1 = inner_result.x_2_1;
  return wrapper_result;
}

