[msl][ast] Emit struct name before initializer

This is needed when a struct initializer is nested inside another
composite (e.g. an array).

This isn't currently an issue for this backend as we hoist all
initializers for other reasons, but the next patch will reintroduce
some nested initializers when constructing packed matrices for
workgroup storage.

Change-Id: I4b77730a88730563bdd7d231fb25390f0f42a057
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/215074
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/lang/msl/writer/ast_printer/ast_function_test.cc b/src/tint/lang/msl/writer/ast_printer/ast_function_test.cc
index 5f632ab..c8a5fdd 100644
--- a/src/tint/lang/msl/writer/ast_printer/ast_function_test.cc
+++ b/src/tint/lang/msl/writer/ast_printer/ast_function_test.cc
@@ -260,7 +260,7 @@
 }
 
 fragment void frag_main(float4 pos [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  Interface const tint_symbol_4 = {.col1=tint_symbol_1.col1, .col2=tint_symbol_1.col2, .pos=pos};
+  Interface const tint_symbol_4 = Interface{.col1=tint_symbol_1.col1, .col2=tint_symbol_1.col2, .pos=pos};
   frag_main_inner(tint_symbol_4);
   return;
 }
@@ -310,7 +310,7 @@
 };
 
 VertexOutput foo(float x) {
-  VertexOutput const tint_symbol_2 = {.pos=float4(x, x, x, 1.0f)};
+  VertexOutput const tint_symbol_2 = VertexOutput{.pos=float4(x, x, x, 1.0f)};
   return tint_symbol_2;
 }
 
diff --git a/src/tint/lang/msl/writer/ast_printer/ast_printer.cc b/src/tint/lang/msl/writer/ast_printer/ast_printer.cc
index 5d61ad4..37ac38f 100644
--- a/src/tint/lang/msl/writer/ast_printer/ast_printer.cc
+++ b/src/tint/lang/msl/writer/ast_printer/ast_printer.cc
@@ -1075,6 +1075,9 @@
             return true;
         },
         [&](const core::type::Struct*) {
+            if (!EmitType(out, type)) {
+                return false;
+            }
             out << "{";
             terminator = "}";
             return true;
diff --git a/test/tint/bug/chromium/1251009.wgsl.expected.msl b/test/tint/bug/chromium/1251009.wgsl.expected.msl
index b0c0e2d..7b0e59b 100644
--- a/test/tint/bug/chromium/1251009.wgsl.expected.msl
+++ b/test/tint/bug/chromium/1251009.wgsl.expected.msl
@@ -28,8 +28,8 @@
 }
 
 vertex tint_symbol_3 tint_symbol(uint vertex_index [[vertex_id]], uint instance_index [[instance_id]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  VertexInputs0 const tint_symbol_4 = {.vertex_index=vertex_index, .loc0=tint_symbol_1.loc0};
-  VertexInputs1 const tint_symbol_5 = {.loc1=tint_symbol_1.loc1_1, .loc3=tint_symbol_1.loc3};
+  VertexInputs0 const tint_symbol_4 = VertexInputs0{.vertex_index=vertex_index, .loc0=tint_symbol_1.loc0};
+  VertexInputs1 const tint_symbol_5 = VertexInputs1{.loc1=tint_symbol_1.loc1_1, .loc3=tint_symbol_1.loc3};
   float4 const inner_result = tint_symbol_inner(tint_symbol_4, tint_symbol_1.loc1, instance_index, tint_symbol_5);
   tint_symbol_3 wrapper_result = {};
   wrapper_result.value = inner_result;
diff --git a/test/tint/bug/chromium/1434271.wgsl.expected.msl b/test/tint/bug/chromium/1434271.wgsl.expected.msl
index 45c015f..2e42a11 100644
--- a/test/tint/bug/chromium/1434271.wgsl.expected.msl
+++ b/test/tint/bug/chromium/1434271.wgsl.expected.msl
@@ -130,7 +130,7 @@
 }
 
 vertex tint_symbol_4 vs_main(const constant RenderParams_tint_packed_vec3* tint_symbol_7 [[buffer(0)]], tint_symbol_3 tint_symbol_2 [[stage_in]]) {
-  VertexInput const tint_symbol_5 = {.position=tint_symbol_2.position, .color=tint_symbol_2.color, .quad_pos=tint_symbol_2.quad_pos};
+  VertexInput const tint_symbol_5 = VertexInput{.position=tint_symbol_2.position, .color=tint_symbol_2.color, .quad_pos=tint_symbol_2.quad_pos};
   VertexOutput const inner_result_1 = vs_main_inner(tint_symbol_5, tint_symbol_7);
   tint_symbol_4 wrapper_result_1 = {};
   wrapper_result_1.position = inner_result_1.position;
diff --git a/test/tint/bug/tint/1046.wgsl.expected.msl b/test/tint/bug/tint/1046.wgsl.expected.msl
index c79bc0a..7122838 100644
--- a/test/tint/bug/tint/1046.wgsl.expected.msl
+++ b/test/tint/bug/tint/1046.wgsl.expected.msl
@@ -82,7 +82,7 @@
 }
 
 fragment tint_symbol_4 tint_symbol_1(float4 position [[position]], tint_symbol_3 tint_symbol_2 [[stage_in]]) {
-  FragmentInput const tint_symbol_5 = {.position=position, .view_position=tint_symbol_2.view_position, .normal=tint_symbol_2.normal, .uv=tint_symbol_2.uv, .color=tint_symbol_2.color};
+  FragmentInput const tint_symbol_5 = FragmentInput{.position=position, .view_position=tint_symbol_2.view_position, .normal=tint_symbol_2.normal, .uv=tint_symbol_2.uv, .color=tint_symbol_2.color};
   FragmentOutput const inner_result = tint_symbol_1_inner(tint_symbol_5);
   tint_symbol_4 wrapper_result = {};
   wrapper_result.color = inner_result.color;
diff --git a/test/tint/bug/tint/1061.spvasm.expected.msl b/test/tint/bug/tint/1061.spvasm.expected.msl
index 46ada67..ec4d16d 100644
--- a/test/tint/bug/tint/1061.spvasm.expected.msl
+++ b/test/tint/bug/tint/1061.spvasm.expected.msl
@@ -32,7 +32,7 @@
 
 main_out tint_symbol_inner(thread tint_private_vars_struct* const tint_private_vars, const constant buf0* const tint_symbol_4) {
   main_1(tint_private_vars, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=(*(tint_private_vars)).x_GLF_color};
+  main_out const tint_symbol_2 = main_out{.x_GLF_color_1=(*(tint_private_vars)).x_GLF_color};
   return tint_symbol_2;
 }
 
diff --git a/test/tint/bug/tint/1076.wgsl.expected.msl b/test/tint/bug/tint/1076.wgsl.expected.msl
index b01d931..97afdf8 100644
--- a/test/tint/bug/tint/1076.wgsl.expected.msl
+++ b/test/tint/bug/tint/1076.wgsl.expected.msl
@@ -20,12 +20,12 @@
   if ((in.mask == 0u)) {
     return in;
   }
-  FragIn const tint_symbol_5 = {.a=b, .mask=1u};
+  FragIn const tint_symbol_5 = FragIn{.a=b, .mask=1u};
   return tint_symbol_5;
 }
 
 fragment tint_symbol_3 tint_symbol(uint mask [[sample_mask]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  FragIn const tint_symbol_4 = {.a=tint_symbol_1.a, .mask=mask};
+  FragIn const tint_symbol_4 = FragIn{.a=tint_symbol_1.a, .mask=mask};
   FragIn const inner_result = tint_symbol_inner(tint_symbol_4, tint_symbol_1.b);
   tint_symbol_3 wrapper_result = {};
   wrapper_result.a = inner_result.a;
diff --git a/test/tint/bug/tint/1088.spvasm.expected.msl b/test/tint/bug/tint/1088.spvasm.expected.msl
index ee91362..9a1dd7f 100644
--- a/test/tint/bug/tint/1088.spvasm.expected.msl
+++ b/test/tint/bug/tint/1088.spvasm.expected.msl
@@ -69,7 +69,7 @@
   (*(tint_private_vars)).uv = uv_param;
   (*(tint_private_vars)).normal = normal_param;
   main_1(tint_private_vars, tint_symbol_6);
-  main_out const tint_symbol_4 = {.gl_Position=(*(tint_private_vars)).gl_Position, .vUV_1=(*(tint_private_vars)).vUV};
+  main_out const tint_symbol_4 = main_out{.gl_Position=(*(tint_private_vars)).gl_Position, .vUV_1=(*(tint_private_vars)).vUV};
   return tint_symbol_4;
 }
 
diff --git a/test/tint/bug/tint/1118.wgsl.expected.msl b/test/tint/bug/tint/1118.wgsl.expected.msl
index f81aa50..f92064d 100644
--- a/test/tint/bug/tint/1118.wgsl.expected.msl
+++ b/test/tint/bug/tint/1118.wgsl.expected.msl
@@ -125,7 +125,7 @@
   (*(tint_private_vars)).fClipDistance3 = fClipDistance3_param;
   (*(tint_private_vars)).fClipDistance4 = fClipDistance4_param;
   main_1(tint_private_vars, tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.glFragColor_1=(*(tint_private_vars)).glFragColor};
+  main_out const tint_symbol_4 = main_out{.glFragColor_1=(*(tint_private_vars)).glFragColor};
   return tint_symbol_4;
 }
 
diff --git a/test/tint/bug/tint/1520.spvasm.expected.msl b/test/tint/bug/tint/1520.spvasm.expected.msl
index 259f588..2efd85b 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.msl
+++ b/test/tint/bug/tint/1520.spvasm.expected.msl
@@ -188,7 +188,7 @@
   (*(tint_private_vars)).sk_Clockwise = sk_Clockwise_param;
   (*(tint_private_vars)).vcolor_S0 = vcolor_S0_param;
   main_1(tint_private_vars, tint_symbol_7);
-  main_out const tint_symbol_4 = {.sk_FragColor_1=(*(tint_private_vars)).sk_FragColor};
+  main_out const tint_symbol_4 = main_out{.sk_FragColor_1=(*(tint_private_vars)).sk_FragColor};
   return tint_symbol_4;
 }
 
