#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, threadgroup tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4, threadgroup tint_array_wrapper* const tint_symbol_5, const constant S* const tint_symbol_6, device S* const tint_symbol_7, threadgroup tint_array_wrapper_1* const tint_symbol_8) {
  tint_array_wrapper src_function = {};
  tint_array_wrapper const tint_symbol_2 = {.arr={int4(1), int4(2), int4(3), int4(3)}};
  *(tint_symbol_3) = tint_symbol_2;
  *(tint_symbol_3) = src_param;
  *(tint_symbol_3) = ret_arr();
  tint_array_wrapper const src_let = {.arr={}};
  *(tint_symbol_3) = src_let;
  *(tint_symbol_3) = src_function;
  *(tint_symbol_3) = *(tint_symbol_4);
  *(tint_symbol_3) = *(tint_symbol_5);
  *(tint_symbol_3) = ret_struct_arr().arr;
  *(tint_symbol_3) = (*(tint_symbol_6)).arr;
  *(tint_symbol_3) = (*(tint_symbol_7)).arr;
  tint_array_wrapper_1 src_nested = {};
  *(tint_symbol_8) = src_nested;
}

