#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  /* 0x0000 */ int4 arr[4];
};
struct S {
  /* 0x0000 */ tint_array_wrapper arr;
};
struct tint_array_wrapper_3 {
  int arr[2];
};
struct tint_array_wrapper_2 {
  tint_array_wrapper_3 arr[3];
};
struct tint_array_wrapper_1 {
  tint_array_wrapper_2 arr[4];
};

tint_array_wrapper ret_arr() {
  tint_array_wrapper const tint_symbol = {.arr={}};
  return tint_symbol;
}

S ret_struct_arr() {
  S const tint_symbol_1 = {};
  return tint_symbol_1;
}

void foo(tint_array_wrapper src_param, thread tint_array_wrapper* const tint_symbol_3, threadgroup tint_array_wrapper* const tint_symbol_4, const constant S* const tint_symbol_5, device S* const tint_symbol_6) {
  tint_array_wrapper src_function = {};
  tint_array_wrapper dst = {};
  tint_array_wrapper const tint_symbol_2 = {.arr={int4(1), int4(2), int4(3), int4(3)}};
  dst = tint_symbol_2;
  dst = src_param;
  dst = ret_arr();
  tint_array_wrapper const src_let = {.arr={}};
  dst = src_let;
  dst = src_function;
  dst = *(tint_symbol_3);
  dst = *(tint_symbol_4);
  dst = ret_struct_arr().arr;
  dst = (*(tint_symbol_5)).arr;
  dst = (*(tint_symbol_6)).arr;
  tint_array_wrapper_1 dst_nested = {};
  tint_array_wrapper_1 src_nested = {};
  dst_nested = src_nested;
}