diff --git a/test/tint/bug/tint/1540.wgsl.expected.msl b/test/tint/bug/tint/1540.wgsl.expected.msl
index 387b86b..b3066f9 100644
--- a/test/tint/bug/tint/1540.wgsl.expected.msl
+++ b/test/tint/bug/tint/1540.wgsl.expected.msl
@@ -7,7 +7,7 @@
 
 kernel void tint_symbol() {
   bool b = false;
-  S v = {.e=bool(true & b)};
+  S v = S{.e=bool(true & b)};
   return;
 }
 
diff --git a/test/tint/bug/tint/2010.spvasm.expected.msl b/test/tint/bug/tint/2010.spvasm.expected.msl
index 34ac79e..be01c5e 100644
--- a/test/tint/bug/tint/2010.spvasm.expected.msl
+++ b/test/tint/bug/tint/2010.spvasm.expected.msl
@@ -76,7 +76,7 @@
     uint const x_62 = (x_54 + x_52);
     if ((x_62 >= x_58)) {
       float4 const x_67 = (*(tint_symbol_9)).field0[x_62];
-      S const tint_symbol_2 = {.field0=((x_67.xy + x_67.zw) * 0.5f), .field1=x_62};
+      S const tint_symbol_2 = S{.field0=((x_67.xy + x_67.zw) * 0.5f), .field1=x_62};
       (*(tint_symbol_10))[x_62] = tint_symbol_2;
     }
     {
diff --git a/test/tint/bug/tint/2059.wgsl.expected.msl b/test/tint/bug/tint/2059.wgsl.expected.msl
index bd2706e..8bd9d78 100644
--- a/test/tint/bug/tint/2059.wgsl.expected.msl
+++ b/test/tint/bug/tint/2059.wgsl.expected.msl
@@ -108,23 +108,23 @@
     assign_and_preserve_padding(tint_symbol_8, a);
   }
   {
-    S const a = {.m=m};
+    S const a = S{.m=m};
     assign_and_preserve_padding_1(tint_symbol_9, a);
   }
   {
     tint_array<float3x3, 1> const tint_symbol_1 = tint_array<float3x3, 1>{m};
-    S2 const a = {.m=tint_symbol_1};
+    S2 const a = S2{.m=tint_symbol_1};
     assign_and_preserve_padding_2(tint_symbol_10, a);
   }
   {
-    S const tint_symbol_2 = {.m=m};
-    S3 const a = {.s=tint_symbol_2};
+    S const tint_symbol_2 = S{.m=m};
+    S3 const a = S3{.s=tint_symbol_2};
     assign_and_preserve_padding_4(tint_symbol_11, a);
   }
   {
-    S const tint_symbol_3 = {.m=m};
+    S const tint_symbol_3 = S{.m=m};
     tint_array<S, 1> const tint_symbol_4 = tint_array<S, 1>{tint_symbol_3};
-    S4 const a = {.s=tint_symbol_4};
+    S4 const a = S4{.s=tint_symbol_4};
     assign_and_preserve_padding_5(tint_symbol_12, a);
   }
   {
@@ -132,13 +132,13 @@
     assign_and_preserve_padding_3(tint_symbol_13, a);
   }
   {
-    S const tint_symbol_5 = {.m=m};
+    S const tint_symbol_5 = S{.m=m};
     tint_array<S, 1> const a = tint_array<S, 1>{tint_symbol_5};
     assign_and_preserve_padding_6(tint_symbol_14, a);
   }
   {
     tint_array<float3x3, 1> const tint_symbol_6 = tint_array<float3x3, 1>{m};
-    S2 const tint_symbol_7 = {.m=tint_symbol_6};
+    S2 const tint_symbol_7 = S2{.m=tint_symbol_6};
     tint_array<S2, 1> const a = tint_array<S2, 1>{tint_symbol_7};
     assign_and_preserve_padding_7(tint_symbol_15, a);
   }
diff --git a/test/tint/bug/tint/922.wgsl.expected.msl b/test/tint/bug/tint/922.wgsl.expected.msl
index 1f5048f..e00ab45 100644
--- a/test/tint/bug/tint/922.wgsl.expected.msl
+++ b/test/tint/bug/tint/922.wgsl.expected.msl
@@ -309,7 +309,7 @@
   float4 const x_e11 = (*(tint_private_vars)).v_Color;
   float2 const x_e13 = (*(tint_private_vars)).v_TexCoord;
   float4 const x_e15 = (*(tint_private_vars)).gl_Position;
-  VertexOutput const tint_symbol_4 = {.v_Color=x_e11, .v_TexCoord=x_e13, .member=x_e15};
+  VertexOutput const tint_symbol_4 = VertexOutput{.v_Color=x_e11, .v_TexCoord=x_e13, .member=x_e15};
   return tint_symbol_4;
 }
 
diff --git a/test/tint/bug/tint/948.wgsl.expected.msl b/test/tint/bug/tint/948.wgsl.expected.msl
index f4fafbe..ea9a7a3 100644
--- a/test/tint/bug/tint/948.wgsl.expected.msl
+++ b/test/tint/bug/tint/948.wgsl.expected.msl
@@ -245,7 +245,7 @@
   (*(tint_private_vars)).vPosition = vPosition_param;
   (*(tint_private_vars)).vUV = vUV_param;
   main_1(tint_private_vars, tint_symbol_18, tint_symbol_19, tint_symbol_20, tint_symbol_21, tint_symbol_22, tint_symbol_23, tint_symbol_24, tint_symbol_25, tint_symbol_26, tint_symbol_27);
-  main_out const tint_symbol_4 = {.glFragColor_1=(*(tint_private_vars)).glFragColor};
+  main_out const tint_symbol_4 = main_out{.glFragColor_1=(*(tint_private_vars)).glFragColor};
   return tint_symbol_4;
 }
 
diff --git a/test/tint/bug/tint/949.wgsl.expected.msl b/test/tint/bug/tint/949.wgsl.expected.msl
index 08f3822..b3a792d 100644
--- a/test/tint/bug/tint/949.wgsl.expected.msl
+++ b/test/tint/bug/tint/949.wgsl.expected.msl
@@ -476,7 +476,7 @@
   (*(tint_private_vars)).v_uv = v_uv_param;
   (*(tint_private_vars)).v_output2 = v_output2_param;
   main_1(tint_private_vars, tint_symbol_11, tint_symbol_12, tint_symbol_13, tint_symbol_14, tint_symbol_15, tint_symbol_16);
-  main_out const tint_symbol_4 = {.glFragColor_1=(*(tint_private_vars)).glFragColor};
+  main_out const tint_symbol_4 = main_out{.glFragColor_1=(*(tint_private_vars)).glFragColor};
   return tint_symbol_4;
 }
 
