#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper_0 {
  int array[4];
};
struct S {
  tint_array_wrapper_0 arr;
};
struct tint_array_wrapper_1 {
  tint_array_wrapper_0 array[2];
};

void foo() {
  tint_array_wrapper_0 const src = {};
  tint_array_wrapper_0 dst = {0};
  S dst_struct = {};
  tint_array_wrapper_1 dst_array = {{0}};
  thread tint_array_wrapper_0* const dst_ptr = &(dst);
  thread S* const dst_struct_ptr = &(dst_struct);
  thread tint_array_wrapper_1* const dst_array_ptr = &(dst_array);
  dst_struct.arr = src;
  dst_array.array[1] = src;
  *(dst_ptr) = src;
  (*(dst_struct_ptr)).arr = src;
  (*(dst_array_ptr)).array[0] = src;
}

