writer/hlsl: Use the WrapArraysInStructs transform

Fixes issues with using arrays as function return types.

Fixed: tint:848
Change-Id: Iee8af0f2cea9d19e448176446c6599be2bd32316
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/54321
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/test/array/assign_to_workgroup_var.wgsl.expected.hlsl b/test/array/assign_to_workgroup_var.wgsl.expected.hlsl
index 9f61247..0a4904b 100644
--- a/test/array/assign_to_workgroup_var.wgsl.expected.hlsl
+++ b/test/array/assign_to_workgroup_var.wgsl.expected.hlsl
@@ -1,44 +1,55 @@
-SKIP: FAILED
-
-
-
-Validation Failure:
 [numthreads(1, 1, 1)]
 void unused_entry_point() {
   return;
 }
 
-struct S {
+struct tint_array_wrapper {
   int arr[4];
 };
+struct S {
+  tint_array_wrapper arr;
+};
 
-int[4] tint_symbol_2(RWByteAddressBuffer buffer, uint offset) {
-  const int tint_symbol_3[4] = {asint(buffer.Load((offset + 0u))), asint(buffer.Load((offset + 16u))), asint(buffer.Load((offset + 32u))), asint(buffer.Load((offset + 48u)))};
+tint_array_wrapper tint_symbol_2(RWByteAddressBuffer buffer, uint offset) {
+  const tint_array_wrapper tint_symbol_3 = {{asint(buffer.Load((offset + 0u))), asint(buffer.Load((offset + 16u))), asint(buffer.Load((offset + 32u))), asint(buffer.Load((offset + 48u)))}};
   return tint_symbol_3;
 }
 
-static int src_private[4];
-groupshared int src_workgroup[4];
+static tint_array_wrapper src_private;
+groupshared tint_array_wrapper src_workgroup;
 ConstantBuffer<S> src_uniform : register(b0, space0);
 RWByteAddressBuffer src_storage : register(u1, space0);
-groupshared int tint_symbol[4];
-groupshared int dst_nested[4][3][2];
+groupshared tint_array_wrapper tint_symbol;
 
-int[4] ret_arr() {
-  const int tint_symbol_4[4] = {0, 0, 0, 0};
+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];
+};
+
+groupshared tint_array_wrapper_1 dst_nested;
+
+tint_array_wrapper ret_arr() {
+  const tint_array_wrapper tint_symbol_4 = {{0, 0, 0, 0}};
   return tint_symbol_4;
 }
+
 S ret_struct_arr() {
-  const S tint_symbol_5 = {{0, 0, 0, 0}};
+  const S tint_symbol_5 = {{{0, 0, 0, 0}}};
   return tint_symbol_5;
 }
-void foo(int src_param[4]) {
-  int src_function[4] = {0, 0, 0, 0};
-  const int tint_symbol_6[4] = {1, 2, 3, 3};
+
+void foo(tint_array_wrapper src_param) {
+  tint_array_wrapper src_function = {{0, 0, 0, 0}};
+  const tint_array_wrapper tint_symbol_6 = {{1, 2, 3, 3}};
   tint_symbol = tint_symbol_6;
   tint_symbol = src_param;
   tint_symbol = ret_arr();
-  const int src_let[4] = {0, 0, 0, 0};
+  const tint_array_wrapper src_let = {{0, 0, 0, 0}};
   tint_symbol = src_let;
   tint_symbol = src_function;
   tint_symbol = src_private;
@@ -46,16 +57,6 @@
   tint_symbol = ret_struct_arr().arr;
   tint_symbol = src_uniform.arr;
   tint_symbol = tint_symbol_2(src_storage, 0u);
-  int src_nested[4][3][2] = {{{0, 0}, {0, 0}, {0, 0}}, {{0, 0}, {0, 0}, {0, 0}}, {{0, 0}, {0, 0}, {0, 0}}, {{0, 0}, {0, 0}, {0, 0}}};
+  tint_array_wrapper_1 src_nested = {{{{{{0, 0}}, {{0, 0}}, {{0, 0}}}}, {{{{0, 0}}, {{0, 0}}, {{0, 0}}}}, {{{{0, 0}}, {{0, 0}}, {{0, 0}}}}, {{{{0, 0}}, {{0, 0}}, {{0, 0}}}}}};
   dst_nested = src_nested;
 }
-
-tint_atjMoG:10:62: error: brackets are not allowed here; to declare an array, place the brackets after the name
-int[4] tint_symbol_2(RWByteAddressBuffer buffer, uint offset) {
-   ~~~                                                       ^
-                                                             [4]
-tint_atjMoG:22:17: error: brackets are not allowed here; to declare an array, place the brackets after the name
-int[4] ret_arr() {
-   ~~~          ^
-                [4]
-