diff --git a/test/tint/bug/tint/978.wgsl.expected.msl b/test/tint/bug/tint/978.wgsl.expected.msl
index 1db5531..0bd0a5f 100644
--- a/test/tint/bug/tint/978.wgsl.expected.msl
+++ b/test/tint/bug/tint/978.wgsl.expected.msl
@@ -26,7 +26,7 @@
 }
 
 fragment tint_symbol_3 tint_symbol(depth2d<float, access::sample> tint_symbol_7 [[texture(0)]], sampler tint_symbol_8 [[sampler(0)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  FragmentInput const tint_symbol_4 = {.vUv=tint_symbol_1.vUv};
+  FragmentInput const tint_symbol_4 = FragmentInput{.vUv=tint_symbol_1.vUv};
   FragmentOutput const inner_result = tint_symbol_inner(tint_symbol_4, tint_symbol_7, tint_symbol_8);
   tint_symbol_3 wrapper_result = {};
   wrapper_result.color = inner_result.color;
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_i32.spvasm.expected.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_i32.spvasm.expected.msl
index 1a36dae..6aeaa4d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_i32.spvasm.expected.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_i32.spvasm.expected.msl
@@ -30,7 +30,7 @@
   atomic_compare_exchange_result_i32 const tint_symbol = atomicCompareExchangeWeak_1(&((*(tint_symbol_2)).arg_0), 1, 1);
   int const old_value_1 = tint_symbol.old_value;
   int const x_19 = old_value_1;
-  x__atomic_compare_exchange_resulti32 const tint_symbol_1 = {.old_value=x_19, .exchanged=(x_19 == 1)};
+  x__atomic_compare_exchange_resulti32 const tint_symbol_1 = x__atomic_compare_exchange_resulti32{.old_value=x_19, .exchanged=(x_19 == 1)};
   res = tint_symbol_1;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_u32.spvasm.expected.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_u32.spvasm.expected.msl
index 4bc8a6b..43a89a9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_u32.spvasm.expected.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_u32.spvasm.expected.msl
@@ -30,7 +30,7 @@
   atomic_compare_exchange_result_u32 const tint_symbol = atomicCompareExchangeWeak_1(&((*(tint_symbol_2)).arg_0), 1u, 1u);
   uint const old_value_1 = tint_symbol.old_value;
   uint const x_17 = old_value_1;
-  x__atomic_compare_exchange_resultu32 const tint_symbol_1 = {.old_value=x_17, .exchanged=(x_17 == 1u)};
+  x__atomic_compare_exchange_resultu32 const tint_symbol_1 = x__atomic_compare_exchange_resultu32{.old_value=x_17, .exchanged=(x_17 == 1u)};
   res = tint_symbol_1;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.msl
index 0f57ced..a2a1a65 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.msl
@@ -33,7 +33,7 @@
   atomic_compare_exchange_result_i32 const tint_symbol = atomicCompareExchangeWeak_1(tint_symbol_3, 1, 1);
   int const old_value_1 = tint_symbol.old_value;
   int const x_18 = old_value_1;
-  x__atomic_compare_exchange_resulti32 const tint_symbol_1 = {.old_value=x_18, .exchanged=(x_18 == 1)};
+  x__atomic_compare_exchange_resulti32 const tint_symbol_1 = x__atomic_compare_exchange_resulti32{.old_value=x_18, .exchanged=(x_18 == 1)};
   res = tint_symbol_1;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.msl
index 1988e2f..5822323 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.msl
@@ -33,7 +33,7 @@
   atomic_compare_exchange_result_u32 const tint_symbol = atomicCompareExchangeWeak_1(tint_symbol_3, 1u, 1u);
   uint const old_value_1 = tint_symbol.old_value;
   uint const x_17 = old_value_1;
-  x__atomic_compare_exchange_resultu32 const tint_symbol_1 = {.old_value=x_17, .exchanged=(x_17 == 1u)};
+  x__atomic_compare_exchange_resultu32 const tint_symbol_1 = x__atomic_compare_exchange_resultu32{.old_value=x_17, .exchanged=(x_17 == 1u)};
   res = tint_symbol_1;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.msl
index e281e03..cb837c9 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.msl
@@ -36,7 +36,7 @@
   atomic_compare_exchange_result_i32 const tint_symbol = atomicCompareExchangeWeak_1(&((*(tint_symbol_2)).arg_0), x_24, x_23);
   int const old_value_1 = tint_symbol.old_value;
   int const x_25 = old_value_1;
-  x__atomic_compare_exchange_resulti32 const tint_symbol_1 = {.old_value=x_25, .exchanged=(x_25 == x_23)};
+  x__atomic_compare_exchange_resulti32 const tint_symbol_1 = x__atomic_compare_exchange_resulti32{.old_value=x_25, .exchanged=(x_25 == x_23)};
   res = tint_symbol_1;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.msl
index 3493127..187a7f7 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.msl
@@ -36,7 +36,7 @@
   atomic_compare_exchange_result_u32 const tint_symbol = atomicCompareExchangeWeak_1(&((*(tint_symbol_2)).arg_0), x_22, x_21);
   uint const old_value_1 = tint_symbol.old_value;
   uint const x_23 = old_value_1;
-  x__atomic_compare_exchange_resultu32 const tint_symbol_1 = {.old_value=x_23, .exchanged=(x_23 == x_21)};
+  x__atomic_compare_exchange_resultu32 const tint_symbol_1 = x__atomic_compare_exchange_resultu32{.old_value=x_23, .exchanged=(x_23 == x_21)};
   res = tint_symbol_1;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.msl
index 990f821..48931ee 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.msl
@@ -39,7 +39,7 @@
   atomic_compare_exchange_result_i32 const tint_symbol = atomicCompareExchangeWeak_1(tint_symbol_3, x_23, x_22);
   int const old_value_1 = tint_symbol.old_value;
   int const x_24 = old_value_1;
-  x__atomic_compare_exchange_resulti32 const tint_symbol_1 = {.old_value=x_24, .exchanged=(x_24 == x_22)};
+  x__atomic_compare_exchange_resulti32 const tint_symbol_1 = x__atomic_compare_exchange_resulti32{.old_value=x_24, .exchanged=(x_24 == x_22)};
   res = tint_symbol_1;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.msl
index 18777ab..bbd1dff 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.msl
@@ -39,7 +39,7 @@
   atomic_compare_exchange_result_u32 const tint_symbol = atomicCompareExchangeWeak_1(tint_symbol_3, x_22, x_21);
   uint const old_value_1 = tint_symbol.old_value;
   uint const x_23 = old_value_1;
-  x__atomic_compare_exchange_resultu32 const tint_symbol_1 = {.old_value=x_23, .exchanged=(x_23 == x_21)};
+  x__atomic_compare_exchange_resultu32 const tint_symbol_1 = x__atomic_compare_exchange_resultu32{.old_value=x_23, .exchanged=(x_23 == x_21)};
   res = tint_symbol_1;
   return;
 }
diff --git a/test/tint/builtins/textureDimensions/depth_ms.spvasm.expected.msl b/test/tint/builtins/textureDimensions/depth_ms.spvasm.expected.msl
index 4143fb0..fa00faa 100644
--- a/test/tint/builtins/textureDimensions/depth_ms.spvasm.expected.msl
+++ b/test/tint/builtins/textureDimensions/depth_ms.spvasm.expected.msl
@@ -32,7 +32,7 @@
 
 vertex_main_out vertex_main_inner(thread tint_private_vars_struct* const tint_private_vars, depth2d_ms<float, access::read> tint_symbol_7) {
   vertex_main_1(tint_private_vars, tint_symbol_7);
-  vertex_main_out const tint_symbol_4 = {.tint_symbol_1_1=(*(tint_private_vars)).tint_symbol_1};
+  vertex_main_out const tint_symbol_4 = vertex_main_out{.tint_symbol_1_1=(*(tint_private_vars)).tint_symbol_1};
   return tint_symbol_4;
 }
 
diff --git a/test/tint/builtins/textureLoad/depth_ms.spvasm.expected.msl b/test/tint/builtins/textureLoad/depth_ms.spvasm.expected.msl
index e0100d3..6644784 100644
--- a/test/tint/builtins/textureLoad/depth_ms.spvasm.expected.msl
+++ b/test/tint/builtins/textureLoad/depth_ms.spvasm.expected.msl
@@ -32,7 +32,7 @@
 
 vertex_main_out vertex_main_inner(thread tint_private_vars_struct* const tint_private_vars, depth2d_ms<float, access::read> tint_symbol_7) {
   vertex_main_1(tint_private_vars, tint_symbol_7);
-  vertex_main_out const tint_symbol_4 = {.tint_symbol_1_1=(*(tint_private_vars)).tint_symbol_1};
+  vertex_main_out const tint_symbol_4 = vertex_main_out{.tint_symbol_1_1=(*(tint_private_vars)).tint_symbol_1};
   return tint_symbol_4;
 }
 
diff --git a/test/tint/builtins/textureNumSamples/depth_ms.spvasm.expected.msl b/test/tint/builtins/textureNumSamples/depth_ms.spvasm.expected.msl
index 1e222d5..c6b96ff 100644
--- a/test/tint/builtins/textureNumSamples/depth_ms.spvasm.expected.msl
+++ b/test/tint/builtins/textureNumSamples/depth_ms.spvasm.expected.msl
@@ -32,7 +32,7 @@
 
 vertex_main_out vertex_main_inner(thread tint_private_vars_struct* const tint_private_vars, depth2d_ms<float, access::read> tint_symbol_7) {
   vertex_main_1(tint_private_vars, tint_symbol_7);
-  vertex_main_out const tint_symbol_4 = {.tint_symbol_1_1=(*(tint_private_vars)).tint_symbol_1};
+  vertex_main_out const tint_symbol_4 = vertex_main_out{.tint_symbol_1_1=(*(tint_private_vars)).tint_symbol_1};
   return tint_symbol_4;
 }
 
diff --git a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.msl b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.msl
index 09c726a..41f120b 100644
--- a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.msl
+++ b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.msl
@@ -29,7 +29,7 @@
 }
 
 fragment tint_symbol_2 frag_main(tint_symbol_1 tint_symbol [[stage_in]]) {
-  FragInput const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b};
+  FragInput const tint_symbol_3 = FragInput{.a=tint_symbol.a, .b=tint_symbol.b};
   FragOutput const inner_result = frag_main_inner(tint_symbol_3);
   tint_symbol_2 wrapper_result = {};
   wrapper_result.color = inner_result.color;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.msl
index 6583509..b9426c8 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.msl
@@ -40,13 +40,13 @@
 f_res f_inner_1(float4 pos, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(pos, tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(pos, tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.msl
index 94bdeb4..13a1f60 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.msl
@@ -41,13 +41,13 @@
 f_res f_inner_1(float4 pos, float4 uv, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(pos, uv, tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(pos, tint_symbol.uv, tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.msl
index 0ff3a59..19d79a8 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.msl
@@ -45,14 +45,14 @@
 f_res f_inner_1(float4 pos, In in, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(pos, in, tint_private_vars);
-  f_res const tint_symbol_5 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_5 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_5;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  In const tint_symbol_3 = {.uv=tint_symbol.uv};
-  PixelLocal const tint_symbol_4 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  In const tint_symbol_3 = In{.uv=tint_symbol.uv};
+  PixelLocal const tint_symbol_4 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(pos, tint_symbol_3, tint_symbol_4, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.msl
index 1360112..fad0c04 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.msl
@@ -44,14 +44,14 @@
 f_res f_inner_1(In in, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(in, tint_private_vars);
-  f_res const tint_symbol_5 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_5 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_5;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  In const tint_symbol_3 = {.pos=pos};
-  PixelLocal const tint_symbol_4 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  In const tint_symbol_3 = In{.pos=pos};
+  PixelLocal const tint_symbol_4 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, tint_symbol_4, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.msl
index c66db6b..bcce58c 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.msl
@@ -45,14 +45,14 @@
 f_res f_inner_1(In in, float4 uv, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(in, uv, tint_private_vars);
-  f_res const tint_symbol_5 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_5 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_5;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  In const tint_symbol_3 = {.pos=pos};
-  PixelLocal const tint_symbol_4 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  In const tint_symbol_3 = In{.pos=pos};
+  PixelLocal const tint_symbol_4 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, tint_symbol.uv, tint_symbol_4, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.msl
index 4ddb0ef..4bc93c3 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.msl
@@ -46,14 +46,14 @@
 f_res f_inner_1(In in, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(in, tint_private_vars);
-  f_res const tint_symbol_5 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_5 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_5;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  In const tint_symbol_3 = {.pos=pos, .uv=tint_symbol.uv};
-  PixelLocal const tint_symbol_4 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  In const tint_symbol_3 = In{.pos=pos, .uv=tint_symbol.uv};
+  PixelLocal const tint_symbol_4 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, tint_symbol_4, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_multiple.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_multiple.wgsl.expected.msl
index ddab48d..3c3ed1b 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_multiple.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_multiple.wgsl.expected.msl
@@ -46,14 +46,14 @@
 f_res f_inner_1(In in, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(in, tint_private_vars);
-  f_res const tint_symbol_5 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_5 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_5;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], bool ff [[front_facing]], uint si [[sample_id]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  In const tint_symbol_3 = {.pos=pos, .ff=ff, .si=si};
-  PixelLocal const tint_symbol_4 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  In const tint_symbol_3 = In{.pos=pos, .ff=ff, .si=si};
+  PixelLocal const tint_symbol_4 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, tint_symbol_4, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_multiple.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_multiple.wgsl.expected.msl
index c2f7c39..a253f84 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_multiple.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_multiple.wgsl.expected.msl
@@ -40,13 +40,13 @@
 f_res f_inner_1(float4 pos, bool ff, uint si, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(pos, ff, si, tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], bool ff [[front_facing]], uint si [[sample_id]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(pos, ff, si, tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_multiple_entry_points.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_multiple_entry_points.wgsl.expected.msl
index 20d530f..b46500b 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_multiple_entry_points.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_multiple_entry_points.wgsl.expected.msl
@@ -40,13 +40,13 @@
 f_res f_inner_1(float4 pos, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(pos, tint_private_vars);
-  f_res const tint_symbol_10 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_10 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_10;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_9 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_9 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(pos, tint_symbol_9, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
@@ -84,13 +84,13 @@
 f2_res f2_inner_1(float4 pos, PixelLocal pixel_local_2, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_2;
   f2_inner(pos, tint_private_vars);
-  f2_res const tint_symbol_12 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f2_res const tint_symbol_12 = f2_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_12;
 }
 
 fragment tint_symbol_5 f2(float4 pos [[position]], tint_symbol_4 tint_symbol_3 [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_11 = {.a=tint_symbol_3.a, .b=tint_symbol_3.b, .c=tint_symbol_3.c};
+  PixelLocal const tint_symbol_11 = PixelLocal{.a=tint_symbol_3.a, .b=tint_symbol_3.b, .c=tint_symbol_3.c};
   f2_res const inner_result_1 = f2_inner_1(pos, tint_symbol_11, &(tint_private_vars));
   tint_symbol_5 wrapper_result_1 = {};
   wrapper_result_1.output_0 = inner_result_1.output_0;
@@ -124,13 +124,13 @@
 f3_res f3_inner_1(float4 pos, PixelLocal pixel_local_3, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_3;
   f3_inner(pos, tint_private_vars);
-  f3_res const tint_symbol_14 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f3_res const tint_symbol_14 = f3_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_14;
 }
 
 fragment tint_symbol_8 f3(float4 pos [[position]], tint_symbol_7 tint_symbol_6 [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_13 = {.a=tint_symbol_6.a, .b=tint_symbol_6.b, .c=tint_symbol_6.c};
+  PixelLocal const tint_symbol_13 = PixelLocal{.a=tint_symbol_6.a, .b=tint_symbol_6.b, .c=tint_symbol_6.c};
   f3_res const inner_result_2 = f3_inner_1(pos, tint_symbol_13, &(tint_private_vars));
   tint_symbol_8 wrapper_result_2 = {};
   wrapper_result_2.output_0 = inner_result_2.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.msl
index 6583509..b9426c8 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.msl
@@ -40,13 +40,13 @@
 f_res f_inner_1(float4 pos, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(pos, tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(pos, tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.msl
index 1360112..fad0c04 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.msl
@@ -44,14 +44,14 @@
 f_res f_inner_1(In in, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(in, tint_private_vars);
-  f_res const tint_symbol_5 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_5 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_5;
 }
 
 fragment tint_symbol_2 f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  In const tint_symbol_3 = {.pos=pos};
-  PixelLocal const tint_symbol_4 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  In const tint_symbol_3 = In{.pos=pos};
+  PixelLocal const tint_symbol_4 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, tint_symbol_4, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.msl
index 23c96f2..900e9ff 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.msl
@@ -42,13 +42,13 @@
 f_res f_inner_1(float4 a, float4 b, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(a, b, tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a_1, .b=tint_symbol.b_1, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a_1, .b=tint_symbol.b_1, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol.a, tint_symbol.b, tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.msl
index 7ea93fb..06fd822 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.msl
@@ -47,14 +47,14 @@
 f_res f_inner_1(In in, PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(in, tint_private_vars);
-  f_res const tint_symbol_5 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_5 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_5;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  In const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b};
-  PixelLocal const tint_symbol_4 = {.a=tint_symbol.a_1, .b=tint_symbol.b_1, .c=tint_symbol.c};
+  In const tint_symbol_3 = In{.a=tint_symbol.a, .b=tint_symbol.b};
+  PixelLocal const tint_symbol_4 = PixelLocal{.a=tint_symbol.a_1, .b=tint_symbol.b_1, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, tint_symbol_4, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/multiple_attachments.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/multiple_attachments.wgsl.expected.msl
index ab70287..570569c 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/multiple_attachments.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/multiple_attachments.wgsl.expected.msl
@@ -50,13 +50,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   Out const result = f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c, .output_3=result.x, .output_4=result.y, .output_5=result.z};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c, .output_3=result.x, .output_4=result.y, .output_5=result.z};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/single_attachment.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/single_attachment.wgsl.expected.msl
index ea74af1..f09ebd0 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/single_attachment.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/single_attachment.wgsl.expected.msl
@@ -42,13 +42,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   Out const result = f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=result.x, .output_2=result.y, .output_3=result.z};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=result.x, .output_2=result.y, .output_3=result.z};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/one_output/multiple_attachments.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/one_output/multiple_attachments.wgsl.expected.msl
index be6e407..2710315 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/one_output/multiple_attachments.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/one_output/multiple_attachments.wgsl.expected.msl
@@ -39,13 +39,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   float4 const result = f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c, .output_3=result};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c, .output_3=result};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/one_output/single_attachment.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/one_output/single_attachment.wgsl.expected.msl
index 740ffc3..163448e 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/one_output/single_attachment.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/one_output/single_attachment.wgsl.expected.msl
@@ -31,13 +31,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   float4 const result = f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=result};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=result};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/multiple_attachments.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/multiple_attachments.wgsl.expected.msl
index d379070..ec3c9f6 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/multiple_attachments.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/multiple_attachments.wgsl.expected.msl
@@ -36,13 +36,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.msl
index cf26f91..fd1d50f 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.msl
@@ -28,13 +28,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/multiple_attachments.wgsl.expected.msl b/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/multiple_attachments.wgsl.expected.msl
index e092b7d..27f605d 100644
--- a/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/multiple_attachments.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/multiple_attachments.wgsl.expected.msl
@@ -64,13 +64,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   Out const result = f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c, .output_3=result.x, .output_4=result.y, .output_5=result.z};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c, .output_3=result.x, .output_4=result.y, .output_5=result.z};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/single_attachment.wgsl.expected.msl b/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/single_attachment.wgsl.expected.msl
index ac023fe..e74fb62 100644
--- a/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/single_attachment.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/single_attachment.wgsl.expected.msl
@@ -56,13 +56,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   Out const result = f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=result.x, .output_2=result.y, .output_3=result.z};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=result.x, .output_2=result.y, .output_3=result.z};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/indirect_use/one_output/multiple_attachments.wgsl.expected.msl b/test/tint/extensions/pixel_local/indirect_use/one_output/multiple_attachments.wgsl.expected.msl
index 03cfffa..34a157e 100644
--- a/test/tint/extensions/pixel_local/indirect_use/one_output/multiple_attachments.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/one_output/multiple_attachments.wgsl.expected.msl
@@ -53,13 +53,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   float4 const result = f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c, .output_3=result};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c, .output_3=result};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/indirect_use/one_output/single_attachment.wgsl.expected.msl b/test/tint/extensions/pixel_local/indirect_use/one_output/single_attachment.wgsl.expected.msl
index e1e9416..60b24f0 100644
--- a/test/tint/extensions/pixel_local/indirect_use/one_output/single_attachment.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/one_output/single_attachment.wgsl.expected.msl
@@ -45,13 +45,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   float4 const result = f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=result};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=result};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/multiple_attachments.wgsl.expected.msl b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/multiple_attachments.wgsl.expected.msl
index e4a325e..7cef3b5 100644
--- a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/multiple_attachments.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/multiple_attachments.wgsl.expected.msl
@@ -50,13 +50,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a, .output_1=(*(tint_private_vars)).P.b, .output_2=(*(tint_private_vars)).P.c};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a, .b=tint_symbol.b, .c=tint_symbol.c};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.msl b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.msl
index 2338030..c375642 100644
--- a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.msl
@@ -42,13 +42,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).P = pixel_local_1;
   f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).P.a};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).P.a};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/pixel_local/ptr/local.wgsl.expected.msl b/test/tint/extensions/pixel_local/ptr/local.wgsl.expected.msl
index b936068..c47b84c 100644
--- a/test/tint/extensions/pixel_local/ptr/local.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/ptr/local.wgsl.expected.msl
@@ -28,13 +28,13 @@
 f_res f_inner_1(PixelLocal pixel_local_1, thread tint_private_vars_struct* const tint_private_vars) {
   (*(tint_private_vars)).V = pixel_local_1;
   f_inner(tint_private_vars);
-  f_res const tint_symbol_4 = {.output_0=(*(tint_private_vars)).V.a};
+  f_res const tint_symbol_4 = f_res{.output_0=(*(tint_private_vars)).V.a};
   return tint_symbol_4;
 }
 
 fragment tint_symbol_2 f(tint_symbol_1 tint_symbol [[stage_in]]) {
   thread tint_private_vars_struct tint_private_vars = {};
-  PixelLocal const tint_symbol_3 = {.a=tint_symbol.a};
+  PixelLocal const tint_symbol_3 = PixelLocal{.a=tint_symbol.a};
   f_res const inner_result = f_inner_1(tint_symbol_3, &(tint_private_vars));
   tint_symbol_2 wrapper_result = {};
   wrapper_result.output_0 = inner_result.output_0;
diff --git a/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.msl b/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.msl
index 46454ec..de22af9 100644
--- a/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.msl
@@ -18,7 +18,7 @@
 }
 
 fragment void f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
-  In const tint_symbol_2 = {.uv=tint_symbol.uv};
+  In const tint_symbol_2 = In{.uv=tint_symbol.uv};
   f_inner(pos, tint_symbol.fbf, tint_symbol_2);
   return;
 }
diff --git a/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.msl b/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.msl
index 0909428..efc2f57 100644
--- a/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.msl
@@ -20,7 +20,7 @@
 }
 
 fragment void f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
-  In const tint_symbol_2 = {.pos=pos, .uv=tint_symbol.uv, .fbf=tint_symbol.fbf};
+  In const tint_symbol_2 = In{.pos=pos, .uv=tint_symbol.uv, .fbf=tint_symbol.fbf};
   f_inner(tint_symbol_2);
   return;
 }
diff --git a/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.msl b/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.msl
index dc88585..e232a37 100644
--- a/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.msl
@@ -19,7 +19,7 @@
 }
 
 fragment void f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
-  In const tint_symbol_2 = {.pos=pos};
+  In const tint_symbol_2 = In{.pos=pos};
   f_inner(tint_symbol.fbf_2, tint_symbol_2, tint_symbol.uv, tint_symbol.fbf_0);
   return;
 }
