#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 {
  /* 0x0000 */ int arr[2];
};
struct tint_array_wrapper_2 {
  /* 0x0000 */ tint_array_wrapper_3 arr[3];
};
struct tint_array_wrapper_1 {
  /* 0x0000 */ tint_array_wrapper_2 arr[4];
};
struct S_nested {
  /* 0x0000 */ tint_array_wrapper_1 arr;
};

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

