#include <metal_stdlib>

using namespace metal;
struct VertexOutputs {
  float4 position;
};

struct tint_symbol_1 {
  float4 position [[position]];
};

VertexOutputs tint_symbol_inner() {
  VertexOutputs const tint_symbol_2 = VertexOutputs{.position=float4(1.0f, 2.0f, 3.0f, 4.0f)};
  return tint_symbol_2;
}

vertex tint_symbol_1 tint_symbol() {
  VertexOutputs const inner_result = tint_symbol_inner();
  tint_symbol_1 wrapper_result = {};
  wrapper_result.position = inner_result.position;
  return wrapper_result;
}