diff --git a/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.msl b/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.msl
index a589874..e0845c3 100644
--- a/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.msl
@@ -18,7 +18,7 @@
 }
 
 fragment void f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
-  In const tint_symbol_2 = {.fbf=tint_symbol.fbf, .pos=pos};
+  In const tint_symbol_2 = In{.fbf=tint_symbol.fbf, .pos=pos};
   f_inner(tint_symbol_2);
   return;
 }
diff --git a/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.msl b/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.msl
index 7d2e28a..913b16e 100644
--- a/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.msl
@@ -17,7 +17,7 @@
 }
 
 fragment void f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
-  In const tint_symbol_2 = {.pos=pos};
+  In const tint_symbol_2 = In{.pos=pos};
   f_inner(tint_symbol_2, tint_symbol.fbf);
   return;
 }
diff --git a/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.msl b/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.msl
index 5ccc5c8..79d116a 100644
--- a/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.msl
@@ -19,7 +19,7 @@
 }
 
 fragment void f(float4 pos [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
-  FBF const tint_symbol_2 = {.c1=tint_symbol.c1, .c3=tint_symbol.c3};
+  FBF const tint_symbol_2 = FBF{.c1=tint_symbol.c1, .c3=tint_symbol.c3};
   f_inner(pos, tint_symbol_2);
   return;
 }
diff --git a/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.msl b/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.msl
index b520c20..22c3127 100644
--- a/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.msl
@@ -21,7 +21,7 @@
 }
 
 fragment void f(tint_symbol_1 tint_symbol [[stage_in]]) {
-  In const tint_symbol_2 = {.a=tint_symbol.a, .b=tint_symbol.b, .fbf=tint_symbol.fbf};
+  In const tint_symbol_2 = In{.a=tint_symbol.a, .b=tint_symbol.b, .fbf=tint_symbol.fbf};
   f_inner(tint_symbol_2);
   return;
 }
