#include <metal_stdlib>

using namespace metal;
struct S {
  /* 0x0000 */ packed_float4 field0;
};
struct S_1 {
  float4 field0;
};
struct main_out {
  float4 x_3_1;
};
struct tint_symbol_1 {
  float4 x_3_1 [[color(0)]];
};

void main_1(constant S& x_5, thread float4* const tint_symbol_3) {
  float4 const x_20 = x_5.field0;
  S_1 x_21_1 = {.field0=float4(0.0f, 0.0f, 0.0f, 0.0f)};
  x_21_1.field0 = x_20;
  S_1 const x_21 = x_21_1;
  *(tint_symbol_3) = x_21.field0;
  return;
}

main_out tint_symbol_inner(constant S& x_5, thread float4* const tint_symbol_4) {
  main_1(x_5, tint_symbol_4);
  main_out const tint_symbol_2 = {.x_3_1=*(tint_symbol_4)};
  return tint_symbol_2;
}

fragment tint_symbol_1 tint_symbol(constant S& x_5 [[buffer(0)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_3_1 = inner_result.x_3_1;
  return wrapper_result;
}

