#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, 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, thread 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;
}