diff --git a/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.msl b/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.msl
index da10707..53f03cb 100644
--- a/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.msl
+++ b/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.msl
@@ -19,7 +19,7 @@
 };
 
 Out f_inner(float4 fbf_1, float4 fbf_3) {
-  Out const tint_symbol_3 = {.x=fbf_1, .y=float4(20.0f), .z=fbf_3};
+  Out const tint_symbol_3 = Out{.x=fbf_1, .y=float4(20.0f), .z=fbf_3};
   return tint_symbol_3;
 }
 
diff --git a/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.msl b/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.msl
index e6176a5..7c5485b 100644
--- a/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.msl
+++ b/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.msl
@@ -18,7 +18,7 @@
 };
 
 Out f_inner(float4 fbf) {
-  Out const tint_symbol_3 = {.x=float4(10.0f), .y=fbf, .z=float4(30.0f)};
+  Out const tint_symbol_3 = Out{.x=float4(10.0f), .y=fbf, .z=float4(30.0f)};
   return tint_symbol_3;
 }
 
diff --git a/test/tint/layout/storage/mat2x2/stride/16.spvasm.expected.msl b/test/tint/layout/storage/mat2x2/stride/16.spvasm.expected.msl
index ea779b1..2085526 100644
--- a/test/tint/layout/storage/mat2x2/stride/16.spvasm.expected.msl
+++ b/test/tint/layout/storage/mat2x2/stride/16.spvasm.expected.msl
@@ -27,8 +27,8 @@
 };
 
 tint_array<strided_arr, 2> mat2x2_stride_16_to_arr(float2x2 m) {
-  strided_arr const tint_symbol_2 = {.el=m[0u]};
-  strided_arr const tint_symbol_3 = {.el=m[1u]};
+  strided_arr const tint_symbol_2 = strided_arr{.el=m[0u]};
+  strided_arr const tint_symbol_3 = strided_arr{.el=m[1u]};
   tint_array<strided_arr, 2> const tint_symbol_4 = tint_array<strided_arr, 2>{tint_symbol_2, tint_symbol_3};
   return tint_symbol_4;
 }
