#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_4) {
  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_4) = x_21.field0;
  return;
}

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

