type ArrayType = array<i32, 4>;

struct S {
  arr : array<i32, 4>,
};

fn foo() {
  let src : ArrayType = ArrayType();

  var dst : ArrayType;
  var dst_struct : S;
  var dst_array : array<ArrayType, 2>;
  let dst_ptr : ptr<function, ArrayType> = &dst;
  let dst_struct_ptr : ptr<function, S> = &dst_struct;
  let dst_array_ptr : ptr<function, array<ArrayType, 2>> = &dst_array;

  // Assign to struct.member.
  dst_struct.arr = src;

  // Assign to array[index].
  dst_array[1] = src;

  // Assign via pointers.
  *dst_ptr = src;
  (*dst_struct_ptr).arr = src;
  (*dst_array_ptr)[0] = src;
}