diff --git a/test/tint/samples/cube.wgsl.expected.msl b/test/tint/samples/cube.wgsl.expected.msl
index e5cbb88..0af856b 100644
--- a/test/tint/samples/cube.wgsl.expected.msl
+++ b/test/tint/samples/cube.wgsl.expected.msl
@@ -33,7 +33,7 @@
 }
 
 vertex tint_symbol_2 vtx_main(const constant Uniforms* tint_symbol_8 [[buffer(0)]], tint_symbol_1 tint_symbol [[stage_in]]) {
-  VertexInput const tint_symbol_6 = {.cur_position=tint_symbol.cur_position, .color=tint_symbol.color};
+  VertexInput const tint_symbol_6 = VertexInput{.cur_position=tint_symbol.cur_position, .color=tint_symbol.color};
   VertexOutput const inner_result = vtx_main_inner(tint_symbol_6, tint_symbol_8);
   tint_symbol_2 wrapper_result = {};
   wrapper_result.vtxFragColor = inner_result.vtxFragColor;
diff --git a/test/tint/samples/simple_vertex.spvasm.expected.msl b/test/tint/samples/simple_vertex.spvasm.expected.msl
index 4119df0..30768f6 100644
--- a/test/tint/samples/simple_vertex.spvasm.expected.msl
+++ b/test/tint/samples/simple_vertex.spvasm.expected.msl
@@ -20,7 +20,7 @@
 
 main_out tint_symbol_inner(thread tint_private_vars_struct* const tint_private_vars) {
   main_1(tint_private_vars);
-  main_out const tint_symbol_2 = {.gl_Position=(*(tint_private_vars)).gl_Position};
+  main_out const tint_symbol_2 = main_out{.gl_Position=(*(tint_private_vars)).gl_Position};
   return tint_symbol_2;
 }
 
diff --git a/test/tint/struct/type_initializer.wgsl.expected.msl b/test/tint/struct/type_initializer.wgsl.expected.msl
index 0b63ad8..d02bb89 100644
--- a/test/tint/struct/type_initializer.wgsl.expected.msl
+++ b/test/tint/struct/type_initializer.wgsl.expected.msl
@@ -40,25 +40,25 @@
   int const x = 42;
   S1 const empty = S1{};
   S1 const nonempty = S1{.a=1, .b=2, .c=3, .d=4};
-  S1 const nonempty_with_expr = {.a=1, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nonempty.d};
+  S1 const nonempty_with_expr = S1{.a=1, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nonempty.d};
   S3 const nested_empty = S3{};
   S3 const nested_nonempty = S3{.g=1, .h=S1{.a=2, .b=3, .c=4, .d=5}, .i=S2{.e=6, .f=S1{.a=7, .b=8, .c=9, .d=10}}};
-  S1 const tint_symbol_1 = {.a=2, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nested_nonempty.i.f.d};
-  S2 const tint_symbol_2 = {.e=6, .f=nonempty};
-  S3 const nested_nonempty_with_expr = {.g=1, .h=tint_symbol_1, .i=tint_symbol_2};
+  S1 const tint_symbol_1 = S1{.a=2, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nested_nonempty.i.f.d};
+  S2 const tint_symbol_2 = S2{.e=6, .f=nonempty};
+  S3 const nested_nonempty_with_expr = S3{.g=1, .h=tint_symbol_1, .i=tint_symbol_2};
   int const subexpr_empty = 0;
   int const subexpr_nonempty = 2;
-  S1 const tint_symbol_3 = {.a=1, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nonempty.d};
+  S1 const tint_symbol_3 = S1{.a=1, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nonempty.d};
   int const subexpr_nonempty_with_expr = tint_symbol_3.c;
   S1 const subexpr_nested_empty = S1{};
   S1 const subexpr_nested_nonempty = S1{.a=2, .b=3, .c=4, .d=5};
-  S1 const tint_symbol_4 = {.a=2, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nested_nonempty.i.f.d};
-  S2 const tint_symbol_5 = {.e=1, .f=tint_symbol_4};
+  S1 const tint_symbol_4 = S1{.a=2, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nested_nonempty.i.f.d};
+  S2 const tint_symbol_5 = S2{.e=1, .f=tint_symbol_4};
   S1 const subexpr_nested_nonempty_with_expr = tint_symbol_5.f;
   tint_array<T, 2> const aosoa_empty = tint_array<T, 2>{};
   tint_array<T, 2> const aosoa_nonempty = tint_array<T, 2>{T{.a=tint_array<int, 2>{1, 2}}, T{.a=tint_array<int, 2>{3, 4}}};
   tint_array<int, 2> const tint_symbol_6 = tint_array<int, 2>{1, as_type<int>((as_type<uint>(aosoa_nonempty[0].a[0]) + as_type<uint>(1)))};
-  T const tint_symbol_7 = {.a=tint_symbol_6};
+  T const tint_symbol_7 = T{.a=tint_symbol_6};
   tint_array<T, 2> const aosoa_nonempty_with_expr = tint_array<T, 2>{tint_symbol_7, aosoa_nonempty[1]};
   return;
 }
diff --git a/test/tint/types/functions/shader_io/compute_input_builtins_struct.wgsl.expected.msl b/test/tint/types/functions/shader_io/compute_input_builtins_struct.wgsl.expected.msl
index dc5f7ca..2fdfb04 100644
--- a/test/tint/types/functions/shader_io/compute_input_builtins_struct.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/compute_input_builtins_struct.wgsl.expected.msl
@@ -14,7 +14,7 @@
 }
 
 kernel void tint_symbol(uint3 local_invocation_id [[thread_position_in_threadgroup]], uint local_invocation_index [[thread_index_in_threadgroup]], uint3 global_invocation_id [[thread_position_in_grid]], uint3 workgroup_id [[threadgroup_position_in_grid]], uint3 num_workgroups [[threadgroups_per_grid]]) {
-  ComputeInputs const tint_symbol_1 = {.local_invocation_id=local_invocation_id, .local_invocation_index=local_invocation_index, .global_invocation_id=global_invocation_id, .workgroup_id=workgroup_id, .num_workgroups=num_workgroups};
+  ComputeInputs const tint_symbol_1 = ComputeInputs{.local_invocation_id=local_invocation_id, .local_invocation_index=local_invocation_index, .global_invocation_id=global_invocation_id, .workgroup_id=workgroup_id, .num_workgroups=num_workgroups};
   tint_symbol_inner(tint_symbol_1);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/compute_input_mixed.wgsl.expected.msl b/test/tint/types/functions/shader_io/compute_input_mixed.wgsl.expected.msl
index 1f5d646..9b7cdb2 100644
--- a/test/tint/types/functions/shader_io/compute_input_mixed.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/compute_input_mixed.wgsl.expected.msl
@@ -14,8 +14,8 @@
 }
 
 kernel void tint_symbol(uint3 local_invocation_id [[thread_position_in_threadgroup]], uint local_invocation_index [[thread_index_in_threadgroup]], uint3 global_invocation_id [[thread_position_in_grid]], uint3 workgroup_id [[threadgroup_position_in_grid]]) {
-  ComputeInputs0 const tint_symbol_1 = {.local_invocation_id=local_invocation_id};
-  ComputeInputs1 const tint_symbol_2 = {.workgroup_id=workgroup_id};
+  ComputeInputs0 const tint_symbol_1 = ComputeInputs0{.local_invocation_id=local_invocation_id};
+  ComputeInputs1 const tint_symbol_2 = ComputeInputs1{.workgroup_id=workgroup_id};
   tint_symbol_inner(tint_symbol_1, local_invocation_index, global_invocation_id, tint_symbol_2);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/compute_subgroup_builtins_struct.wgsl.expected.msl b/test/tint/types/functions/shader_io/compute_subgroup_builtins_struct.wgsl.expected.msl
index d5f1182..fe8631c 100644
--- a/test/tint/types/functions/shader_io/compute_subgroup_builtins_struct.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/compute_subgroup_builtins_struct.wgsl.expected.msl
@@ -28,7 +28,7 @@
 }
 
 kernel void tint_symbol(device tint_symbol_4* tint_symbol_3 [[buffer(0)]], uint subgroup_invocation_id [[thread_index_in_simdgroup]], uint subgroup_size [[threads_per_simdgroup]]) {
-  ComputeInputs const tint_symbol_1 = {.subgroup_invocation_id=subgroup_invocation_id, .subgroup_size=subgroup_size};
+  ComputeInputs const tint_symbol_1 = ComputeInputs{.subgroup_invocation_id=subgroup_invocation_id, .subgroup_size=subgroup_size};
   tint_symbol_inner(tint_symbol_1, &((*(tint_symbol_3)).arr));
   return;
 }
diff --git a/test/tint/types/functions/shader_io/fragment_f16_io_polyfill.wgsl.expected.msl b/test/tint/types/functions/shader_io/fragment_f16_io_polyfill.wgsl.expected.msl
index c07c23c..b516965 100644
--- a/test/tint/types/functions/shader_io/fragment_f16_io_polyfill.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/fragment_f16_io_polyfill.wgsl.expected.msl
@@ -17,7 +17,7 @@
 };
 
 Outputs frag_main_inner(half loc1, half4 loc2) {
-  Outputs const tint_symbol_3 = {.a=(loc1 * 2.0h), .b=(loc2 * 3.0h)};
+  Outputs const tint_symbol_3 = Outputs{.a=(loc1 * 2.0h), .b=(loc2 * 3.0h)};
   return tint_symbol_3;
 }
 
