#include <metal_stdlib>

using namespace metal;
struct VertexOutput {
  float4 pos;
  int loc0;
};
struct tint_symbol {
  int loc0 [[user(locn0)]] [[flat]];
  float4 pos [[position]];
};
struct tint_symbol_1 {
  int loc0 [[user(locn0)]] [[flat]];
  float4 pos [[position]];
};

VertexOutput foo(float x) {
  VertexOutput const tint_symbol_2 = {.pos=float4(x, x, x, 1.0f), .loc0=42};
  return tint_symbol_2;
}

VertexOutput vert_main1_inner() {
  return foo(0.5f);
}

vertex tint_symbol vert_main1() {
  VertexOutput const inner_result = vert_main1_inner();
  tint_symbol wrapper_result = {};
  wrapper_result.pos = inner_result.pos;
  wrapper_result.loc0 = inner_result.loc0;
  return wrapper_result;
}

VertexOutput vert_main2_inner() {
  return foo(0.25f);
}

vertex tint_symbol_1 vert_main2() {
  VertexOutput const inner_result_1 = vert_main2_inner();
  tint_symbol_1 wrapper_result_1 = {};
  wrapper_result_1.pos = inner_result_1.pos;
  wrapper_result_1.loc0 = inner_result_1.loc0;
  return wrapper_result_1;
}

