diff --git a/test/tint/access/let/matrix.wgsl b/test/tint/access/let/matrix.wgsl
index 3d96fba..e8a783c 100644
--- a/test/tint/access/let/matrix.wgsl
+++ b/test/tint/access/let/matrix.wgsl
@@ -1,6 +1,10 @@
+@group(0) @binding(0) var<storage, read_write> s: f32;
+
 @compute @workgroup_size(1)
 fn main() {
   let m : mat3x3<f32> = mat3x3<f32>(vec3<f32>(1., 2., 3.), vec3<f32>(4., 5., 6.), vec3<f32>(7., 8., 9.));
   let v : vec3<f32> = m[1];
   let f : f32 = v[1];
+
+  s = f;
 }
diff --git a/test/tint/access/let/matrix.wgsl.expected.dxc.hlsl b/test/tint/access/let/matrix.wgsl.expected.dxc.hlsl
index 38129cf..10d9f08 100644
--- a/test/tint/access/let/matrix.wgsl.expected.dxc.hlsl
+++ b/test/tint/access/let/matrix.wgsl.expected.dxc.hlsl
@@ -1,7 +1,10 @@
+RWByteAddressBuffer s : register(u0);
+
 [numthreads(1, 1, 1)]
 void main() {
   const float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
   const float3 v = m[1];
   const float f = v[1];
+  s.Store(0u, asuint(f));
   return;
 }
diff --git a/test/tint/access/let/matrix.wgsl.expected.fxc.hlsl b/test/tint/access/let/matrix.wgsl.expected.fxc.hlsl
index 38129cf..10d9f08 100644
--- a/test/tint/access/let/matrix.wgsl.expected.fxc.hlsl
+++ b/test/tint/access/let/matrix.wgsl.expected.fxc.hlsl
@@ -1,7 +1,10 @@
+RWByteAddressBuffer s : register(u0);
+
 [numthreads(1, 1, 1)]
 void main() {
   const float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
   const float3 v = m[1];
   const float f = v[1];
+  s.Store(0u, asuint(f));
   return;
 }
diff --git a/test/tint/access/let/matrix.wgsl.expected.glsl b/test/tint/access/let/matrix.wgsl.expected.glsl
index 0add115..5296123 100644
--- a/test/tint/access/let/matrix.wgsl.expected.glsl
+++ b/test/tint/access/let/matrix.wgsl.expected.glsl
@@ -1,9 +1,14 @@
 #version 310 es
 