diff --git a/test/tint/types/functions/shader_io/fragment_input_builtins_struct.wgsl.expected.msl b/test/tint/types/functions/shader_io/fragment_input_builtins_struct.wgsl.expected.msl
index 4915bec..7043b6f 100644
--- a/test/tint/types/functions/shader_io/fragment_input_builtins_struct.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_builtins_struct.wgsl.expected.msl
@@ -16,7 +16,7 @@
 }
 
 fragment void tint_symbol(float4 position [[position]], bool front_facing [[front_facing]], uint sample_index [[sample_id]], uint sample_mask [[sample_mask]]) {
-  FragmentInputs const tint_symbol_1 = {.position=position, .front_facing=front_facing, .sample_index=sample_index, .sample_mask=sample_mask};
+  FragmentInputs const tint_symbol_1 = FragmentInputs{.position=position, .front_facing=front_facing, .sample_index=sample_index, .sample_mask=sample_mask};
   tint_symbol_inner(tint_symbol_1);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/fragment_input_locations_struct.wgsl.expected.msl b/test/tint/types/functions/shader_io/fragment_input_locations_struct.wgsl.expected.msl
index 3c7f5c4..273741e 100644
--- a/test/tint/types/functions/shader_io/fragment_input_locations_struct.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_locations_struct.wgsl.expected.msl
@@ -23,7 +23,7 @@
 }
 
 fragment void tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  FragmentInputs const tint_symbol_3 = {.loc0=tint_symbol_1.loc0, .loc1=tint_symbol_1.loc1, .loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3};
+  FragmentInputs const tint_symbol_3 = FragmentInputs{.loc0=tint_symbol_1.loc0, .loc1=tint_symbol_1.loc1, .loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3};
   tint_symbol_inner(tint_symbol_3);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/fragment_input_locations_struct_f16.wgsl.expected.msl b/test/tint/types/functions/shader_io/fragment_input_locations_struct_f16.wgsl.expected.msl
index 0e8299d..8f22e13 100644
--- a/test/tint/types/functions/shader_io/fragment_input_locations_struct_f16.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_locations_struct_f16.wgsl.expected.msl
@@ -29,7 +29,7 @@
 }
 
 fragment void tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  FragmentInputs const tint_symbol_3 = {.loc0=tint_symbol_1.loc0, .loc1=tint_symbol_1.loc1, .loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3, .loc4=tint_symbol_1.loc4, .loc5=tint_symbol_1.loc5};
+  FragmentInputs const tint_symbol_3 = FragmentInputs{.loc0=tint_symbol_1.loc0, .loc1=tint_symbol_1.loc1, .loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3, .loc4=tint_symbol_1.loc4, .loc5=tint_symbol_1.loc5};
   tint_symbol_inner(tint_symbol_3);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/fragment_input_mixed.wgsl.expected.msl b/test/tint/types/functions/shader_io/fragment_input_mixed.wgsl.expected.msl
