#include <metal_stdlib>
using namespace metal;
struct Inner {
  float scalar_f32;
  float3 vec3_f32;
  float2x4 mat2x4_f32;
};
struct S {
  Inner inner;
};
struct tint_module_vars_struct {
  const device S* in;
  device S* out;
};

void tint_store_and_preserve_padding(device Inner* const target, Inner value_param) {
  (*target).scalar_f32 = value_param.scalar_f32;
  (*target).vec3_f32 = value_param.vec3_f32;
  (*target).mat2x4_f32 = value_param.mat2x4_f32;
}
void tint_store_and_preserve_padding(device S* const target, S value_param) {
  tint_store_and_preserve_padding((&(*target).inner), value_param.inner);
}
kernel void tint_symbol(const device S* in [[buffer(0)]], device S* out [[buffer(1)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.in=in, .out=out};
  S const t = (*tint_module_vars.in);
  tint_store_and_preserve_padding(tint_module_vars.out, t);
}