+layout(binding = 0, std430) buffer s_block_ssbo {
+  float inner;
+} s;
+
 void tint_symbol() {
   mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
   vec3 v = m[1];
   float f = v[1];
+  s.inner = f;
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/access/let/matrix.wgsl.expected.msl b/test/tint/access/let/matrix.wgsl.expected.msl
index f8f945d..6f2e4ee 100644
--- a/test/tint/access/let/matrix.wgsl.expected.msl
+++ b/test/tint/access/let/matrix.wgsl.expected.msl
@@ -1,10 +1,11 @@
 #include <metal_stdlib>
 
 using namespace metal;
-kernel void tint_symbol() {
+kernel void tint_symbol(device float* tint_symbol_1 [[buffer(0)]]) {
   float3x3 const m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
   float3 const v = m[1];
   float const f = v[1];
+  *(tint_symbol_1) = f;
   return;
 }
 
diff --git a/test/tint/access/let/matrix.wgsl.expected.spvasm b/test/tint/access/let/matrix.wgsl.expected.spvasm
index cbc5aca..f537d63 100644
--- a/test/tint/access/let/matrix.wgsl.expected.spvasm
+++ b/test/tint/access/let/matrix.wgsl.expected.spvasm
@@ -1,36 +1,51 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 25
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
                OpEntryPoint GLCompute %main "main"
                OpExecutionMode %main LocalSize 1 1 1
+               OpName %s_block "s_block"
+               OpMemberName %s_block 0 "inner"
+               OpName %s "s"
                OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
+               OpDecorate %s_block Block
+               OpMemberDecorate %s_block 0 Offset 0
+               OpDecorate %s DescriptorSet 0
+               OpDecorate %s Binding 0
       %float = OpTypeFloat 32
+    %s_block = OpTypeStruct %float
+%_ptr_StorageBuffer_s_block = OpTypePointer StorageBuffer %s_block
+          %s = OpVariable %_ptr_StorageBuffer_s_block StorageBuffer
+       %void = OpTypeVoid
+          %5 = OpTypeFunction %void
     %v3float = OpTypeVector %float 3
 %mat3v3float = OpTypeMatrix %v3float 3
     %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
-         %11 = OpConstantComposite %v3float %float_1 %float_2 %float_3
+         %14 = OpConstantComposite %v3float %float_1 %float_2 %float_3
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
     %float_6 = OpConstant %float 6
-         %15 = OpConstantComposite %v3float %float_4 %float_5 %float_6
+         %18 = OpConstantComposite %v3float %float_4 %float_5 %float_6
     %float_7 = OpConstant %float 7
     %float_8 = OpConstant %float 8
     %float_9 = OpConstant %float 9
-         %19 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-         %20 = OpConstantComposite %mat3v3float %11 %15 %19
+         %22 = OpConstantComposite %v3float %float_7 %float_8 %float_9
+         %23 = OpConstantComposite %mat3v3float %14 %18 %22
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-       %main = OpFunction %void None %1
-          %4 = OpLabel
-         %23 = OpCompositeExtract %v3float %20 1
-         %24 = OpCompositeExtract %float %23 1
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+       %main = OpFunction %void None %5
+          %8 = OpLabel
+         %26 = OpCompositeExtract %v3float %23 1
+         %27 = OpCompositeExtract %float %26 1
+         %31 = OpAccessChain %_ptr_StorageBuffer_float %s %uint_0
+               OpStore %31 %27
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/access/let/matrix.wgsl.expected.wgsl b/test/tint/access/let/matrix.wgsl.expected.wgsl
index bdfd207..e33c47d 100644
--- a/test/tint/access/let/matrix.wgsl.expected.wgsl
+++ b/test/tint/access/let/matrix.wgsl.expected.wgsl
@@ -1,6 +1,9 @@
+@group(0) @binding(0) var<storage, read_write> s : f32;
+
 @compute @workgroup_size(1)
 fn main() {
   let m : mat3x3<f32> = mat3x3<f32>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(4.0, 5.0, 6.0), vec3<f32>(7.0, 8.0, 9.0));
   let v : vec3<f32> = m[1];
   let f : f32 = v[1];
+  s = f;
 }
diff --git a/test/tint/access/let/vector.wgsl b/test/tint/access/let/vector.wgsl
index 87604a9..a6b8f53 100644
--- a/test/tint/access/let/vector.wgsl
+++ b/test/tint/access/let/vector.wgsl
@@ -1,7 +1,11 @@
+@group(0) @binding(0) var<storage, read_write> s: vec3f;
+
 @compute @workgroup_size(1)
 fn main() {
   let v : vec3<f32> = vec3<f32>(1., 2., 3.);
   let scalar : f32 = v.y;
   let swizzle2 : vec2<f32> = v.xz;
   let swizzle3 : vec3<f32> = v.xzy;
+
+  s = vec3(scalar) + vec3(swizzle2, 1) + swizzle3;
 }
diff --git a/test/tint/access/let/vector.wgsl.expected.dxc.hlsl b/test/tint/access/let/vector.wgsl.expected.dxc.hlsl
index d86c8ed..89c501a 100644
--- a/test/tint/access/let/vector.wgsl.expected.dxc.hlsl
+++ b/test/tint/access/let/vector.wgsl.expected.dxc.hlsl
@@ -1,8 +1,11 @@
+RWByteAddressBuffer s : register(u0);
+
 [numthreads(1, 1, 1)]
 void main() {
   const float3 v = float3(1.0f, 2.0f, 3.0f);
   const float scalar = v.y;
   const float2 swizzle2 = v.xz;
   const float3 swizzle3 = v.xzy;
+  s.Store3(0u, asuint(((float3((scalar).xxx) + float3(swizzle2, 1.0f)) + swizzle3)));
   return;
 }
diff --git a/test/tint/access/let/vector.wgsl.expected.fxc.hlsl b/test/tint/access/let/vector.wgsl.expected.fxc.hlsl
index d86c8ed..89c501a 100644
--- a/test/tint/access/let/vector.wgsl.expected.fxc.hlsl
+++ b/test/tint/access/let/vector.wgsl.expected.fxc.hlsl
@@ -1,8 +1,11 @@
+RWByteAddressBuffer s : register(u0);
+
 [numthreads(1, 1, 1)]
 void main() {
   const float3 v = float3(1.0f, 2.0f, 3.0f);
   const float scalar = v.y;
   const float2 swizzle2 = v.xz;
   const float3 swizzle3 = v.xzy;
+  s.Store3(0u, asuint(((float3((scalar).xxx) + float3(swizzle2, 1.0f)) + swizzle3)));
   return;
 }
diff --git a/test/tint/access/let/vector.wgsl.expected.glsl b/test/tint/access/let/vector.wgsl.expected.glsl
index 4f43d1f..45fe702 100644
--- a/test/tint/access/let/vector.wgsl.expected.glsl
+++ b/test/tint/access/let/vector.wgsl.expected.glsl
@@ -1,10 +1,15 @@
 #version 310 es
 
+layout(binding = 0, std430) buffer s_block_ssbo {
+  vec3 inner;
+} s;
+
 void tint_symbol() {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   float scalar = v.y;
   vec2 swizzle2 = v.xz;
   vec3 swizzle3 = v.xzy;
+  s.inner = ((vec3(scalar) + vec3(swizzle2, 1.0f)) + swizzle3);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/access/let/vector.wgsl.expected.msl b/test/tint/access/let/vector.wgsl.expected.msl
index 2c7a0d5..e0842c6 100644
--- a/test/tint/access/let/vector.wgsl.expected.msl
+++ b/test/tint/access/let/vector.wgsl.expected.msl
@@ -1,11 +1,12 @@
 #include <metal_stdlib>
 
 using namespace metal;
-kernel void tint_symbol() {
+kernel void tint_symbol(device packed_float3* tint_symbol_1 [[buffer(0)]]) {
   float3 const v = float3(1.0f, 2.0f, 3.0f);
   float const scalar = v[1];
   float2 const swizzle2 = v.xz;
   float3 const swizzle3 = v.xzy;
+  *(tint_symbol_1) = packed_float3(((float3(scalar) + float3(swizzle2, 1.0f)) + swizzle3));
   return;
 }
 
diff --git a/test/tint/access/let/vector.wgsl.expected.spvasm b/test/tint/access/let/vector.wgsl.expected.spvasm
index 9de59d2..e4d25ff 100644
--- a/test/tint/access/let/vector.wgsl.expected.spvasm
+++ b/test/tint/access/let/vector.wgsl.expected.spvasm
@@ -1,26 +1,47 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 28
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
                OpEntryPoint GLCompute %main "main"
                OpExecutionMode %main LocalSize 1 1 1
+               OpName %s_block "s_block"
+               OpMemberName %s_block 0 "inner"
+               OpName %s "s"
                OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
+               OpDecorate %s_block Block
+               OpMemberDecorate %s_block 0 Offset 0
+               OpDecorate %s DescriptorSet 0
+               OpDecorate %s Binding 0
       %float = OpTypeFloat 32
     %v3float = OpTypeVector %float 3
+    %s_block = OpTypeStruct %v3float
+%_ptr_StorageBuffer_s_block = OpTypePointer StorageBuffer %s_block
+          %s = OpVariable %_ptr_StorageBuffer_s_block StorageBuffer
+       %void = OpTypeVoid
+          %6 = OpTypeFunction %void
     %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
-         %10 = OpConstantComposite %v3float %float_1 %float_2 %float_3
+         %13 = OpConstantComposite %v3float %float_1 %float_2 %float_3
     %v2float = OpTypeVector %float 2
-       %main = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpCompositeExtract %float %10 1
-         %13 = OpVectorShuffle %v2float %10 %10 0 2
-         %14 = OpVectorShuffle %v3float %10 %10 0 2 1
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+       %main = OpFunction %void None %6
+          %9 = OpLabel
+         %14 = OpCompositeExtract %float %13 1
+         %16 = OpVectorShuffle %v2float %13 %13 0 2
+         %17 = OpVectorShuffle %v3float %13 %13 0 2 1
+         %21 = OpAccessChain %_ptr_StorageBuffer_v3float %s %uint_0
+         %22 = OpCompositeConstruct %v3float %14 %14 %14
+         %23 = OpCompositeExtract %float %16 0
+         %24 = OpCompositeExtract %float %16 1
+         %25 = OpCompositeConstruct %v3float %23 %24 %float_1
+         %26 = OpFAdd %v3float %22 %25
+         %27 = OpFAdd %v3float %26 %17
+               OpStore %21 %27
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/access/let/vector.wgsl.expected.wgsl b/test/tint/access/let/vector.wgsl.expected.wgsl
index 6646867..aa937a7 100644
--- a/test/tint/access/let/vector.wgsl.expected.wgsl
+++ b/test/tint/access/let/vector.wgsl.expected.wgsl
@@ -1,7 +1,10 @@
+@group(0) @binding(0) var<storage, read_write> s : vec3f;
+
 @compute @workgroup_size(1)
 fn main() {
   let v : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
   let scalar : f32 = v.y;
   let swizzle2 : vec2<f32> = v.xz;
   let swizzle3 : vec3<f32> = v.xzy;
+  s = ((vec3(scalar) + vec3(swizzle2, 1)) + swizzle3);
 }
diff --git a/test/tint/access/var/matrix.wgsl b/test/tint/access/var/matrix.wgsl
index 92db7c0..2cef97d 100644
--- a/test/tint/access/var/matrix.wgsl
+++ b/test/tint/access/var/matrix.wgsl
@@ -1,6 +1,10 @@
+@group(0) @binding(0) var<storage, read_write> s: f32;
+
 @compute @workgroup_size(1)
 fn main() {
   var m : mat3x3<f32>;
   let v : vec3<f32> = m[1];
   let f : f32 = v[1];
+
+  s = f;
 }
diff --git a/test/tint/access/var/matrix.wgsl.expected.dxc.hlsl b/test/tint/access/var/matrix.wgsl.expected.dxc.hlsl
index b402c70..8653170 100644
--- a/test/tint/access/var/matrix.wgsl.expected.dxc.hlsl
+++ b/test/tint/access/var/matrix.wgsl.expected.dxc.hlsl
@@ -1,7 +1,10 @@
+RWByteAddressBuffer s : register(u0);
+
 [numthreads(1, 1, 1)]
 void main() {
   float3x3 m = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   const float3 v = m[1];
   const float f = v[1];
+  s.Store(0u, asuint(f));
   return;
 }
diff --git a/test/tint/access/var/matrix.wgsl.expected.fxc.hlsl b/test/tint/access/var/matrix.wgsl.expected.fxc.hlsl
index b402c70..8653170 100644
--- a/test/tint/access/var/matrix.wgsl.expected.fxc.hlsl
+++ b/test/tint/access/var/matrix.wgsl.expected.fxc.hlsl
@@ -1,7 +1,10 @@
+RWByteAddressBuffer s : register(u0);
+
 [numthreads(1, 1, 1)]
 void main() {
   float3x3 m = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   const float3 v = m[1];
   const float f = v[1];
+  s.Store(0u, asuint(f));
   return;
 }
diff --git a/test/tint/access/var/matrix.wgsl.expected.glsl b/test/tint/access/var/matrix.wgsl.expected.glsl
index 2c0d9cf..7f85a9d 100644
--- a/test/tint/access/var/matrix.wgsl.expected.glsl
+++ b/test/tint/access/var/matrix.wgsl.expected.glsl
@@ -1,9 +1,14 @@
 #version 310 es
 
+layout(binding = 0, std430) buffer s_block_ssbo {
+  float inner;
+} s;
+
 void tint_symbol() {
   mat3 m = mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   vec3 v = m[1];
   float f = v[1];
+  s.inner = f;
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/access/var/matrix.wgsl.expected.msl b/test/tint/access/var/matrix.wgsl.expected.msl
index 95fd2d6..7b13fc3 100644
--- a/test/tint/access/var/matrix.wgsl.expected.msl
+++ b/test/tint/access/var/matrix.wgsl.expected.msl
@@ -1,10 +1,11 @@
 #include <metal_stdlib>
 
 using namespace metal;
-kernel void tint_symbol() {
+kernel void tint_symbol(device float* tint_symbol_1 [[buffer(0)]]) {
   float3x3 m = float3x3(0.0f);
   float3 const v = m[1];
   float const f = v[1];
+  *(tint_symbol_1) = f;
   return;
 }
 
diff --git a/test/tint/access/var/matrix.wgsl.expected.spvasm b/test/tint/access/var/matrix.wgsl.expected.spvasm
index 9d735ff..39846c6 100644
--- a/test/tint/access/var/matrix.wgsl.expected.spvasm
+++ b/test/tint/access/var/matrix.wgsl.expected.spvasm
@@ -1,29 +1,44 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 17
+; Bound: 24
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
                OpEntryPoint GLCompute %main "main"
                OpExecutionMode %main LocalSize 1 1 1
+               OpName %s_block "s_block"
+               OpMemberName %s_block 0 "inner"
+               OpName %s "s"
                OpName %main "main"
                OpName %m "m"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
+               OpDecorate %s_block Block
+               OpMemberDecorate %s_block 0 Offset 0
+               OpDecorate %s DescriptorSet 0
+               OpDecorate %s Binding 0
       %float = OpTypeFloat 32
+    %s_block = OpTypeStruct %float
+%_ptr_StorageBuffer_s_block = OpTypePointer StorageBuffer %s_block
+          %s = OpVariable %_ptr_StorageBuffer_s_block StorageBuffer
+       %void = OpTypeVoid
+          %5 = OpTypeFunction %void
     %v3float = OpTypeVector %float 3
 %mat3v3float = OpTypeMatrix %v3float 3
 %_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
-         %10 = OpConstantNull %mat3v3float
+         %13 = OpConstantNull %mat3v3float
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
 %_ptr_Function_v3float = OpTypePointer Function %v3float
-       %main = OpFunction %void None %1
-          %4 = OpLabel
-          %m = OpVariable %_ptr_Function_mat3v3float Function %10
-         %14 = OpAccessChain %_ptr_Function_v3float %m %int_1
-         %15 = OpLoad %v3float %14
-         %16 = OpCompositeExtract %float %15 1
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+       %main = OpFunction %void None %5
+          %8 = OpLabel
+          %m = OpVariable %_ptr_Function_mat3v3float Function %13
+         %17 = OpAccessChain %_ptr_Function_v3float %m %int_1
+         %18 = OpLoad %v3float %17
+         %19 = OpCompositeExtract %float %18 1
+         %23 = OpAccessChain %_ptr_StorageBuffer_float %s %uint_0
+               OpStore %23 %19
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/access/var/matrix.wgsl.expected.wgsl b/test/tint/access/var/matrix.wgsl.expected.wgsl
index 92db7c0..5fde10b 100644
--- a/test/tint/access/var/matrix.wgsl.expected.wgsl
+++ b/test/tint/access/var/matrix.wgsl.expected.wgsl
@@ -1,6 +1,9 @@
+@group(0) @binding(0) var<storage, read_write> s : f32;
+
 @compute @workgroup_size(1)
 fn main() {
   var m : mat3x3<f32>;
   let v : vec3<f32> = m[1];
   let f : f32 = v[1];
+  s = f;
 }
diff --git a/test/tint/access/var/vector.wgsl b/test/tint/access/var/vector.wgsl
index 8cc17f8..6d217b0 100644
--- a/test/tint/access/var/vector.wgsl
+++ b/test/tint/access/var/vector.wgsl
@@ -1,7 +1,11 @@
+@group(0) @binding(0) var<storage, read_write> s: vec3f;
+
 @compute @workgroup_size(1)
 fn main() {
   var v : vec3<f32>;
   let scalar : f32 = v.y;
   let swizzle2 : vec2<f32> = v.xz;
   let swizzle3 : vec3<f32> = v.xzy;
+
+  s = vec3(scalar) + vec3(swizzle2, 1) + swizzle3;
 }
diff --git a/test/tint/access/var/vector.wgsl.expected.dxc.hlsl b/test/tint/access/var/vector.wgsl.expected.dxc.hlsl
index 8b9f393..bb92af0 100644
--- a/test/tint/access/var/vector.wgsl.expected.dxc.hlsl
+++ b/test/tint/access/var/vector.wgsl.expected.dxc.hlsl
@@ -1,8 +1,11 @@
+RWByteAddressBuffer s : register(u0);
+
 [numthreads(1, 1, 1)]
 void main() {
   float3 v = float3(0.0f, 0.0f, 0.0f);
   const float scalar = v.y;
   const float2 swizzle2 = v.xz;
   const float3 swizzle3 = v.xzy;
+  s.Store3(0u, asuint(((float3((scalar).xxx) + float3(swizzle2, 1.0f)) + swizzle3)));
   return;
 }
diff --git a/test/tint/access/var/vector.wgsl.expected.fxc.hlsl b/test/tint/access/var/vector.wgsl.expected.fxc.hlsl
index 8b9f393..bb92af0 100644
--- a/test/tint/access/var/vector.wgsl.expected.fxc.hlsl
+++ b/test/tint/access/var/vector.wgsl.expected.fxc.hlsl
@@ -1,8 +1,11 @@
+RWByteAddressBuffer s : register(u0);
+
 [numthreads(1, 1, 1)]
 void main() {
   float3 v = float3(0.0f, 0.0f, 0.0f);
   const float scalar = v.y;
   const float2 swizzle2 = v.xz;
   const float3 swizzle3 = v.xzy;
+  s.Store3(0u, asuint(((float3((scalar).xxx) + float3(swizzle2, 1.0f)) + swizzle3)));
   return;
 }
diff --git a/test/tint/access/var/vector.wgsl.expected.glsl b/test/tint/access/var/vector.wgsl.expected.glsl
index bfb9f6b..6268525 100644
--- a/test/tint/access/var/vector.wgsl.expected.glsl
+++ b/test/tint/access/var/vector.wgsl.expected.glsl
@@ -1,10 +1,15 @@
 #version 310 es
 
+layout(binding = 0, std430) buffer s_block_ssbo {
+  vec3 inner;
+} s;
+
 void tint_symbol() {
   vec3 v = vec3(0.0f, 0.0f, 0.0f);
   float scalar = v.y;
   vec2 swizzle2 = v.xz;
   vec3 swizzle3 = v.xzy;
+  s.inner = ((vec3(scalar) + vec3(swizzle2, 1.0f)) + swizzle3);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/access/var/vector.wgsl.expected.msl b/test/tint/access/var/vector.wgsl.expected.msl
index 270c842..7020eed 100644
--- a/test/tint/access/var/vector.wgsl.expected.msl
+++ b/test/tint/access/var/vector.wgsl.expected.msl
@@ -1,11 +1,12 @@
 #include <metal_stdlib>
 
 using namespace metal;
-kernel void tint_symbol() {
+kernel void tint_symbol(device packed_float3* tint_symbol_1 [[buffer(0)]]) {
   float3 v = 0.0f;
   float const scalar = v[1];
   float2 const swizzle2 = v.xz;
   float3 const swizzle3 = v.xzy;
+  *(tint_symbol_1) = packed_float3(((float3(scalar) + float3(swizzle2, 1.0f)) + swizzle3));
   return;
 }
 
diff --git a/test/tint/access/var/vector.wgsl.expected.spvasm b/test/tint/access/var/vector.wgsl.expected.spvasm
index 74418bb..33e465a 100644
--- a/test/tint/access/var/vector.wgsl.expected.spvasm
+++ b/test/tint/access/var/vector.wgsl.expected.spvasm
@@ -1,32 +1,53 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 20
+; Bound: 33
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
                OpEntryPoint GLCompute %main "main"
                OpExecutionMode %main LocalSize 1 1 1
+               OpName %s_block "s_block"
+               OpMemberName %s_block 0 "inner"
+               OpName %s "s"
                OpName %main "main"
                OpName %v "v"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
+               OpDecorate %s_block Block
+               OpMemberDecorate %s_block 0 Offset 0
+               OpDecorate %s DescriptorSet 0
+               OpDecorate %s Binding 0
       %float = OpTypeFloat 32
     %v3float = OpTypeVector %float 3
+    %s_block = OpTypeStruct %v3float
+%_ptr_StorageBuffer_s_block = OpTypePointer StorageBuffer %s_block
+          %s = OpVariable %_ptr_StorageBuffer_s_block StorageBuffer
+       %void = OpTypeVoid
+          %6 = OpTypeFunction %void
 %_ptr_Function_v3float = OpTypePointer Function %v3float
-          %9 = OpConstantNull %v3float
+         %12 = OpConstantNull %v3float
        %uint = OpTypeInt 32 0
      %uint_1 = OpConstant %uint 1
 %_ptr_Function_float = OpTypePointer Function %float
     %v2float = OpTypeVector %float 2
-       %main = OpFunction %void None %1
-          %4 = OpLabel
-          %v = OpVariable %_ptr_Function_v3float Function %9
-         %13 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %14 = OpLoad %float %13
-         %15 = OpLoad %v3float %v
-         %17 = OpVectorShuffle %v2float %15 %15 0 2
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+    %float_1 = OpConstant %float 1
+       %main = OpFunction %void None %6
+          %9 = OpLabel
+          %v = OpVariable %_ptr_Function_v3float Function %12
+         %16 = OpAccessChain %_ptr_Function_float %v %uint_1
+         %17 = OpLoad %float %16
          %18 = OpLoad %v3float %v
-         %19 = OpVectorShuffle %v3float %18 %18 0 2 1
+         %20 = OpVectorShuffle %v2float %18 %18 0 2
+         %21 = OpLoad %v3float %v
+         %22 = OpVectorShuffle %v3float %21 %21 0 2 1
+         %25 = OpAccessChain %_ptr_StorageBuffer_v3float %s %uint_0
+         %26 = OpCompositeConstruct %v3float %17 %17 %17
+         %27 = OpCompositeExtract %float %20 0
+         %28 = OpCompositeExtract %float %20 1
+         %30 = OpCompositeConstruct %v3float %27 %28 %float_1
+         %31 = OpFAdd %v3float %26 %30
+         %32 = OpFAdd %v3float %31 %22
+               OpStore %25 %32
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/access/var/vector.wgsl.expected.wgsl b/test/tint/access/var/vector.wgsl.expected.wgsl
index 8cc17f8..37ac31d 100644
--- a/test/tint/access/var/vector.wgsl.expected.wgsl
+++ b/test/tint/access/var/vector.wgsl.expected.wgsl
@@ -1,7 +1,10 @@
+@group(0) @binding(0) var<storage, read_write> s : vec3f;
+
 @compute @workgroup_size(1)
 fn main() {
   var v : vec3<f32>;
   let scalar : f32 = v.y;
   let swizzle2 : vec2<f32> = v.xz;
   let swizzle3 : vec3<f32> = v.xzy;
+  s = ((vec3(scalar) + vec3(swizzle2, 1)) + swizzle3);
 }