index 5756387..ac9e925 100644
--- a/test/tint/types/functions/shader_io/fragment_input_mixed.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_mixed.wgsl.expected.msl
@@ -30,8 +30,8 @@
 }
 
 fragment void tint_symbol(float4 position [[position]], bool front_facing [[front_facing]], uint sample_index [[sample_id]], uint sample_mask [[sample_mask]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  FragmentInputs0 const tint_symbol_3 = {.position=position, .loc0=tint_symbol_1.loc0};
-  FragmentInputs1 const tint_symbol_4 = {.loc3=tint_symbol_1.loc3, .sample_mask=sample_mask};
+  FragmentInputs0 const tint_symbol_3 = FragmentInputs0{.position=position, .loc0=tint_symbol_1.loc0};
+  FragmentInputs1 const tint_symbol_4 = FragmentInputs1{.loc3=tint_symbol_1.loc3, .sample_mask=sample_mask};
   tint_symbol_inner(tint_symbol_3, front_facing, tint_symbol_1.loc1, sample_index, tint_symbol_4, tint_symbol_1.loc2);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/fragment_input_mixed_f16.wgsl.expected.msl b/test/tint/types/functions/shader_io/fragment_input_mixed_f16.wgsl.expected.msl
index fc4df0d..9f07793 100644
--- a/test/tint/types/functions/shader_io/fragment_input_mixed_f16.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_mixed_f16.wgsl.expected.msl
@@ -35,8 +35,8 @@
 }
 
 fragment void tint_symbol(float4 position [[position]], bool front_facing [[front_facing]], uint sample_index [[sample_id]], uint sample_mask [[sample_mask]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  FragmentInputs0 const tint_symbol_3 = {.position=position, .loc0=tint_symbol_1.loc0};
-  FragmentInputs1 const tint_symbol_4 = {.loc3=tint_symbol_1.loc3, .loc5=tint_symbol_1.loc5, .sample_mask=sample_mask};
+  FragmentInputs0 const tint_symbol_3 = FragmentInputs0{.position=position, .loc0=tint_symbol_1.loc0};
+  FragmentInputs1 const tint_symbol_4 = FragmentInputs1{.loc3=tint_symbol_1.loc3, .loc5=tint_symbol_1.loc5, .sample_mask=sample_mask};
   tint_symbol_inner(tint_symbol_3, front_facing, tint_symbol_1.loc1, sample_index, tint_symbol_4, tint_symbol_1.loc2, tint_symbol_1.loc4);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/fragment_subgroup_builtins_struct.wgsl.expected.msl b/test/tint/types/functions/shader_io/fragment_subgroup_builtins_struct.wgsl.expected.msl
index d5a469a1..f423b1d 100644
--- a/test/tint/types/functions/shader_io/fragment_subgroup_builtins_struct.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/fragment_subgroup_builtins_struct.wgsl.expected.msl
@@ -28,7 +28,7 @@
 }
 
 fragment void tint_symbol(device tint_symbol_4* tint_symbol_3 [[buffer(0)]], uint subgroup_invocation_id [[thread_index_in_simdgroup]], uint subgroup_size [[threads_per_simdgroup]]) {
-  FragmentInputs const tint_symbol_1 = {.subgroup_invocation_id=subgroup_invocation_id, .subgroup_size=subgroup_size};
+  FragmentInputs const tint_symbol_1 = FragmentInputs{.subgroup_invocation_id=subgroup_invocation_id, .subgroup_size=subgroup_size};
   tint_symbol_inner(tint_symbol_1, &((*(tint_symbol_3)).arr));
   return;
 }
diff --git a/test/tint/types/functions/shader_io/interpolate_input_struct.wgsl.expected.msl b/test/tint/types/functions/shader_io/interpolate_input_struct.wgsl.expected.msl
index 0ebceec..4ab4fc6 100644
--- a/test/tint/types/functions/shader_io/interpolate_input_struct.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/interpolate_input_struct.wgsl.expected.msl
@@ -31,7 +31,7 @@
 }
 
 fragment void tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  In const tint_symbol_3 = {.none=tint_symbol_1.none, .flat=tint_symbol_1.flat, .perspective_center=tint_symbol_1.perspective_center, .perspective_centroid=tint_symbol_1.perspective_centroid, .perspective_sample=tint_symbol_1.perspective_sample, .linear_center=tint_symbol_1.linear_center, .linear_centroid=tint_symbol_1.linear_centroid, .linear_sample=tint_symbol_1.linear_sample, .perspective_default=tint_symbol_1.perspective_default, .linear_default=tint_symbol_1.linear_default};
+  In const tint_symbol_3 = In{.none=tint_symbol_1.none, .flat=tint_symbol_1.flat, .perspective_center=tint_symbol_1.perspective_center, .perspective_centroid=tint_symbol_1.perspective_centroid, .perspective_sample=tint_symbol_1.perspective_sample, .linear_center=tint_symbol_1.linear_center, .linear_centroid=tint_symbol_1.linear_centroid, .linear_sample=tint_symbol_1.linear_sample, .perspective_default=tint_symbol_1.perspective_default, .linear_default=tint_symbol_1.linear_default};
   tint_symbol_inner(tint_symbol_3);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/interpolate_integers.wgsl.expected.msl b/test/tint/types/functions/shader_io/interpolate_integers.wgsl.expected.msl
index 2bc52db..3f54950 100644
--- a/test/tint/types/functions/shader_io/interpolate_integers.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/interpolate_integers.wgsl.expected.msl
@@ -49,7 +49,7 @@
 }
 
 fragment tint_symbol_3 frag_main(float4 pos [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  Interface const tint_symbol_5 = {.i=tint_symbol_1.i, .u=tint_symbol_1.u, .vi=tint_symbol_1.vi, .vu=tint_symbol_1.vu, .pos=pos};
+  Interface const tint_symbol_5 = Interface{.i=tint_symbol_1.i, .u=tint_symbol_1.u, .vi=tint_symbol_1.vi, .vu=tint_symbol_1.vu, .pos=pos};
   int const inner_result_1 = frag_main_inner(tint_symbol_5);
   tint_symbol_3 wrapper_result_1 = {};
   wrapper_result_1.value = inner_result_1;
diff --git a/test/tint/types/functions/shader_io/shared_struct_different_stages.wgsl.expected.msl b/test/tint/types/functions/shader_io/shared_struct_different_stages.wgsl.expected.msl
index 60742fa..8fd2456 100644
--- a/test/tint/types/functions/shader_io/shared_struct_different_stages.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_different_stages.wgsl.expected.msl
@@ -38,7 +38,7 @@
 }
 
 fragment void frag_main(float4 pos [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  Interface const tint_symbol_4 = {.col1=tint_symbol_1.col1, .col2=tint_symbol_1.col2, .pos=pos};
+  Interface const tint_symbol_4 = Interface{.col1=tint_symbol_1.col1, .col2=tint_symbol_1.col2, .pos=pos};
   frag_main_inner(tint_symbol_4);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/shared_struct_different_stages_f16.wgsl.expected.msl b/test/tint/types/functions/shader_io/shared_struct_different_stages_f16.wgsl.expected.msl
index b68cc0b..333c9b6 100644
--- a/test/tint/types/functions/shader_io/shared_struct_different_stages_f16.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_different_stages_f16.wgsl.expected.msl
@@ -38,7 +38,7 @@
 }
 
 fragment void frag_main(float4 pos [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  Interface const tint_symbol_4 = {.col1=tint_symbol_1.col1, .col2=tint_symbol_1.col2, .pos=pos};
+  Interface const tint_symbol_4 = Interface{.col1=tint_symbol_1.col1, .col2=tint_symbol_1.col2, .pos=pos};
   frag_main_inner(tint_symbol_4);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/shared_struct_helper_function.wgsl.expected.msl b/test/tint/types/functions/shader_io/shared_struct_helper_function.wgsl.expected.msl
index e2f4365..b72ab86 100644
--- a/test/tint/types/functions/shader_io/shared_struct_helper_function.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_helper_function.wgsl.expected.msl
@@ -7,7 +7,7 @@
 };
 
 VertexOutput foo(float x) {
-  VertexOutput const tint_symbol_2 = {.pos=float4(x, x, x, 1.0f), .loc0=42};
+  VertexOutput const tint_symbol_2 = VertexOutput{.pos=float4(x, x, x, 1.0f), .loc0=42};
   return tint_symbol_2;
 }
 
diff --git a/test/tint/types/functions/shader_io/shared_struct_storage_buffer.wgsl.expected.msl b/test/tint/types/functions/shader_io/shared_struct_storage_buffer.wgsl.expected.msl
index ca6913c..9762358 100644
--- a/test/tint/types/functions/shader_io/shared_struct_storage_buffer.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_storage_buffer.wgsl.expected.msl
@@ -41,7 +41,7 @@
 }
 
 fragment void frag_main(device S* tint_symbol_4 [[buffer(0)]], float4 v [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
-  S const tint_symbol_2 = {.f=tint_symbol.f, .u=tint_symbol.u, .v=v};
+  S const tint_symbol_2 = S{.f=tint_symbol.f, .u=tint_symbol.u, .v=v};
   frag_main_inner(tint_symbol_2, tint_symbol_4);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/shared_struct_storage_buffer_f16.wgsl.expected.msl b/test/tint/types/functions/shader_io/shared_struct_storage_buffer_f16.wgsl.expected.msl
index f5c35d5..bec734a 100644
--- a/test/tint/types/functions/shader_io/shared_struct_storage_buffer_f16.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_storage_buffer_f16.wgsl.expected.msl
@@ -59,7 +59,7 @@
 }
 
 fragment void frag_main(device S_tint_packed_vec3* tint_symbol_4 [[buffer(0)]], float4 v [[position]], tint_symbol_1 tint_symbol [[stage_in]]) {
-  S const tint_symbol_2 = {.f=tint_symbol.f, .u=tint_symbol.u, .v=v, .x=tint_symbol.x, .y=tint_symbol.y};
+  S const tint_symbol_2 = S{.f=tint_symbol.f, .u=tint_symbol.u, .v=v, .x=tint_symbol.x, .y=tint_symbol.y};
   frag_main_inner(tint_symbol_2, tint_symbol_4);
   return;
 }
diff --git a/test/tint/types/functions/shader_io/vertex_input_builtins_struct.wgsl.expected.msl b/test/tint/types/functions/shader_io/vertex_input_builtins_struct.wgsl.expected.msl
index 136d88b..fb82cb2 100644
--- a/test/tint/types/functions/shader_io/vertex_input_builtins_struct.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_builtins_struct.wgsl.expected.msl
@@ -16,7 +16,7 @@
 }
 
 vertex tint_symbol_1 tint_symbol(uint vertex_index [[vertex_id]], uint instance_index [[instance_id]]) {
-  VertexInputs const tint_symbol_2 = {.vertex_index=vertex_index, .instance_index=instance_index};
+  VertexInputs const tint_symbol_2 = VertexInputs{.vertex_index=vertex_index, .instance_index=instance_index};
   float4 const inner_result = tint_symbol_inner(tint_symbol_2);
   tint_symbol_1 wrapper_result = {};
   wrapper_result.value = inner_result;
diff --git a/test/tint/types/functions/shader_io/vertex_input_locations_struct.wgsl.expected.msl b/test/tint/types/functions/shader_io/vertex_input_locations_struct.wgsl.expected.msl
index d0fcffe..4928e1e 100644
--- a/test/tint/types/functions/shader_io/vertex_input_locations_struct.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_locations_struct.wgsl.expected.msl
@@ -28,7 +28,7 @@
 }
 
 vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  VertexInputs const tint_symbol_4 = {.loc0=tint_symbol_1.loc0, .loc1=tint_symbol_1.loc1, .loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3};
+  VertexInputs const tint_symbol_4 = VertexInputs{.loc0=tint_symbol_1.loc0, .loc1=tint_symbol_1.loc1, .loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3};
   float4 const inner_result = tint_symbol_inner(tint_symbol_4);
   tint_symbol_3 wrapper_result = {};
   wrapper_result.value = inner_result;
diff --git a/test/tint/types/functions/shader_io/vertex_input_locations_struct_f16.wgsl.expected.msl b/test/tint/types/functions/shader_io/vertex_input_locations_struct_f16.wgsl.expected.msl
index 31a38fa..1c43439 100644
--- a/test/tint/types/functions/shader_io/vertex_input_locations_struct_f16.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_locations_struct_f16.wgsl.expected.msl
@@ -34,7 +34,7 @@
 }
 
 vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  VertexInputs const tint_symbol_4 = {.loc0=tint_symbol_1.loc0, .loc1=tint_symbol_1.loc1, .loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3, .loc4=tint_symbol_1.loc4, .loc5=tint_symbol_1.loc5};
+  VertexInputs const tint_symbol_4 = VertexInputs{.loc0=tint_symbol_1.loc0, .loc1=tint_symbol_1.loc1, .loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3, .loc4=tint_symbol_1.loc4, .loc5=tint_symbol_1.loc5};
   float4 const inner_result = tint_symbol_inner(tint_symbol_4);
   tint_symbol_3 wrapper_result = {};
   wrapper_result.value = inner_result;
diff --git a/test/tint/types/functions/shader_io/vertex_input_mixed.wgsl.expected.msl b/test/tint/types/functions/shader_io/vertex_input_mixed.wgsl.expected.msl
index 1ce7b01..e7d5dba 100644
--- a/test/tint/types/functions/shader_io/vertex_input_mixed.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_mixed.wgsl.expected.msl
@@ -32,8 +32,8 @@
 }
 
 vertex tint_symbol_3 tint_symbol(uint vertex_index [[vertex_id]], uint instance_index [[instance_id]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  VertexInputs0 const tint_symbol_4 = {.vertex_index=vertex_index, .loc0=tint_symbol_1.loc0};
-  VertexInputs1 const tint_symbol_5 = {.loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3};
+  VertexInputs0 const tint_symbol_4 = VertexInputs0{.vertex_index=vertex_index, .loc0=tint_symbol_1.loc0};
+  VertexInputs1 const tint_symbol_5 = VertexInputs1{.loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3};
   float4 const inner_result = tint_symbol_inner(tint_symbol_4, tint_symbol_1.loc1, instance_index, tint_symbol_5);
   tint_symbol_3 wrapper_result = {};
   wrapper_result.value = inner_result;
diff --git a/test/tint/types/functions/shader_io/vertex_input_mixed_f16.wgsl.expected.msl b/test/tint/types/functions/shader_io/vertex_input_mixed_f16.wgsl.expected.msl
index 0140da6..f6c2c76 100644
--- a/test/tint/types/functions/shader_io/vertex_input_mixed_f16.wgsl.expected.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_mixed_f16.wgsl.expected.msl
@@ -37,8 +37,8 @@
 }
 
 vertex tint_symbol_3 tint_symbol(uint vertex_index [[vertex_id]], uint instance_index [[instance_id]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  VertexInputs0 const tint_symbol_4 = {.vertex_index=vertex_index, .loc0=tint_symbol_1.loc0};
-  VertexInputs1 const tint_symbol_5 = {.loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3, .loc5=tint_symbol_1.loc5};
+  VertexInputs0 const tint_symbol_4 = VertexInputs0{.vertex_index=vertex_index, .loc0=tint_symbol_1.loc0};
+  VertexInputs1 const tint_symbol_5 = VertexInputs1{.loc2=tint_symbol_1.loc2, .loc3=tint_symbol_1.loc3, .loc5=tint_symbol_1.loc5};
   float4 const inner_result = tint_symbol_inner(tint_symbol_4, tint_symbol_1.loc1, instance_index, tint_symbol_5, tint_symbol_1.loc4);
   tint_symbol_3 wrapper_result = {};
   wrapper_result.value = inner_result;