#include <metal_stdlib>

using namespace metal;
struct tint_padded_array_element {
  /* 0x0000 */ int el;
  /* 0x0004 */ int8_t tint_pad[12];
};
struct tint_array_wrapper {
  /* 0x0000 */ tint_padded_array_element 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(constant S& src_uniform, device S& dst, device S& src_storage, device S_nested& dst_nested, tint_array_wrapper src_param, thread tint_array_wrapper* const tint_symbol_3, threadgroup tint_array_wrapper* const tint_symbol_4) {
  tint_array_wrapper src_function = {};
  tint_array_wrapper const tint_symbol_2 = {.arr={{.el=1}, {.el=2}, {.el=3}, {.el=3}}};
  dst.arr = tint_symbol_2;
  dst.arr = src_param;
  dst.arr = ret_arr();
  tint_array_wrapper const src_let = {.arr={}};
  dst.arr = src_let;
  dst.arr = src_function;
  dst.arr = *(tint_symbol_3);
  dst.arr = *(tint_symbol_4);
  dst.arr = ret_struct_arr().arr;
  dst.arr = src_uniform.arr;
  dst.arr = src_storage.arr;
  tint_array_wrapper_1 src_nested = {};
  dst_nested.arr = src_nested;
}

