test/tint/expressions/type_ctor: Use 'var' instead of 'let'

Module-scope 'let' is getting replaced by 'const'. For all backends,
'const' will be inlined into the place of usage, making most of these
tests produce no output (if replaced with 'const'). Instead switch to
emitting with 'var'.

Bug: tint:1580
Change-Id: Ied5ddf9cdb7fbd3cef8e7b0c6f4983748aaa3d07
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/94688
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@chromium.org>
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl
index 3249340..195dba5 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl
@@ -1,5 +1,5 @@
-let m = mat2x2(mat2x2<f32>(0.0f, 1.0f,
-                           2.0f, 3.0f));
+var<private> m = mat2x2(mat2x2<f32>(0.0f, 1.0f,
+                                    2.0f, 3.0f));
 
 fn f() -> mat2x2<f32> {
     let m_1 = mat2x2(m);
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.glsl
index 9f37260..f820bd4 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
 mat2 f() {
-  mat2 m_1 = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+  mat2 m_1 = mat2(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.hlsl
index 4e8ff0b..738053f 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+static float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
 
 float2x2 f() {
-  const float2x2 m_1 = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+  const float2x2 m_1 = float2x2(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.msl
index c464132..dcbe1b0 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
-
 float2x2 f() {
-  float2x2 const m_1 = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+  thread float2x2 tint_symbol = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+  float2x2 const m_1 = float2x2(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.spvasm
index b2cc1c4..07b1ba1 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 18
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -19,15 +19,18 @@
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
           %9 = OpConstantComposite %v2float %float_2 %float_3
-          %m = OpConstantComposite %mat2v2float %6 %9
+         %10 = OpConstantComposite %mat2v2float %6 %9
+%_ptr_Private_mat2v2float = OpTypePointer Private %mat2v2float
+          %m = OpVariable %_ptr_Private_mat2v2float Private %10
        %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-         %15 = OpTypeFunction %mat2v2float
-%unused_entry_point = OpFunction %void None %11
-         %14 = OpLabel
+         %13 = OpTypeFunction %void
+         %17 = OpTypeFunction %mat2v2float
+%unused_entry_point = OpFunction %void None %13
+         %16 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat2v2float None %15
-         %17 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat2v2float None %17
+         %19 = OpLabel
+         %21 = OpLoad %mat2v2float %m
+               OpReturnValue %21
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.wgsl
index 27431a6..5950793 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat2x2(mat2x2<f32>(0.0f, 1.0f, 2.0f, 3.0f));
+var<private> m = mat2x2(mat2x2<f32>(0.0f, 1.0f, 2.0f, 3.0f));
 
 fn f() -> mat2x2<f32> {
   let m_1 = mat2x2(m);
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl
index d2f7f21..8f8c2f9 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x2<f32>(0.0f, 1.0f,
-                    2.0f, 3.0f);
+var<private> m = mat2x2<f32>(0.0f, 1.0f,
+                             2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.glsl
index f2eeed5..cb3e1d2 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.hlsl
index c2e0d31..28c5d1f 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+static float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.msl
index b62a321..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.spvasm
index 126308b..c04960a 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 17
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -18,10 +18,12 @@
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
           %9 = OpConstantComposite %v2float %float_2 %float_3
-          %m = OpConstantComposite %mat2v2float %6 %9
+         %10 = OpConstantComposite %mat2v2float %6 %9
+%_ptr_Private_mat2v2float = OpTypePointer Private %mat2v2float
+          %m = OpVariable %_ptr_Private_mat2v2float Private %10
        %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %11
-         %14 = OpLabel
+         %13 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %13
+         %16 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.wgsl
index 39cec79..027ab22 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x2<f32>(0.0f, 1.0f, 2.0f, 3.0f);
+var<private> m = mat2x2<f32>(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl
index 3841d4e..6912816 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x2<f32>(vec2<f32>(0.0f, 1.0f),
-                    vec2<f32>(2.0f, 3.0f));
+var<private> m = mat2x2<f32>(vec2<f32>(0.0f, 1.0f),
+                             vec2<f32>(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.glsl
index f2eeed5..cb3e1d2 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.hlsl
index c2e0d31..28c5d1f 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+static float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.msl
index b62a321..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.spvasm
index 126308b..c04960a 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 17
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -18,10 +18,12 @@
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
           %9 = OpConstantComposite %v2float %float_2 %float_3
-          %m = OpConstantComposite %mat2v2float %6 %9
+         %10 = OpConstantComposite %mat2v2float %6 %9
+%_ptr_Private_mat2v2float = OpTypePointer Private %mat2v2float
+          %m = OpVariable %_ptr_Private_mat2v2float Private %10
        %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %11
-         %14 = OpLabel
+         %13 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %13
+         %16 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.wgsl
index ff4e276..b3b5d6e 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f));
+var<private> m = mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl
index 3b4c5e2..bd51d6b 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl
@@ -1,5 +1,5 @@
-let m = mat2x2(mat2x2(0.0f, 1.0f,
-                      2.0f, 3.0f));
+var<private> m = mat2x2(mat2x2(0.0f, 1.0f,
+                               2.0f, 3.0f));
 
 fn f() -> mat2x2<f32> {
     let m_1 = mat2x2(m);
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.glsl
index 9f37260..f820bd4 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
 mat2 f() {
-  mat2 m_1 = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+  mat2 m_1 = mat2(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.hlsl
index 4e8ff0b..738053f 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+static float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
 
 float2x2 f() {
-  const float2x2 m_1 = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+  const float2x2 m_1 = float2x2(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.msl
index c464132..dcbe1b0 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
-
 float2x2 f() {
-  float2x2 const m_1 = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+  thread float2x2 tint_symbol = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+  float2x2 const m_1 = float2x2(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.spvasm
index b2cc1c4..07b1ba1 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 18
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -19,15 +19,18 @@
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
           %9 = OpConstantComposite %v2float %float_2 %float_3
-          %m = OpConstantComposite %mat2v2float %6 %9
+         %10 = OpConstantComposite %mat2v2float %6 %9
+%_ptr_Private_mat2v2float = OpTypePointer Private %mat2v2float
+          %m = OpVariable %_ptr_Private_mat2v2float Private %10
        %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-         %15 = OpTypeFunction %mat2v2float
-%unused_entry_point = OpFunction %void None %11
-         %14 = OpLabel
+         %13 = OpTypeFunction %void
+         %17 = OpTypeFunction %mat2v2float
+%unused_entry_point = OpFunction %void None %13
+         %16 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat2v2float None %15
-         %17 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat2v2float None %17
+         %19 = OpLabel
+         %21 = OpLoad %mat2v2float %m
+               OpReturnValue %21
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.wgsl
index cd44a0f..fb8399a 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat2x2(mat2x2(0.0f, 1.0f, 2.0f, 3.0f));
+var<private> m = mat2x2(mat2x2(0.0f, 1.0f, 2.0f, 3.0f));
 
 fn f() -> mat2x2<f32> {
   let m_1 = mat2x2(m);
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl
index 0195661..99f7353 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x2(0.0, 1.0,
-               2.0, 3.0);
+var<private> m = mat2x2(0.0, 1.0,
+                        2.0, 3.0);
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.glsl
index f2eeed5..cb3e1d2 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.hlsl
index c2e0d31..28c5d1f 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+static float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.msl
index b62a321..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.spvasm
index 126308b..c04960a 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 17
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -18,10 +18,12 @@
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
           %9 = OpConstantComposite %v2float %float_2 %float_3
-          %m = OpConstantComposite %mat2v2float %6 %9
+         %10 = OpConstantComposite %mat2v2float %6 %9
+%_ptr_Private_mat2v2float = OpTypePointer Private %mat2v2float
+          %m = OpVariable %_ptr_Private_mat2v2float Private %10
        %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %11
-         %14 = OpLabel
+         %13 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %13
+         %16 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.wgsl
index e4941d5..e1064e8 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x2(0.0, 1.0, 2.0, 3.0);
+var<private> m = mat2x2(0.0, 1.0, 2.0, 3.0);
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl
index 802bd0b..0fb8992 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x2(0.0f, 1.0f,
-               2.0f, 3.0f);
+var<private> m = mat2x2(0.0f, 1.0f,
+                        2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.glsl
index f2eeed5..cb3e1d2 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.hlsl
index c2e0d31..28c5d1f 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+static float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.msl
index b62a321..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.spvasm
index 126308b..c04960a 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 17
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -18,10 +18,12 @@
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
           %9 = OpConstantComposite %v2float %float_2 %float_3
-          %m = OpConstantComposite %mat2v2float %6 %9
+         %10 = OpConstantComposite %mat2v2float %6 %9
+%_ptr_Private_mat2v2float = OpTypePointer Private %mat2v2float
+          %m = OpVariable %_ptr_Private_mat2v2float Private %10
        %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %11
-         %14 = OpLabel
+         %13 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %13
+         %16 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.wgsl
index 1078c57..4a3c56d 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x2(0.0f, 1.0f, 2.0f, 3.0f);
+var<private> m = mat2x2(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl
index 0698377..8c1ad0e 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x2(vec2(0.0, 1.0),
-               vec2(2.0, 3.0));
+var<private> m = mat2x2(vec2(0.0, 1.0),
+                        vec2(2.0, 3.0));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.glsl
index f2eeed5..cb3e1d2 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.hlsl
index c2e0d31..28c5d1f 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+static float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.msl
index b62a321..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.spvasm
index 126308b..c04960a 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 17
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -18,10 +18,12 @@
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
           %9 = OpConstantComposite %v2float %float_2 %float_3
-          %m = OpConstantComposite %mat2v2float %6 %9
+         %10 = OpConstantComposite %mat2v2float %6 %9
+%_ptr_Private_mat2v2float = OpTypePointer Private %mat2v2float
+          %m = OpVariable %_ptr_Private_mat2v2float Private %10
        %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %11
-         %14 = OpLabel
+         %13 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %13
+         %16 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.wgsl
index 873422d..38d5333 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x2(vec2(0.0, 1.0), vec2(2.0, 3.0));
+var<private> m = mat2x2(vec2(0.0, 1.0), vec2(2.0, 3.0));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl
index f802821..c592c6c 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x2(vec2<f32>(0.0, 1.0),
-               vec2<f32>(2.0, 3.0));
+var<private> m = mat2x2(vec2<f32>(0.0, 1.0),
+                        vec2<f32>(2.0, 3.0));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.glsl
index f2eeed5..cb3e1d2 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
+mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.hlsl
index c2e0d31..28c5d1f 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
+static float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.msl
index b62a321..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x2 m = float2x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.spvasm
index 126308b..c04960a 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 17
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -18,10 +18,12 @@
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
           %9 = OpConstantComposite %v2float %float_2 %float_3
-          %m = OpConstantComposite %mat2v2float %6 %9
+         %10 = OpConstantComposite %mat2v2float %6 %9
+%_ptr_Private_mat2v2float = OpTypePointer Private %mat2v2float
+          %m = OpVariable %_ptr_Private_mat2v2float Private %10
        %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %11
-         %14 = OpLabel
+         %13 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %13
+         %16 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.wgsl
index 9a1f4c6..48f4288 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x2(vec2<f32>(0.0, 1.0), vec2<f32>(2.0, 3.0));
+var<private> m = mat2x2(vec2<f32>(0.0, 1.0), vec2<f32>(2.0, 3.0));
diff --git a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl
index 7d23bcf..8f77ea2 100644
--- a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl
@@ -1 +1 @@
-let m = mat2x2<f32>();
+var<private> m = mat2x2<f32>();
diff --git a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.glsl
index a496f95..bd82c13 100644
--- a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2 m = mat2(vec2(0.0f), vec2(0.0f));
+mat2 m = mat2(vec2(0.0f), vec2(0.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.hlsl
index a38b32b..1140175 100644
--- a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x2 m = float2x2((0.0f).xx, (0.0f).xx);
+static float2x2 m = float2x2((0.0f).xx, (0.0f).xx);
diff --git a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.msl
index 9076107..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x2 m = float2x2(float2(0.0f), float2(0.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.spvasm
index 849d656..cd2602a 100644
--- a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 11
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,10 +12,12 @@
       %float = OpTypeFloat 32
     %v2float = OpTypeVector %float 2
 %mat2v2float = OpTypeMatrix %v2float 2
-          %m = OpConstantNull %mat2v2float
+          %4 = OpConstantNull %mat2v2float
+%_ptr_Private_mat2v2float = OpTypePointer Private %mat2v2float
+          %m = OpVariable %_ptr_Private_mat2v2float Private %4
        %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %5
-          %8 = OpLabel
+          %7 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %7
+         %10 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.wgsl
index 7d23bcf..8f77ea2 100644
--- a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x2<f32>();
+var<private> m = mat2x2<f32>();
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl
index dff89c8..2c63c91 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl
@@ -1,5 +1,5 @@
-let m = mat2x3(mat2x3<f32>(0.0f, 1.0f, 2.0f,
-                           3.0f, 4.0f, 5.0f));
+var<private> m = mat2x3(mat2x3<f32>(0.0f, 1.0f, 2.0f,
+                                    3.0f, 4.0f, 5.0f));
 
 fn f() -> mat2x3<f32> {
     let m_1 = mat2x3(m);
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.glsl
index 8b1bb8d..03da8f6 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
 mat2x3 f() {
-  mat2x3 m_1 = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+  mat2x3 m_1 = mat2x3(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.hlsl
index 96f3472..4fee374 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+static float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
 
 float2x3 f() {
-  const float2x3 m_1 = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+  const float2x3 m_1 = float2x3(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.msl
index e0619e1..03b6fd7 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
-
 float2x3 f() {
-  float2x3 const m_1 = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+  thread float2x3 tint_symbol = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+  float2x3 const m_1 = float2x3(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.spvasm
index 075746a..8c235ee 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 20
+; Bound: 24
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -21,15 +21,18 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %11 = OpConstantComposite %v3float %float_3 %float_4 %float_5
-          %m = OpConstantComposite %mat2v3float %7 %11
+         %12 = OpConstantComposite %mat2v3float %7 %11
+%_ptr_Private_mat2v3float = OpTypePointer Private %mat2v3float
+          %m = OpVariable %_ptr_Private_mat2v3float Private %12
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-         %17 = OpTypeFunction %mat2v3float
-%unused_entry_point = OpFunction %void None %13
-         %16 = OpLabel
+         %15 = OpTypeFunction %void
+         %19 = OpTypeFunction %mat2v3float
+%unused_entry_point = OpFunction %void None %15
+         %18 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat2v3float None %17
-         %19 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat2v3float None %19
+         %21 = OpLabel
+         %23 = OpLoad %mat2v3float %m
+               OpReturnValue %23
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.wgsl
index 5c9282f..e934f83 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat2x3(mat2x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f));
+var<private> m = mat2x3(mat2x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f));
 
 fn f() -> mat2x3<f32> {
   let m_1 = mat2x3(m);
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl
index 4f73038..eb4e496 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x3<f32>(0.0f, 1.0f, 2.0f,
-                    3.0f, 4.0f, 5.0f);
+var<private> m = mat2x3<f32>(0.0f, 1.0f, 2.0f,
+                             3.0f, 4.0f, 5.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.glsl
index 919400a..275e22b 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.hlsl
index fb12d01..c2d1be7 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+static float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.msl
index 443c61f..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.spvasm
index c4ce1bd..578716d 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 17
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -20,10 +20,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %11 = OpConstantComposite %v3float %float_3 %float_4 %float_5
-          %m = OpConstantComposite %mat2v3float %7 %11
+         %12 = OpConstantComposite %mat2v3float %7 %11
+%_ptr_Private_mat2v3float = OpTypePointer Private %mat2v3float
+          %m = OpVariable %_ptr_Private_mat2v3float Private %12
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %13
-         %16 = OpLabel
+         %15 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %15
+         %18 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.wgsl
index 6de0a5f..a886d09 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
+var<private> m = mat2x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl
index 736b493..2439d6d 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f),
-                    vec3<f32>(3.0f, 4.0f, 5.0f));
+var<private> m = mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f),
+                             vec3<f32>(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.glsl
index 919400a..275e22b 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.hlsl
index fb12d01..c2d1be7 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+static float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.msl
index 443c61f..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.spvasm
index c4ce1bd..578716d 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 17
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -20,10 +20,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %11 = OpConstantComposite %v3float %float_3 %float_4 %float_5
-          %m = OpConstantComposite %mat2v3float %7 %11
+         %12 = OpConstantComposite %mat2v3float %7 %11
+%_ptr_Private_mat2v3float = OpTypePointer Private %mat2v3float
+          %m = OpVariable %_ptr_Private_mat2v3float Private %12
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %13
-         %16 = OpLabel
+         %15 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %15
+         %18 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.wgsl
index 6bfd682..79d55b3 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f));
+var<private> m = mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl
index 93c90e7..6babe00 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl
@@ -1,5 +1,5 @@
-let m = mat2x3(mat2x3(0.0f, 1.0f, 2.0f,
-                      3.0f, 4.0f, 5.0f));
+var<private> m = mat2x3(mat2x3(0.0f, 1.0f, 2.0f,
+                               3.0f, 4.0f, 5.0f));
 
 fn f() -> mat2x3<f32> {
     let m_1 = mat2x3(m);
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.glsl
index 8b1bb8d..03da8f6 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
 mat2x3 f() {
-  mat2x3 m_1 = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+  mat2x3 m_1 = mat2x3(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.hlsl
index 96f3472..4fee374 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+static float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
 
 float2x3 f() {
-  const float2x3 m_1 = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+  const float2x3 m_1 = float2x3(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.msl
index e0619e1..03b6fd7 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
-
 float2x3 f() {
-  float2x3 const m_1 = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+  thread float2x3 tint_symbol = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+  float2x3 const m_1 = float2x3(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.spvasm
index 075746a..8c235ee 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 20
+; Bound: 24
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -21,15 +21,18 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %11 = OpConstantComposite %v3float %float_3 %float_4 %float_5
-          %m = OpConstantComposite %mat2v3float %7 %11
+         %12 = OpConstantComposite %mat2v3float %7 %11
+%_ptr_Private_mat2v3float = OpTypePointer Private %mat2v3float
+          %m = OpVariable %_ptr_Private_mat2v3float Private %12
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-         %17 = OpTypeFunction %mat2v3float
-%unused_entry_point = OpFunction %void None %13
-         %16 = OpLabel
+         %15 = OpTypeFunction %void
+         %19 = OpTypeFunction %mat2v3float
+%unused_entry_point = OpFunction %void None %15
+         %18 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat2v3float None %17
-         %19 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat2v3float None %19
+         %21 = OpLabel
+         %23 = OpLoad %mat2v3float %m
+               OpReturnValue %23
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.wgsl
index f0a3182..a6cf4e6 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat2x3(mat2x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f));
+var<private> m = mat2x3(mat2x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f));
 
 fn f() -> mat2x3<f32> {
   let m_1 = mat2x3(m);
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl
index dc7f65f..c13c5b1 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x3(0.0, 1.0, 2.0,
-               3.0, 4.0, 5.0);
+var<private> m = mat2x3(0.0, 1.0, 2.0,
+                        3.0, 4.0, 5.0);
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.glsl
index 919400a..275e22b 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.hlsl
index fb12d01..c2d1be7 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+static float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.msl
index 443c61f..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.spvasm
index c4ce1bd..578716d 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 17
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -20,10 +20,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %11 = OpConstantComposite %v3float %float_3 %float_4 %float_5
-          %m = OpConstantComposite %mat2v3float %7 %11
+         %12 = OpConstantComposite %mat2v3float %7 %11
+%_ptr_Private_mat2v3float = OpTypePointer Private %mat2v3float
+          %m = OpVariable %_ptr_Private_mat2v3float Private %12
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %13
-         %16 = OpLabel
+         %15 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %15
+         %18 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.wgsl
index 0be516f..2dae43b 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x3(0.0, 1.0, 2.0, 3.0, 4.0, 5.0);
+var<private> m = mat2x3(0.0, 1.0, 2.0, 3.0, 4.0, 5.0);
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl
index 7107d4b..79031cb 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x3(0.0f, 1.0f, 2.0f,
-               3.0f, 4.0f, 5.0f);
+var<private> m = mat2x3(0.0f, 1.0f, 2.0f,
+                        3.0f, 4.0f, 5.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.glsl
index 919400a..275e22b 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.hlsl
index fb12d01..c2d1be7 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+static float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.msl
index 443c61f..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.spvasm
index c4ce1bd..578716d 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 17
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -20,10 +20,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %11 = OpConstantComposite %v3float %float_3 %float_4 %float_5
-          %m = OpConstantComposite %mat2v3float %7 %11
+         %12 = OpConstantComposite %mat2v3float %7 %11
+%_ptr_Private_mat2v3float = OpTypePointer Private %mat2v3float
+          %m = OpVariable %_ptr_Private_mat2v3float Private %12
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %13
-         %16 = OpLabel
+         %15 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %15
+         %18 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.wgsl
index c5a27d6..d183723 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
+var<private> m = mat2x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl
index 24f8a6c..bb589a1 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x3(vec3(0.0, 1.0, 2.0),
-               vec3(3.0, 4.0, 5.0));
+var<private> m = mat2x3(vec3(0.0, 1.0, 2.0),
+                        vec3(3.0, 4.0, 5.0));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.glsl
index 919400a..275e22b 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.hlsl
index fb12d01..c2d1be7 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+static float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.msl
index 443c61f..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.spvasm
index c4ce1bd..578716d 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 17
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -20,10 +20,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %11 = OpConstantComposite %v3float %float_3 %float_4 %float_5
-          %m = OpConstantComposite %mat2v3float %7 %11
+         %12 = OpConstantComposite %mat2v3float %7 %11
+%_ptr_Private_mat2v3float = OpTypePointer Private %mat2v3float
+          %m = OpVariable %_ptr_Private_mat2v3float Private %12
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %13
-         %16 = OpLabel
+         %15 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %15
+         %18 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.wgsl
index a23b1e2..b194c30 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x3(vec3(0.0, 1.0, 2.0), vec3(3.0, 4.0, 5.0));
+var<private> m = mat2x3(vec3(0.0, 1.0, 2.0), vec3(3.0, 4.0, 5.0));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl
index 5b8ed92..ab3d403 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x3(vec3<f32>(0.0f, 1.0f, 2.0f),
-               vec3<f32>(3.0f, 4.0f, 5.0f));
+var<private> m = mat2x3(vec3<f32>(0.0f, 1.0f, 2.0f),
+                        vec3<f32>(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.glsl
index 919400a..275e22b 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.hlsl
index fb12d01..c2d1be7 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
+static float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.msl
index 443c61f..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x3 m = float2x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.spvasm
index c4ce1bd..578716d 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 17
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -20,10 +20,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %11 = OpConstantComposite %v3float %float_3 %float_4 %float_5
-          %m = OpConstantComposite %mat2v3float %7 %11
+         %12 = OpConstantComposite %mat2v3float %7 %11
+%_ptr_Private_mat2v3float = OpTypePointer Private %mat2v3float
+          %m = OpVariable %_ptr_Private_mat2v3float Private %12
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %13
-         %16 = OpLabel
+         %15 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %15
+         %18 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.wgsl
index bbc2d2a..709c5a8 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x3(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f));
+var<private> m = mat2x3(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl
index 52d5139..e9b1825 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl
@@ -1 +1 @@
-let m = mat2x3<f32>();
+var<private> m = mat2x3<f32>();
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.glsl
index 147f758..6d2c8f5 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x3 m = mat2x3(vec3(0.0f), vec3(0.0f));
+mat2x3 m = mat2x3(vec3(0.0f), vec3(0.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.hlsl
index c8959e9..3fe1f11 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x3 m = float2x3((0.0f).xxx, (0.0f).xxx);
+static float2x3 m = float2x3((0.0f).xxx, (0.0f).xxx);
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.msl
index 05150a2..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x3 m = float2x3(float3(0.0f), float3(0.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.spvasm
index c4d0912..ee69713 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 11
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,10 +12,12 @@
       %float = OpTypeFloat 32
     %v3float = OpTypeVector %float 3
 %mat2v3float = OpTypeMatrix %v3float 2
-          %m = OpConstantNull %mat2v3float
+          %4 = OpConstantNull %mat2v3float
+%_ptr_Private_mat2v3float = OpTypePointer Private %mat2v3float
+          %m = OpVariable %_ptr_Private_mat2v3float Private %4
        %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %5
-          %8 = OpLabel
+          %7 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %7
+         %10 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.wgsl
index 52d5139..e9b1825 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x3<f32>();
+var<private> m = mat2x3<f32>();
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl
index 3d3f9c2..c8f8bc5 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl
@@ -1,5 +1,5 @@
-let m = mat2x4(mat2x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
-                           4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat2x4(mat2x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
+                                    4.0f, 5.0f, 6.0f, 7.0f));
 
 fn f() -> mat2x4<f32> {
     let m_1 = mat2x4(m);
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.glsl
index 4f30e2f..06eabf0 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
 mat2x4 f() {
-  mat2x4 m_1 = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+  mat2x4 m_1 = mat2x4(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.hlsl
index 96e6b19..b37e3b7 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+static float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
 
 float2x4 f() {
-  const float2x4 m_1 = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+  const float2x4 m_1 = float2x4(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.msl
index d3c4da9..63b4e2a 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
-
 float2x4 f() {
-  float2x4 const m_1 = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+  thread float2x4 tint_symbol = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+  float2x4 const m_1 = float2x4(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.spvasm
index 7cab4d6..6dbb4ce 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 22
+; Bound: 26
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -23,15 +23,18 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %13 = OpConstantComposite %v4float %float_4 %float_5 %float_6 %float_7
-          %m = OpConstantComposite %mat2v4float %8 %13
+         %14 = OpConstantComposite %mat2v4float %8 %13
+%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
+          %m = OpVariable %_ptr_Private_mat2v4float Private %14
        %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-         %19 = OpTypeFunction %mat2v4float
-%unused_entry_point = OpFunction %void None %15
-         %18 = OpLabel
+         %17 = OpTypeFunction %void
+         %21 = OpTypeFunction %mat2v4float
+%unused_entry_point = OpFunction %void None %17
+         %20 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat2v4float None %19
-         %21 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat2v4float None %21
+         %23 = OpLabel
+         %25 = OpLoad %mat2v4float %m
+               OpReturnValue %25
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.wgsl
index f31ac21..476ed2c 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat2x4(mat2x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat2x4(mat2x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f));
 
 fn f() -> mat2x4<f32> {
   let m_1 = mat2x4(m);
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl
index 56d25f5..a65308e 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
-                    4.0f, 5.0f, 6.0f, 7.0f);
+var<private> m = mat2x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
+                             4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.glsl
index 461bebd..15a4535 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.hlsl
index 5ed2b1b..7f63f53 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+static float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.msl
index b309bde..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.spvasm
index 39a2a21..c97b583 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 19
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,10 +22,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %13 = OpConstantComposite %v4float %float_4 %float_5 %float_6 %float_7
-          %m = OpConstantComposite %mat2v4float %8 %13
+         %14 = OpConstantComposite %mat2v4float %8 %13
+%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
+          %m = OpVariable %_ptr_Private_mat2v4float Private %14
        %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %15
-         %18 = OpLabel
+         %17 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %17
+         %20 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.wgsl
index f342196..0eea600 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
+var<private> m = mat2x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl
index 5465c36..00a8d11 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
-                    vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
+                             vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.glsl
index 461bebd..15a4535 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.hlsl
index 5ed2b1b..7f63f53 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+static float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.msl
index b309bde..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.spvasm
index 39a2a21..c97b583 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 19
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,10 +22,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %13 = OpConstantComposite %v4float %float_4 %float_5 %float_6 %float_7
-          %m = OpConstantComposite %mat2v4float %8 %13
+         %14 = OpConstantComposite %mat2v4float %8 %13
+%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
+          %m = OpVariable %_ptr_Private_mat2v4float Private %14
        %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %15
-         %18 = OpLabel
+         %17 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %17
+         %20 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.wgsl
index be987bb..760becb 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl
index cc6f3fd..345e097 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl
@@ -1,5 +1,5 @@
-let m = mat2x4(mat2x4(0.0f, 1.0f, 2.0f, 3.0f,
-                      4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat2x4(mat2x4(0.0f, 1.0f, 2.0f, 3.0f,
+                               4.0f, 5.0f, 6.0f, 7.0f));
 
 fn f() -> mat2x4<f32> {
     let m_1 = mat2x4(m);
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.glsl
index 4f30e2f..06eabf0 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
 mat2x4 f() {
-  mat2x4 m_1 = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+  mat2x4 m_1 = mat2x4(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.hlsl
index 96e6b19..b37e3b7 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+static float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
 
 float2x4 f() {
-  const float2x4 m_1 = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+  const float2x4 m_1 = float2x4(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.msl
index d3c4da9..63b4e2a 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
-
 float2x4 f() {
-  float2x4 const m_1 = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+  thread float2x4 tint_symbol = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+  float2x4 const m_1 = float2x4(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.spvasm
index 7cab4d6..6dbb4ce 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 22
+; Bound: 26
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -23,15 +23,18 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %13 = OpConstantComposite %v4float %float_4 %float_5 %float_6 %float_7
-          %m = OpConstantComposite %mat2v4float %8 %13
+         %14 = OpConstantComposite %mat2v4float %8 %13
+%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
+          %m = OpVariable %_ptr_Private_mat2v4float Private %14
        %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-         %19 = OpTypeFunction %mat2v4float
-%unused_entry_point = OpFunction %void None %15
-         %18 = OpLabel
+         %17 = OpTypeFunction %void
+         %21 = OpTypeFunction %mat2v4float
+%unused_entry_point = OpFunction %void None %17
+         %20 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat2v4float None %19
-         %21 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat2v4float None %21
+         %23 = OpLabel
+         %25 = OpLoad %mat2v4float %m
+               OpReturnValue %25
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.wgsl
index 644d882..3e388e1 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat2x4(mat2x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat2x4(mat2x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f));
 
 fn f() -> mat2x4<f32> {
   let m_1 = mat2x4(m);
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl
index 81abe9f..0fb3201 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x4(0.0, 1.0, 2.0, 3.0,
-               4.0, 5.0, 6.0, 7.0);
+var<private> m = mat2x4(0.0, 1.0, 2.0, 3.0,
+                        4.0, 5.0, 6.0, 7.0);
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.glsl
index 461bebd..15a4535 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.hlsl
index 5ed2b1b..7f63f53 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+static float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.msl
index b309bde..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.spvasm
index 39a2a21..c97b583 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 19
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,10 +22,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %13 = OpConstantComposite %v4float %float_4 %float_5 %float_6 %float_7
-          %m = OpConstantComposite %mat2v4float %8 %13
+         %14 = OpConstantComposite %mat2v4float %8 %13
+%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
+          %m = OpVariable %_ptr_Private_mat2v4float Private %14
        %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %15
-         %18 = OpLabel
+         %17 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %17
+         %20 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.wgsl
index bcb4dfe..7103b47 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x4(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0);
+var<private> m = mat2x4(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0);
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl
index 394b079..ea9a9c4 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x4(0.0f, 1.0f, 2.0f, 3.0f,
-               4.0f, 5.0f, 6.0f, 7.0f);
+var<private> m = mat2x4(0.0f, 1.0f, 2.0f, 3.0f,
+                        4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.glsl
index 461bebd..15a4535 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.hlsl
index 5ed2b1b..7f63f53 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+static float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.msl
index b309bde..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.spvasm
index 39a2a21..c97b583 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 19
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,10 +22,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %13 = OpConstantComposite %v4float %float_4 %float_5 %float_6 %float_7
-          %m = OpConstantComposite %mat2v4float %8 %13
+         %14 = OpConstantComposite %mat2v4float %8 %13
+%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
+          %m = OpVariable %_ptr_Private_mat2v4float Private %14
        %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %15
-         %18 = OpLabel
+         %17 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %17
+         %20 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.wgsl
index dc53810..7e04fcf 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
+var<private> m = mat2x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl
index e391fbe..db96125 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x4(vec4(0.0, 1.0, 2.0, 3.0),
-               vec4(4.0, 5.0, 6.0, 7.0));
+var<private> m = mat2x4(vec4(0.0, 1.0, 2.0, 3.0),
+                        vec4(4.0, 5.0, 6.0, 7.0));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.glsl
index 461bebd..15a4535 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.hlsl
index 5ed2b1b..7f63f53 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+static float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.msl
index b309bde..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.spvasm
index 39a2a21..c97b583 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 19
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,10 +22,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %13 = OpConstantComposite %v4float %float_4 %float_5 %float_6 %float_7
-          %m = OpConstantComposite %mat2v4float %8 %13
+         %14 = OpConstantComposite %mat2v4float %8 %13
+%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
+          %m = OpVariable %_ptr_Private_mat2v4float Private %14
        %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %15
-         %18 = OpLabel
+         %17 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %17
+         %20 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.wgsl
index 80bb8ca..7f64fdb 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x4(vec4(0.0, 1.0, 2.0, 3.0), vec4(4.0, 5.0, 6.0, 7.0));
+var<private> m = mat2x4(vec4(0.0, 1.0, 2.0, 3.0), vec4(4.0, 5.0, 6.0, 7.0));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl
index 4a9db50..946f9ad 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl
@@ -1,2 +1,2 @@
-let m = mat2x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
-               vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat2x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
+                        vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.glsl
index 461bebd..15a4535 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
+mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.hlsl
index 5ed2b1b..7f63f53 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
+static float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.msl
index b309bde..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x4 m = float2x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.spvasm
index 39a2a21..c97b583 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 19
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,10 +22,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %13 = OpConstantComposite %v4float %float_4 %float_5 %float_6 %float_7
-          %m = OpConstantComposite %mat2v4float %8 %13
+         %14 = OpConstantComposite %mat2v4float %8 %13
+%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
+          %m = OpVariable %_ptr_Private_mat2v4float Private %14
        %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %15
-         %18 = OpLabel
+         %17 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %17
+         %20 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.wgsl
index 99f104b..5e4e09a 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat2x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl
index 6748d70..f9c67c8 100644
--- a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl
@@ -1 +1 @@
-let m = mat2x4<f32>();
+var<private> m = mat2x4<f32>();
diff --git a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.glsl
index 09ae675..addaec5 100644
--- a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat2x4 m = mat2x4(vec4(0.0f), vec4(0.0f));
+mat2x4 m = mat2x4(vec4(0.0f), vec4(0.0f));
diff --git a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.hlsl
index 2879c88..aaeb1e0 100644
--- a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2x4 m = float2x4((0.0f).xxxx, (0.0f).xxxx);
+static float2x4 m = float2x4((0.0f).xxxx, (0.0f).xxxx);
diff --git a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.msl
index 035e80e..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2x4 m = float2x4(float4(0.0f), float4(0.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.spvasm
index b4edef2..edf312f 100644
--- a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 11
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,10 +12,12 @@
       %float = OpTypeFloat 32
     %v4float = OpTypeVector %float 4
 %mat2v4float = OpTypeMatrix %v4float 2
-          %m = OpConstantNull %mat2v4float
+          %4 = OpConstantNull %mat2v4float
+%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
+          %m = OpVariable %_ptr_Private_mat2v4float Private %4
        %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %5
-          %8 = OpLabel
+          %7 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %7
+         %10 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.wgsl
index 6748d70..f9c67c8 100644
--- a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat2x4<f32>();
+var<private> m = mat2x4<f32>();
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl
index 7a14231..53bc3aa 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl
@@ -1,6 +1,6 @@
-let m = mat3x2(mat3x2<f32>(0.0f, 1.0f,
-                           2.0f, 3.0f,
-                           4.0f, 5.0f));
+var<private> m = mat3x2(mat3x2<f32>(0.0f, 1.0f,
+                                    2.0f, 3.0f,
+                                    4.0f, 5.0f));
 
 fn f() -> mat3x2<f32> {
     let m_1 = mat3x2(m);
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.glsl
index e067774..076d424 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
 mat3x2 f() {
-  mat3x2 m_1 = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+  mat3x2 m_1 = mat3x2(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.hlsl
index 5897ac6..6a51b66 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+static float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
 
 float3x2 f() {
-  const float3x2 m_1 = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+  const float3x2 m_1 = float3x2(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.msl
index 43ec396..41fb71e 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
-
 float3x2 f() {
-  float3x2 const m_1 = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+  thread float3x2 tint_symbol = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+  float3x2 const m_1 = float3x2(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.spvasm
index 95ffb2b..2c46731 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 25
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,15 +22,18 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %12 = OpConstantComposite %v2float %float_4 %float_5
-          %m = OpConstantComposite %mat3v2float %6 %9 %12
+         %13 = OpConstantComposite %mat3v2float %6 %9 %12
+%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
+          %m = OpVariable %_ptr_Private_mat3v2float Private %13
        %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-         %18 = OpTypeFunction %mat3v2float
-%unused_entry_point = OpFunction %void None %14
-         %17 = OpLabel
+         %16 = OpTypeFunction %void
+         %20 = OpTypeFunction %mat3v2float
+%unused_entry_point = OpFunction %void None %16
+         %19 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat3v2float None %18
-         %20 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat3v2float None %20
+         %22 = OpLabel
+         %24 = OpLoad %mat3v2float %m
+               OpReturnValue %24
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.wgsl
index 06f3edf..1be72c6 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat3x2(mat3x2<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f));
+var<private> m = mat3x2(mat3x2<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f));
 
 fn f() -> mat3x2<f32> {
   let m_1 = mat3x2(m);
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl
index b6fb489..e724832 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x2<f32>(0.0f, 1.0f,
-                    2.0f, 3.0f,
-                    4.0f, 5.0f);
+var<private> m = mat3x2<f32>(0.0f, 1.0f,
+                             2.0f, 3.0f,
+                             4.0f, 5.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.glsl
index 1447967..3df809b 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.hlsl
index 27568ed..3c86bed 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+static float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.msl
index ae7f33c..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.spvasm
index ba16661..cfc645f 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 18
+; Bound: 20
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -21,10 +21,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %12 = OpConstantComposite %v2float %float_4 %float_5
-          %m = OpConstantComposite %mat3v2float %6 %9 %12
+         %13 = OpConstantComposite %mat3v2float %6 %9 %12
+%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
+          %m = OpVariable %_ptr_Private_mat3v2float Private %13
        %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %14
-         %17 = OpLabel
+         %16 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %16
+         %19 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.wgsl
index c1034f7..14bc7c9 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x2<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
+var<private> m = mat3x2<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl
index 6d080cb..9abe994 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x2<f32>(vec2<f32>(0.0f, 1.0f),
-                    vec2<f32>(2.0f, 3.0f),
-                    vec2<f32>(4.0f, 5.0f));
+var<private> m = mat3x2<f32>(vec2<f32>(0.0f, 1.0f),
+                             vec2<f32>(2.0f, 3.0f),
+                             vec2<f32>(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.glsl
index 1447967..3df809b 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.hlsl
index 27568ed..3c86bed 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+static float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.msl
index ae7f33c..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.spvasm
index ba16661..cfc645f 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 18
+; Bound: 20
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -21,10 +21,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %12 = OpConstantComposite %v2float %float_4 %float_5
-          %m = OpConstantComposite %mat3v2float %6 %9 %12
+         %13 = OpConstantComposite %mat3v2float %6 %9 %12
+%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
+          %m = OpVariable %_ptr_Private_mat3v2float Private %13
        %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %14
-         %17 = OpLabel
+         %16 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %16
+         %19 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.wgsl
index 5ba17fb..6e2dea9 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f));
+var<private> m = mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl
index d77e83b..73d3fd1 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl
@@ -1,6 +1,6 @@
-let m = mat3x2(mat3x2(0.0f, 1.0f,
-                      2.0f, 3.0f,
-                      4.0f, 5.0f));
+var<private> m = mat3x2(mat3x2(0.0f, 1.0f,
+                               2.0f, 3.0f,
+                               4.0f, 5.0f));
 
 fn f() -> mat3x2<f32> {
     let m_1 = mat3x2(m);
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.glsl
index e067774..076d424 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
 mat3x2 f() {
-  mat3x2 m_1 = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+  mat3x2 m_1 = mat3x2(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.hlsl
index 5897ac6..6a51b66 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+static float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
 
 float3x2 f() {
-  const float3x2 m_1 = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+  const float3x2 m_1 = float3x2(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.msl
index 43ec396..41fb71e 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
-
 float3x2 f() {
-  float3x2 const m_1 = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+  thread float3x2 tint_symbol = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+  float3x2 const m_1 = float3x2(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.spvasm
index 95ffb2b..2c46731 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 25
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,15 +22,18 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %12 = OpConstantComposite %v2float %float_4 %float_5
-          %m = OpConstantComposite %mat3v2float %6 %9 %12
+         %13 = OpConstantComposite %mat3v2float %6 %9 %12
+%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
+          %m = OpVariable %_ptr_Private_mat3v2float Private %13
        %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-         %18 = OpTypeFunction %mat3v2float
-%unused_entry_point = OpFunction %void None %14
-         %17 = OpLabel
+         %16 = OpTypeFunction %void
+         %20 = OpTypeFunction %mat3v2float
+%unused_entry_point = OpFunction %void None %16
+         %19 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat3v2float None %18
-         %20 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat3v2float None %20
+         %22 = OpLabel
+         %24 = OpLoad %mat3v2float %m
+               OpReturnValue %24
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.wgsl
index e16eab4..bc65cbb 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat3x2(mat3x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f));
+var<private> m = mat3x2(mat3x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f));
 
 fn f() -> mat3x2<f32> {
   let m_1 = mat3x2(m);
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl
index 6fbe3b8..9507f0e 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x2(0.0, 1.0,
-               2.0, 3.0,
-               4.0, 5.0);
+var<private> m = mat3x2(0.0, 1.0,
+                        2.0, 3.0,
+                        4.0, 5.0);
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.glsl
index 1447967..3df809b 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.hlsl
index 27568ed..3c86bed 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+static float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.msl
index ae7f33c..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.spvasm
index ba16661..cfc645f 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 18
+; Bound: 20
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -21,10 +21,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %12 = OpConstantComposite %v2float %float_4 %float_5
-          %m = OpConstantComposite %mat3v2float %6 %9 %12
+         %13 = OpConstantComposite %mat3v2float %6 %9 %12
+%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
+          %m = OpVariable %_ptr_Private_mat3v2float Private %13
        %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %14
-         %17 = OpLabel
+         %16 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %16
+         %19 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.wgsl
index 4d48f59..28d3915 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x2(0.0, 1.0, 2.0, 3.0, 4.0, 5.0);
+var<private> m = mat3x2(0.0, 1.0, 2.0, 3.0, 4.0, 5.0);
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl
index f64977f..e5f9de6 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x2(0.0f, 1.0f,
-               2.0f, 3.0f,
-               4.0f, 5.0f);
+var<private> m = mat3x2(0.0f, 1.0f,
+                        2.0f, 3.0f,
+                        4.0f, 5.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.glsl
index 1447967..3df809b 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.hlsl
index 27568ed..3c86bed 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+static float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.msl
index ae7f33c..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.spvasm
index ba16661..cfc645f 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 18
+; Bound: 20
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -21,10 +21,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %12 = OpConstantComposite %v2float %float_4 %float_5
-          %m = OpConstantComposite %mat3v2float %6 %9 %12
+         %13 = OpConstantComposite %mat3v2float %6 %9 %12
+%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
+          %m = OpVariable %_ptr_Private_mat3v2float Private %13
        %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %14
-         %17 = OpLabel
+         %16 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %16
+         %19 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.wgsl
index f418892..045b91d 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
+var<private> m = mat3x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl
index 990b243..bb77362 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x2(vec2(0.0, 1.0),
-               vec2(2.0, 3.0),
-               vec2(4.0, 5.0));
+var<private> m = mat3x2(vec2(0.0, 1.0),
+                        vec2(2.0, 3.0),
+                        vec2(4.0, 5.0));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.glsl
index 1447967..3df809b 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.hlsl
index 27568ed..3c86bed 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+static float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.msl
index ae7f33c..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.spvasm
index ba16661..cfc645f 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 18
+; Bound: 20
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -21,10 +21,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %12 = OpConstantComposite %v2float %float_4 %float_5
-          %m = OpConstantComposite %mat3v2float %6 %9 %12
+         %13 = OpConstantComposite %mat3v2float %6 %9 %12
+%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
+          %m = OpVariable %_ptr_Private_mat3v2float Private %13
        %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %14
-         %17 = OpLabel
+         %16 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %16
+         %19 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.wgsl
index b8ff25a..4cb4236 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x2(vec2(0.0, 1.0), vec2(2.0, 3.0), vec2(4.0, 5.0));
+var<private> m = mat3x2(vec2(0.0, 1.0), vec2(2.0, 3.0), vec2(4.0, 5.0));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl
index 287ee1b..029a9b0 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x2(vec2<f32>(0.0f, 1.0f),
-               vec2<f32>(2.0f, 3.0f),
-               vec2<f32>(4.0f, 5.0f));
+var<private> m = mat3x2(vec2<f32>(0.0f, 1.0f),
+                        vec2<f32>(2.0f, 3.0f),
+                        vec2<f32>(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.glsl
index 1447967..3df809b 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
+mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.hlsl
index 27568ed..3c86bed 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
+static float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.msl
index ae7f33c..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x2 m = float3x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.spvasm
index ba16661..cfc645f 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 18
+; Bound: 20
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -21,10 +21,12 @@
     %float_4 = OpConstant %float 4
     %float_5 = OpConstant %float 5
          %12 = OpConstantComposite %v2float %float_4 %float_5
-          %m = OpConstantComposite %mat3v2float %6 %9 %12
+         %13 = OpConstantComposite %mat3v2float %6 %9 %12
+%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
+          %m = OpVariable %_ptr_Private_mat3v2float Private %13
        %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %14
-         %17 = OpLabel
+         %16 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %16
+         %19 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.wgsl
index 913dd6b..d813053 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x2(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f));
+var<private> m = mat3x2(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl
index 559c180..817cb6c 100644
--- a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl
@@ -1 +1 @@
-let m = mat3x2<f32>();
+var<private> m = mat3x2<f32>();
diff --git a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.glsl
index 9ecf735..809c79a 100644
--- a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x2 m = mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f));
+mat3x2 m = mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.hlsl
index a4755f3..b279d96 100644
--- a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x2 m = float3x2((0.0f).xx, (0.0f).xx, (0.0f).xx);
+static float3x2 m = float3x2((0.0f).xx, (0.0f).xx, (0.0f).xx);
diff --git a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.msl
index 1dc48eb..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x2 m = float3x2(float2(0.0f), float2(0.0f), float2(0.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.spvasm
index 30f1d27..e4bc4d5 100644
--- a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 11
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,10 +12,12 @@
       %float = OpTypeFloat 32
     %v2float = OpTypeVector %float 2
 %mat3v2float = OpTypeMatrix %v2float 3
-          %m = OpConstantNull %mat3v2float
+          %4 = OpConstantNull %mat3v2float
+%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
+          %m = OpVariable %_ptr_Private_mat3v2float Private %4
        %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %5
-          %8 = OpLabel
+          %7 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %7
+         %10 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.wgsl
index 559c180..817cb6c 100644
--- a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x2<f32>();
+var<private> m = mat3x2<f32>();
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl
index 9f57499..f3b62f5 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl
@@ -1,6 +1,6 @@
-let m = mat3x3(mat3x3<f32>(0.0f, 1.0f, 2.0f,
-                           3.0f, 4.0f, 5.0f,
-                           6.0f, 7.0f, 8.0f));
+var<private> m = mat3x3(mat3x3<f32>(0.0f, 1.0f, 2.0f,
+                                    3.0f, 4.0f, 5.0f,
+                                    6.0f, 7.0f, 8.0f));
 
 fn f() -> mat3x3<f32> {
     let m_1 = mat3x3(m);
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.glsl
index e3e750e..6bb27b8 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
 mat3 f() {
-  mat3 m_1 = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+  mat3 m_1 = mat3(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.hlsl
index 1795dfb..2d4c4b2 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+static float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
 
 float3x3 f() {
-  const float3x3 m_1 = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+  const float3x3 m_1 = float3x3(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.msl
index f6a7b59..d19a026 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
-
 float3x3 f() {
-  float3x3 const m_1 = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+  thread float3x3 tint_symbol = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+  float3x3 const m_1 = float3x3(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.spvasm
index d213c99..4fe3bbd 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 28
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -25,15 +25,18 @@
     %float_7 = OpConstant %float 7
     %float_8 = OpConstant %float 8
          %15 = OpConstantComposite %v3float %float_6 %float_7 %float_8
-          %m = OpConstantComposite %mat3v3float %7 %11 %15
+         %16 = OpConstantComposite %mat3v3float %7 %11 %15
+%_ptr_Private_mat3v3float = OpTypePointer Private %mat3v3float
+          %m = OpVariable %_ptr_Private_mat3v3float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-         %21 = OpTypeFunction %mat3v3float
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+         %23 = OpTypeFunction %mat3v3float
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat3v3float None %21
-         %23 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat3v3float None %23
+         %25 = OpLabel
+         %27 = OpLoad %mat3v3float %m
+               OpReturnValue %27
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.wgsl
index 4ed58da..028783d 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat3x3(mat3x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f));
+var<private> m = mat3x3(mat3x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f));
 
 fn f() -> mat3x3<f32> {
   let m_1 = mat3x3(m);
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl
index 33d7b14..1d80d69 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x3<f32>(0.0f, 1.0f, 2.0f,
-                    3.0f, 4.0f, 5.0f,
-                    6.0f, 7.0f, 8.0f);
+var<private> m = mat3x3<f32>(0.0f, 1.0f, 2.0f,
+                             3.0f, 4.0f, 5.0f,
+                             6.0f, 7.0f, 8.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.glsl
index f4631cb..31b0b4a 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.hlsl
index c35ca2a..65b0c98 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+static float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.msl
index 2635df5..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.spvasm
index 16290c0..c0f68aa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_7 = OpConstant %float 7
     %float_8 = OpConstant %float 8
          %15 = OpConstantComposite %v3float %float_6 %float_7 %float_8
-          %m = OpConstantComposite %mat3v3float %7 %11 %15
+         %16 = OpConstantComposite %mat3v3float %7 %11 %15
+%_ptr_Private_mat3v3float = OpTypePointer Private %mat3v3float
+          %m = OpVariable %_ptr_Private_mat3v3float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.wgsl
index 033c8f6..d1ef960 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
+var<private> m = mat3x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl
index cb6ac10..8a1972e 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f),
-                    vec3<f32>(3.0f, 4.0f, 5.0f),
-                    vec3<f32>(6.0f, 7.0f, 8.0f));
+var<private> m = mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f),
+                             vec3<f32>(3.0f, 4.0f, 5.0f),
+                             vec3<f32>(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.glsl
index f4631cb..31b0b4a 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.hlsl
index c35ca2a..65b0c98 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+static float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.msl
index 2635df5..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.spvasm
index 16290c0..c0f68aa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_7 = OpConstant %float 7
     %float_8 = OpConstant %float 8
          %15 = OpConstantComposite %v3float %float_6 %float_7 %float_8
-          %m = OpConstantComposite %mat3v3float %7 %11 %15
+         %16 = OpConstantComposite %mat3v3float %7 %11 %15
+%_ptr_Private_mat3v3float = OpTypePointer Private %mat3v3float
+          %m = OpVariable %_ptr_Private_mat3v3float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.wgsl
index 9ac30b5..914a6a7 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f));
+var<private> m = mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl
index d1792d1..b06cadc 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl
@@ -1,6 +1,6 @@
-let m = mat3x3(mat3x3(0.0f, 1.0f, 2.0f,
-                      3.0f, 4.0f, 5.0f,
-                      6.0f, 7.0f, 8.0f));
+var<private> m = mat3x3(mat3x3(0.0f, 1.0f, 2.0f,
+                               3.0f, 4.0f, 5.0f,
+                               6.0f, 7.0f, 8.0f));
 
 fn f() -> mat3x3<f32> {
     let m_1 = mat3x3(m);
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.glsl
index e3e750e..6bb27b8 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
 mat3 f() {
-  mat3 m_1 = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+  mat3 m_1 = mat3(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.hlsl
index 1795dfb..2d4c4b2 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+static float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
 
 float3x3 f() {
-  const float3x3 m_1 = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+  const float3x3 m_1 = float3x3(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.msl
index f6a7b59..d19a026 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
-
 float3x3 f() {
-  float3x3 const m_1 = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+  thread float3x3 tint_symbol = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+  float3x3 const m_1 = float3x3(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.spvasm
index d213c99..4fe3bbd 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 28
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -25,15 +25,18 @@
     %float_7 = OpConstant %float 7
     %float_8 = OpConstant %float 8
          %15 = OpConstantComposite %v3float %float_6 %float_7 %float_8
-          %m = OpConstantComposite %mat3v3float %7 %11 %15
+         %16 = OpConstantComposite %mat3v3float %7 %11 %15
+%_ptr_Private_mat3v3float = OpTypePointer Private %mat3v3float
+          %m = OpVariable %_ptr_Private_mat3v3float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-         %21 = OpTypeFunction %mat3v3float
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+         %23 = OpTypeFunction %mat3v3float
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat3v3float None %21
-         %23 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat3v3float None %23
+         %25 = OpLabel
+         %27 = OpLoad %mat3v3float %m
+               OpReturnValue %27
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.wgsl
index 6bf1918..03f3cd0 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat3x3(mat3x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f));
+var<private> m = mat3x3(mat3x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f));
 
 fn f() -> mat3x3<f32> {
   let m_1 = mat3x3(m);
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl
index ecdafe7..cfb9789 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x3(0.0, 1.0, 2.0,
-               3.0, 4.0, 5.0,
-               6.0, 7.0, 8.0);
+var<private> m = mat3x3(0.0, 1.0, 2.0,
+                        3.0, 4.0, 5.0,
+                        6.0, 7.0, 8.0);
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.glsl
index f4631cb..31b0b4a 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.hlsl
index c35ca2a..65b0c98 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+static float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.msl
index 2635df5..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.spvasm
index 16290c0..c0f68aa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_7 = OpConstant %float 7
     %float_8 = OpConstant %float 8
          %15 = OpConstantComposite %v3float %float_6 %float_7 %float_8
-          %m = OpConstantComposite %mat3v3float %7 %11 %15
+         %16 = OpConstantComposite %mat3v3float %7 %11 %15
+%_ptr_Private_mat3v3float = OpTypePointer Private %mat3v3float
+          %m = OpVariable %_ptr_Private_mat3v3float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.wgsl
index 18ca6e3..51e5689 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x3(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
+var<private> m = mat3x3(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl
index de0b7c5..84ea539 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x3(0.0f, 1.0f, 2.0f,
-               3.0f, 4.0f, 5.0f,
-               6.0f, 7.0f, 8.0f);
+var<private> m = mat3x3(0.0f, 1.0f, 2.0f,
+                        3.0f, 4.0f, 5.0f,
+                        6.0f, 7.0f, 8.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.glsl
index f4631cb..31b0b4a 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.hlsl
index c35ca2a..65b0c98 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+static float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.msl
index 2635df5..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.spvasm
index 16290c0..c0f68aa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_7 = OpConstant %float 7
     %float_8 = OpConstant %float 8
          %15 = OpConstantComposite %v3float %float_6 %float_7 %float_8
-          %m = OpConstantComposite %mat3v3float %7 %11 %15
+         %16 = OpConstantComposite %mat3v3float %7 %11 %15
+%_ptr_Private_mat3v3float = OpTypePointer Private %mat3v3float
+          %m = OpVariable %_ptr_Private_mat3v3float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.wgsl
index c4f87ec..ce6bd44 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
+var<private> m = mat3x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl
index 7b5f129..d8fa2b4 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x3(vec3(0.0, 1.0, 2.0),
-               vec3(3.0, 4.0, 5.0),
-               vec3(6.0, 7.0, 8.0));
+var<private> m = mat3x3(vec3(0.0, 1.0, 2.0),
+                        vec3(3.0, 4.0, 5.0),
+                        vec3(6.0, 7.0, 8.0));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.glsl
index f4631cb..31b0b4a 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.hlsl
index c35ca2a..65b0c98 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+static float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.msl
index 2635df5..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.spvasm
index 16290c0..c0f68aa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_7 = OpConstant %float 7
     %float_8 = OpConstant %float 8
          %15 = OpConstantComposite %v3float %float_6 %float_7 %float_8
-          %m = OpConstantComposite %mat3v3float %7 %11 %15
+         %16 = OpConstantComposite %mat3v3float %7 %11 %15
+%_ptr_Private_mat3v3float = OpTypePointer Private %mat3v3float
+          %m = OpVariable %_ptr_Private_mat3v3float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.wgsl
index 21c62e8..3b34421 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x3(vec3(0.0, 1.0, 2.0), vec3(3.0, 4.0, 5.0), vec3(6.0, 7.0, 8.0));
+var<private> m = mat3x3(vec3(0.0, 1.0, 2.0), vec3(3.0, 4.0, 5.0), vec3(6.0, 7.0, 8.0));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl
index ab6a8dd..aeff918 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x3(vec3<f32>(0.0f, 1.0f, 2.0f),
-               vec3<f32>(3.0f, 4.0f, 5.0f),
-               vec3<f32>(6.0f, 7.0f, 8.0f));
+var<private> m = mat3x3(vec3<f32>(0.0f, 1.0f, 2.0f),
+                        vec3<f32>(3.0f, 4.0f, 5.0f),
+                        vec3<f32>(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.glsl
index f4631cb..31b0b4a 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.hlsl
index c35ca2a..65b0c98 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
+static float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.msl
index 2635df5..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x3 m = float3x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.spvasm
index 16290c0..c0f68aa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_7 = OpConstant %float 7
     %float_8 = OpConstant %float 8
          %15 = OpConstantComposite %v3float %float_6 %float_7 %float_8
-          %m = OpConstantComposite %mat3v3float %7 %11 %15
+         %16 = OpConstantComposite %mat3v3float %7 %11 %15
+%_ptr_Private_mat3v3float = OpTypePointer Private %mat3v3float
+          %m = OpVariable %_ptr_Private_mat3v3float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.wgsl
index 9117012..f9d685e 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x3(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f));
+var<private> m = mat3x3(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl
index 1e2d9f8..0ecffa3 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl
@@ -1 +1 @@
-let m = mat3x3<f32>();
+var<private> m = mat3x3<f32>();
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.glsl
index e16f26c..421fc2b 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3 m = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
+mat3 m = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.hlsl
index 4c120a7..b96d4e1 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x3 m = float3x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx);
+static float3x3 m = float3x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx);
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.msl
index ddcb08d..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x3 m = float3x3(float3(0.0f), float3(0.0f), float3(0.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.spvasm
index 0ec90cb..743b9d4 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 11
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,10 +12,12 @@
       %float = OpTypeFloat 32
     %v3float = OpTypeVector %float 3
 %mat3v3float = OpTypeMatrix %v3float 3
-          %m = OpConstantNull %mat3v3float
+          %4 = OpConstantNull %mat3v3float
+%_ptr_Private_mat3v3float = OpTypePointer Private %mat3v3float
+          %m = OpVariable %_ptr_Private_mat3v3float Private %4
        %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %5
-          %8 = OpLabel
+          %7 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %7
+         %10 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.wgsl
index 1e2d9f8..0ecffa3 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x3<f32>();
+var<private> m = mat3x3<f32>();
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl
index 823be66..6997b0e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl
@@ -1,6 +1,6 @@
-let m = mat3x4(mat3x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
-                           4.0f, 5.0f, 6.0f, 7.0f,
-                           8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat3x4(mat3x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
+                                    4.0f, 5.0f, 6.0f, 7.0f,
+                                    8.0f, 9.0f, 10.0f, 11.0f));
 
 fn f() -> mat3x4<f32> {
     let m_1 = mat3x4(m);
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.glsl
index 6c64f68..cd41138 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
 mat3x4 f() {
-  mat3x4 m_1 = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+  mat3x4 m_1 = mat3x4(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.hlsl
index 77ea8af..11e3fe8 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+static float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
 
 float3x4 f() {
-  const float3x4 m_1 = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+  const float3x4 m_1 = float3x4(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.msl
index 4ee3d7b..9295b89 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
-
 float3x4 f() {
-  float3x4 const m_1 = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+  thread float3x4 tint_symbol = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+  float3x4 const m_1 = float3x4(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.spvasm
index 8019731..707e9ce 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 27
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -28,15 +28,18 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %18 = OpConstantComposite %v4float %float_8 %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat3v4float %8 %13 %18
+         %19 = OpConstantComposite %mat3v4float %8 %13 %18
+%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
+          %m = OpVariable %_ptr_Private_mat3v4float Private %19
        %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-         %24 = OpTypeFunction %mat3v4float
-%unused_entry_point = OpFunction %void None %20
-         %23 = OpLabel
+         %22 = OpTypeFunction %void
+         %26 = OpTypeFunction %mat3v4float
+%unused_entry_point = OpFunction %void None %22
+         %25 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat3v4float None %24
-         %26 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat3v4float None %26
+         %28 = OpLabel
+         %30 = OpLoad %mat3v4float %m
+               OpReturnValue %30
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.wgsl
index 4c6c2d0..14caa3e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat3x4(mat3x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat3x4(mat3x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f));
 
 fn f() -> mat3x4<f32> {
   let m_1 = mat3x4(m);
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl
index 0a2e8e0..99d896b 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
-                    4.0f, 5.0f, 6.0f, 7.0f,
-                    8.0f, 9.0f, 10.0f, 11.0f);
+var<private> m = mat3x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
+                             4.0f, 5.0f, 6.0f, 7.0f,
+                             8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.glsl
index 2b8f578..766e72c 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.hlsl
index fae68df..b23383e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+static float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.msl
index 3608220..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.spvasm
index 9740914..d29b311 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 26
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -27,10 +27,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %18 = OpConstantComposite %v4float %float_8 %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat3v4float %8 %13 %18
+         %19 = OpConstantComposite %mat3v4float %8 %13 %18
+%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
+          %m = OpVariable %_ptr_Private_mat3v4float Private %19
        %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %20
-         %23 = OpLabel
+         %22 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %22
+         %25 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.wgsl
index 205baa2..e4268e1 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
+var<private> m = mat3x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl
index a3fc9c6..672ac2e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
-                    vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f),
-                    vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
+                             vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f),
+                             vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.glsl
index 2b8f578..766e72c 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.hlsl
index fae68df..b23383e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+static float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.msl
index 3608220..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.spvasm
index 9740914..d29b311 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 26
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -27,10 +27,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %18 = OpConstantComposite %v4float %float_8 %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat3v4float %8 %13 %18
+         %19 = OpConstantComposite %mat3v4float %8 %13 %18
+%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
+          %m = OpVariable %_ptr_Private_mat3v4float Private %19
        %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %20
-         %23 = OpLabel
+         %22 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %22
+         %25 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.wgsl
index 05bc2e6..8a529c9 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl
index b80dbc5..b46182b 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl
@@ -1,6 +1,6 @@
-let m = mat3x4(mat3x4(0.0f, 1.0f, 2.0f, 3.0f,
-                      4.0f, 5.0f, 6.0f, 7.0f,
-                      8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat3x4(mat3x4(0.0f, 1.0f, 2.0f, 3.0f,
+                               4.0f, 5.0f, 6.0f, 7.0f,
+                               8.0f, 9.0f, 10.0f, 11.0f));
 
 fn f() -> mat3x4<f32> {
     let m_1 = mat3x4(m);
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.glsl
index 6c64f68..cd41138 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
 mat3x4 f() {
-  mat3x4 m_1 = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+  mat3x4 m_1 = mat3x4(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.hlsl
index 77ea8af..11e3fe8 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+static float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
 
 float3x4 f() {
-  const float3x4 m_1 = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+  const float3x4 m_1 = float3x4(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.msl
index 4ee3d7b..9295b89 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
-
 float3x4 f() {
-  float3x4 const m_1 = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+  thread float3x4 tint_symbol = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+  float3x4 const m_1 = float3x4(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.spvasm
index 8019731..707e9ce 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 27
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -28,15 +28,18 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %18 = OpConstantComposite %v4float %float_8 %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat3v4float %8 %13 %18
+         %19 = OpConstantComposite %mat3v4float %8 %13 %18
+%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
+          %m = OpVariable %_ptr_Private_mat3v4float Private %19
        %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-         %24 = OpTypeFunction %mat3v4float
-%unused_entry_point = OpFunction %void None %20
-         %23 = OpLabel
+         %22 = OpTypeFunction %void
+         %26 = OpTypeFunction %mat3v4float
+%unused_entry_point = OpFunction %void None %22
+         %25 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat3v4float None %24
-         %26 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat3v4float None %26
+         %28 = OpLabel
+         %30 = OpLoad %mat3v4float %m
+               OpReturnValue %30
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.wgsl
index 46be1d3..83bb686 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat3x4(mat3x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat3x4(mat3x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f));
 
 fn f() -> mat3x4<f32> {
   let m_1 = mat3x4(m);
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl
index cce8161..ac7c5bd 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x4(0.0, 1.0, 2.0, 3.0,
-               4.0, 5.0, 6.0, 7.0,
-               8.0, 9.0, 10.0, 11.0);
+var<private> m = mat3x4(0.0, 1.0, 2.0, 3.0,
+                        4.0, 5.0, 6.0, 7.0,
+                        8.0, 9.0, 10.0, 11.0);
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.glsl
index 2b8f578..766e72c 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.hlsl
index fae68df..b23383e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+static float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.msl
index 3608220..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.spvasm
index 9740914..d29b311 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 26
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -27,10 +27,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %18 = OpConstantComposite %v4float %float_8 %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat3v4float %8 %13 %18
+         %19 = OpConstantComposite %mat3v4float %8 %13 %18
+%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
+          %m = OpVariable %_ptr_Private_mat3v4float Private %19
        %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %20
-         %23 = OpLabel
+         %22 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %22
+         %25 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.wgsl
index 5fce07f..cdc7e44 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x4(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0);
+var<private> m = mat3x4(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0);
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl
index 9af3d0e..21f4e06 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x4(0.0f, 1.0f, 2.0f, 3.0f,
-               4.0f, 5.0f, 6.0f, 7.0f,
-               8.0f, 9.0f, 10.0f, 11.0f);
+var<private> m = mat3x4(0.0f, 1.0f, 2.0f, 3.0f,
+                        4.0f, 5.0f, 6.0f, 7.0f,
+                        8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.glsl
index 2b8f578..766e72c 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.hlsl
index fae68df..b23383e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+static float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.msl
index 3608220..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.spvasm
index 9740914..d29b311 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 26
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -27,10 +27,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %18 = OpConstantComposite %v4float %float_8 %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat3v4float %8 %13 %18
+         %19 = OpConstantComposite %mat3v4float %8 %13 %18
+%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
+          %m = OpVariable %_ptr_Private_mat3v4float Private %19
        %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %20
-         %23 = OpLabel
+         %22 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %22
+         %25 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.wgsl
index 8843467..7af29f0 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
+var<private> m = mat3x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl
index cf638c2..0fdc26b 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x4(vec4(0.0, 1.0, 2.0, 3.0),
-               vec4(4.0, 5.0, 6.0, 7.0),
-               vec4(8.0, 9.0, 10.0, 11.0));
+var<private> m = mat3x4(vec4(0.0, 1.0, 2.0, 3.0),
+                        vec4(4.0, 5.0, 6.0, 7.0),
+                        vec4(8.0, 9.0, 10.0, 11.0));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.glsl
index 2b8f578..766e72c 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.hlsl
index fae68df..b23383e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+static float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.msl
index 3608220..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.spvasm
index 9740914..d29b311 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 26
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -27,10 +27,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %18 = OpConstantComposite %v4float %float_8 %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat3v4float %8 %13 %18
+         %19 = OpConstantComposite %mat3v4float %8 %13 %18
+%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
+          %m = OpVariable %_ptr_Private_mat3v4float Private %19
        %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %20
-         %23 = OpLabel
+         %22 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %22
+         %25 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.wgsl
index 4b5d529..bec21cf 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x4(vec4(0.0, 1.0, 2.0, 3.0), vec4(4.0, 5.0, 6.0, 7.0), vec4(8.0, 9.0, 10.0, 11.0));
+var<private> m = mat3x4(vec4(0.0, 1.0, 2.0, 3.0), vec4(4.0, 5.0, 6.0, 7.0), vec4(8.0, 9.0, 10.0, 11.0));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl
index 32169b8..7cb7da6 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl
@@ -1,3 +1,3 @@
-let m = mat3x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
-               vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f),
-               vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat3x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
+                        vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f),
+                        vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.glsl
index 2b8f578..766e72c 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
+mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.hlsl
index fae68df..b23383e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
+static float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.msl
index 3608220..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x4 m = float3x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.spvasm
index 9740914..d29b311 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 26
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -27,10 +27,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %18 = OpConstantComposite %v4float %float_8 %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat3v4float %8 %13 %18
+         %19 = OpConstantComposite %mat3v4float %8 %13 %18
+%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
+          %m = OpVariable %_ptr_Private_mat3v4float Private %19
        %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %20
-         %23 = OpLabel
+         %22 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %22
+         %25 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.wgsl
index 7ce7445..a0c86ae2 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat3x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl
index 05ed798..6b2bb52 100644
--- a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl
@@ -1 +1 @@
-let m = mat3x4<f32>();
+var<private> m = mat3x4<f32>();
diff --git a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.glsl
index 3448385..845aed1 100644
--- a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat3x4 m = mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f));
+mat3x4 m = mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f));
diff --git a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.hlsl
index 38ea523..3f3c45b 100644
--- a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3x4 m = float3x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx);
+static float3x4 m = float3x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx);
diff --git a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.msl
index deba45f..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3x4 m = float3x4(float4(0.0f), float4(0.0f), float4(0.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.spvasm
index e561e11..329a1ab 100644
--- a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 11
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,10 +12,12 @@
       %float = OpTypeFloat 32
     %v4float = OpTypeVector %float 4
 %mat3v4float = OpTypeMatrix %v4float 3
-          %m = OpConstantNull %mat3v4float
+          %4 = OpConstantNull %mat3v4float
+%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
+          %m = OpVariable %_ptr_Private_mat3v4float Private %4
        %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %5
-          %8 = OpLabel
+          %7 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %7
+         %10 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.wgsl
index 05ed798..6b2bb52 100644
--- a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat3x4<f32>();
+var<private> m = mat3x4<f32>();
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl
index 44099e2..d82b3ff 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl
@@ -1,7 +1,7 @@
-let m = mat4x2(mat4x2<f32>(0.0f, 1.0f,
-                           2.0f, 3.0f,
-                           4.0f, 5.0f,
-                           6.0f, 7.0f));
+var<private> m = mat4x2(mat4x2<f32>(0.0f, 1.0f,
+                                    2.0f, 3.0f,
+                                    4.0f, 5.0f,
+                                    6.0f, 7.0f));
 
 fn f() -> mat4x2<f32> {
     let m_1 = mat4x2(m);
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.glsl
index 1adb3c8..e5a475d 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
 mat4x2 f() {
-  mat4x2 m_1 = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+  mat4x2 m_1 = mat4x2(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.hlsl
index a8a20db..b957caa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+static float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
 
 float4x2 f() {
-  const float4x2 m_1 = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+  const float4x2 m_1 = float4x2(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.msl
index dcef3ec..2114895 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
-
 float4x2 f() {
-  float4x2 const m_1 = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+  thread float4x2 tint_symbol = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+  float4x2 const m_1 = float4x2(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.spvasm
index 54757df..f40139e 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 28
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -25,15 +25,18 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %15 = OpConstantComposite %v2float %float_6 %float_7
-          %m = OpConstantComposite %mat4v2float %6 %9 %12 %15
+         %16 = OpConstantComposite %mat4v2float %6 %9 %12 %15
+%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
+          %m = OpVariable %_ptr_Private_mat4v2float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-         %21 = OpTypeFunction %mat4v2float
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+         %23 = OpTypeFunction %mat4v2float
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat4v2float None %21
-         %23 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat4v2float None %23
+         %25 = OpLabel
+         %27 = OpLoad %mat4v2float %m
+               OpReturnValue %27
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.wgsl
index 6ae1b50..6eb8cc6 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x2(mat4x2<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat4x2(mat4x2<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f));
 
 fn f() -> mat4x2<f32> {
   let m_1 = mat4x2(m);
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl
index 51b6839..1332e85 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x2<f32>(0.0f, 1.0f,
-                    2.0f, 3.0f,
-                    4.0f, 5.0f,
-                    6.0f, 7.0f);
+var<private> m = mat4x2<f32>(0.0f, 1.0f,
+                             2.0f, 3.0f,
+                             4.0f, 5.0f,
+                             6.0f, 7.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.glsl
index 93ae98c..2fbbb7e 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.hlsl
index 2acab36..e97d279 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+static float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.msl
index 0597230..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.spvasm
index ef14ca0..fd79610 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %15 = OpConstantComposite %v2float %float_6 %float_7
-          %m = OpConstantComposite %mat4v2float %6 %9 %12 %15
+         %16 = OpConstantComposite %mat4v2float %6 %9 %12 %15
+%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
+          %m = OpVariable %_ptr_Private_mat4v2float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.wgsl
index f8b02e2..5ca6239 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x2<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
+var<private> m = mat4x2<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl
index 80b3345..74227f4 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x2<f32>(vec2<f32>(0.0f, 1.0f),
-                    vec2<f32>(2.0f, 3.0f),
-                    vec2<f32>(4.0f, 5.0f),
-                    vec2<f32>(6.0f, 7.0f));
+var<private> m = mat4x2<f32>(vec2<f32>(0.0f, 1.0f),
+                             vec2<f32>(2.0f, 3.0f),
+                             vec2<f32>(4.0f, 5.0f),
+                             vec2<f32>(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.glsl
index 93ae98c..2fbbb7e 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.hlsl
index 2acab36..e97d279 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+static float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.msl
index 0597230..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.spvasm
index ef14ca0..fd79610 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %15 = OpConstantComposite %v2float %float_6 %float_7
-          %m = OpConstantComposite %mat4v2float %6 %9 %12 %15
+         %16 = OpConstantComposite %mat4v2float %6 %9 %12 %15
+%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
+          %m = OpVariable %_ptr_Private_mat4v2float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.wgsl
index 2d10da9..a425e47 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f));
+var<private> m = mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl
index 45b9ed0..70ea4df 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl
@@ -1,7 +1,7 @@
-let m = mat4x2(mat4x2(0.0f, 1.0f,
-                      2.0f, 3.0f,
-                      4.0f, 5.0f,
-                      6.0f, 7.0f));
+var<private> m = mat4x2(mat4x2(0.0f, 1.0f,
+                               2.0f, 3.0f,
+                               4.0f, 5.0f,
+                               6.0f, 7.0f));
 
 fn f() -> mat4x2<f32> {
     let m_1 = mat4x2(m);
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.glsl
index 1adb3c8..e5a475d 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
 mat4x2 f() {
-  mat4x2 m_1 = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+  mat4x2 m_1 = mat4x2(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.hlsl
index a8a20db..b957caa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+static float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
 
 float4x2 f() {
-  const float4x2 m_1 = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+  const float4x2 m_1 = float4x2(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.msl
index dcef3ec..2114895 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
-
 float4x2 f() {
-  float4x2 const m_1 = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+  thread float4x2 tint_symbol = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+  float4x2 const m_1 = float4x2(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.spvasm
index 54757df..f40139e 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 24
+; Bound: 28
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -25,15 +25,18 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %15 = OpConstantComposite %v2float %float_6 %float_7
-          %m = OpConstantComposite %mat4v2float %6 %9 %12 %15
+         %16 = OpConstantComposite %mat4v2float %6 %9 %12 %15
+%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
+          %m = OpVariable %_ptr_Private_mat4v2float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-         %21 = OpTypeFunction %mat4v2float
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+         %23 = OpTypeFunction %mat4v2float
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat4v2float None %21
-         %23 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat4v2float None %23
+         %25 = OpLabel
+         %27 = OpLoad %mat4v2float %m
+               OpReturnValue %27
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.wgsl
index ace9fa2..11bedce 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x2(mat4x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f));
+var<private> m = mat4x2(mat4x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f));
 
 fn f() -> mat4x2<f32> {
   let m_1 = mat4x2(m);
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl
index f0946b9..61644c1 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x2(0.0, 1.0,
-               2.0, 3.0,
-               4.0, 5.0,
-               6.0, 7.0);
+var<private> m = mat4x2(0.0, 1.0,
+                        2.0, 3.0,
+                        4.0, 5.0,
+                        6.0, 7.0);
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.glsl
index 93ae98c..2fbbb7e 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.hlsl
index 2acab36..e97d279 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+static float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.msl
index 0597230..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.spvasm
index ef14ca0..fd79610 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %15 = OpConstantComposite %v2float %float_6 %float_7
-          %m = OpConstantComposite %mat4v2float %6 %9 %12 %15
+         %16 = OpConstantComposite %mat4v2float %6 %9 %12 %15
+%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
+          %m = OpVariable %_ptr_Private_mat4v2float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.wgsl
index 8f69508..3f21792 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x2(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0);
+var<private> m = mat4x2(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0);
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl
index f5a544c..f4ad0c1 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x2(0.0f, 1.0f,
-               2.0f, 3.0f,
-               4.0f, 5.0f,
-               6.0f, 7.0f);
+var<private> m = mat4x2(0.0f, 1.0f,
+                        2.0f, 3.0f,
+                        4.0f, 5.0f,
+                        6.0f, 7.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.glsl
index 93ae98c..2fbbb7e 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.hlsl
index 2acab36..e97d279 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+static float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.msl
index 0597230..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.spvasm
index ef14ca0..fd79610 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %15 = OpConstantComposite %v2float %float_6 %float_7
-          %m = OpConstantComposite %mat4v2float %6 %9 %12 %15
+         %16 = OpConstantComposite %mat4v2float %6 %9 %12 %15
+%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
+          %m = OpVariable %_ptr_Private_mat4v2float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.wgsl
index 5c582f0..94293b0 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
+var<private> m = mat4x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl
index 2d90c35..8d088c5 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x2(vec2(0.0, 1.0),
-               vec2(2.0, 3.0),
-               vec2(4.0, 5.0),
-               vec2(6.0, 7.0));
+var<private> m = mat4x2(vec2(0.0, 1.0),
+                        vec2(2.0, 3.0),
+                        vec2(4.0, 5.0),
+                        vec2(6.0, 7.0));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.glsl
index 93ae98c..2fbbb7e 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.hlsl
index 2acab36..e97d279 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+static float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.msl
index 0597230..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.spvasm
index ef14ca0..fd79610 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %15 = OpConstantComposite %v2float %float_6 %float_7
-          %m = OpConstantComposite %mat4v2float %6 %9 %12 %15
+         %16 = OpConstantComposite %mat4v2float %6 %9 %12 %15
+%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
+          %m = OpVariable %_ptr_Private_mat4v2float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.wgsl
index 1786649..571207b 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x2(vec2(0.0, 1.0), vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0));
+var<private> m = mat4x2(vec2(0.0, 1.0), vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl
index 952511e..8da6415 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x2(vec2<f32>(0.0f, 1.0f),
-               vec2<f32>(2.0f, 3.0f),
-               vec2<f32>(4.0f, 5.0f),
-               vec2<f32>(6.0f, 7.0f));
+var<private> m = mat4x2(vec2<f32>(0.0f, 1.0f),
+                        vec2<f32>(2.0f, 3.0f),
+                        vec2<f32>(4.0f, 5.0f),
+                        vec2<f32>(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.glsl
index 93ae98c..2fbbb7e 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
+mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.hlsl
index 2acab36..e97d279 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
+static float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.msl
index 0597230..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x2 m = float4x2(float2(0.0f, 1.0f), float2(2.0f, 3.0f), float2(4.0f, 5.0f), float2(6.0f, 7.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.spvasm
index ef14ca0..fd79610 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,10 +24,12 @@
     %float_6 = OpConstant %float 6
     %float_7 = OpConstant %float 7
          %15 = OpConstantComposite %v2float %float_6 %float_7
-          %m = OpConstantComposite %mat4v2float %6 %9 %12 %15
+         %16 = OpConstantComposite %mat4v2float %6 %9 %12 %15
+%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
+          %m = OpVariable %_ptr_Private_mat4v2float Private %16
        %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %17
-         %20 = OpLabel
+         %19 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %19
+         %22 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.wgsl
index e585e38..e024293 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x2(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f));
+var<private> m = mat4x2(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl
index 474bd21..4c85dff 100644
--- a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl
@@ -1 +1 @@
-let m = mat4x2<f32>();
+var<private> m = mat4x2<f32>();
diff --git a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.glsl
index f767bee..9e082c7 100644
--- a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x2 m = mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f));
+mat4x2 m = mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.hlsl
index 4ceb8f1..f402a95 100644
--- a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x2 m = float4x2((0.0f).xx, (0.0f).xx, (0.0f).xx, (0.0f).xx);
+static float4x2 m = float4x2((0.0f).xx, (0.0f).xx, (0.0f).xx, (0.0f).xx);
diff --git a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.msl
index ef2e675..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x2 m = float4x2(float2(0.0f), float2(0.0f), float2(0.0f), float2(0.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.spvasm
index bdaaa7d..328b418 100644
--- a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 11
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,10 +12,12 @@
       %float = OpTypeFloat 32
     %v2float = OpTypeVector %float 2
 %mat4v2float = OpTypeMatrix %v2float 4
-          %m = OpConstantNull %mat4v2float
+          %4 = OpConstantNull %mat4v2float
+%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
+          %m = OpVariable %_ptr_Private_mat4v2float Private %4
        %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %5
-          %8 = OpLabel
+          %7 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %7
+         %10 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.wgsl
index 474bd21..4c85dff 100644
--- a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x2<f32>();
+var<private> m = mat4x2<f32>();
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl
index f940087..9b7dee4 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl
@@ -1,7 +1,7 @@
-let m = mat4x3(mat4x3<f32>(0.0f, 1.0f, 2.0f,
-                           3.0f, 4.0f, 5.0f,
-                           6.0f, 7.0f, 8.0f,
-                           9.0f, 10.0f, 11.0f));
+var<private> m = mat4x3(mat4x3<f32>(0.0f, 1.0f, 2.0f,
+                                    3.0f, 4.0f, 5.0f,
+                                    6.0f, 7.0f, 8.0f,
+                                    9.0f, 10.0f, 11.0f));
 
 fn f() -> mat4x3<f32> {
     let m_1 = mat4x3(m);
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.glsl
index f506747..9b28954 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
 mat4x3 f() {
-  mat4x3 m_1 = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+  mat4x3 m_1 = mat4x3(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.hlsl
index 8adbbb3..284dccb 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+static float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
 
 float4x3 f() {
-  const float4x3 m_1 = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+  const float4x3 m_1 = float4x3(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.msl
index b4c5eab..7327219 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
-
 float4x3 f() {
-  float4x3 const m_1 = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+  thread float4x3 tint_symbol = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+  float4x3 const m_1 = float4x3(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.spvasm
index be135b0..8cfb499 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -29,15 +29,18 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %19 = OpConstantComposite %v3float %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat4v3float %7 %11 %15 %19
+         %20 = OpConstantComposite %mat4v3float %7 %11 %15 %19
+%_ptr_Private_mat4v3float = OpTypePointer Private %mat4v3float
+          %m = OpVariable %_ptr_Private_mat4v3float Private %20
        %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-         %25 = OpTypeFunction %mat4v3float
-%unused_entry_point = OpFunction %void None %21
-         %24 = OpLabel
+         %23 = OpTypeFunction %void
+         %27 = OpTypeFunction %mat4v3float
+%unused_entry_point = OpFunction %void None %23
+         %26 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat4v3float None %25
-         %27 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat4v3float None %27
+         %29 = OpLabel
+         %31 = OpLoad %mat4v3float %m
+               OpReturnValue %31
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.wgsl
index 4daec06..d406f38 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x3(mat4x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat4x3(mat4x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f));
 
 fn f() -> mat4x3<f32> {
   let m_1 = mat4x3(m);
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl
index 4dcaf4c..afb562f 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x3<f32>(0.0f, 1.0f, 2.0f,
-                    3.0f, 4.0f, 5.0f,
-                    6.0f, 7.0f, 8.0f,
-                    9.0f, 10.0f, 11.0f);
+var<private> m = mat4x3<f32>(0.0f, 1.0f, 2.0f,
+                             3.0f, 4.0f, 5.0f,
+                             6.0f, 7.0f, 8.0f,
+                             9.0f, 10.0f, 11.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.glsl
index 532369f..06560c7 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.hlsl
index 254cc40..6b34e6e 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+static float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.msl
index d935650..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.spvasm
index cf9f4f3..f5592ed 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 25
+; Bound: 27
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -28,10 +28,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %19 = OpConstantComposite %v3float %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat4v3float %7 %11 %15 %19
+         %20 = OpConstantComposite %mat4v3float %7 %11 %15 %19
+%_ptr_Private_mat4v3float = OpTypePointer Private %mat4v3float
+          %m = OpVariable %_ptr_Private_mat4v3float Private %20
        %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %21
-         %24 = OpLabel
+         %23 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %23
+         %26 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.wgsl
index dbe4773..aaa7fd7 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
+var<private> m = mat4x3<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl
index 74b3e9c..00f6cb1 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f),
-                    vec3<f32>(3.0f, 4.0f, 5.0f),
-                    vec3<f32>(6.0f, 7.0f, 8.0f),
-                    vec3<f32>(9.0f, 10.0f, 11.0f));
+var<private> m = mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f),
+                             vec3<f32>(3.0f, 4.0f, 5.0f),
+                             vec3<f32>(6.0f, 7.0f, 8.0f),
+                             vec3<f32>(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.glsl
index 532369f..06560c7 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.hlsl
index 254cc40..6b34e6e 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+static float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.msl
index d935650..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.spvasm
index cf9f4f3..f5592ed 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 25
+; Bound: 27
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -28,10 +28,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %19 = OpConstantComposite %v3float %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat4v3float %7 %11 %15 %19
+         %20 = OpConstantComposite %mat4v3float %7 %11 %15 %19
+%_ptr_Private_mat4v3float = OpTypePointer Private %mat4v3float
+          %m = OpVariable %_ptr_Private_mat4v3float Private %20
        %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %21
-         %24 = OpLabel
+         %23 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %23
+         %26 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.wgsl
index 2196b1e..8e07672 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f));
+var<private> m = mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl
index aba260d..ad7c1b2 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl
@@ -1,7 +1,7 @@
-let m = mat4x3(mat4x3(0.0f, 1.0f, 2.0f,
-                      3.0f, 4.0f, 5.0f,
-                      6.0f, 7.0f, 8.0f,
-                      9.0f, 10.0f, 11.0f));
+var<private> m = mat4x3(mat4x3(0.0f, 1.0f, 2.0f,
+                               3.0f, 4.0f, 5.0f,
+                               6.0f, 7.0f, 8.0f,
+                               9.0f, 10.0f, 11.0f));
 
 fn f() -> mat4x3<f32> {
     let m_1 = mat4x3(m);
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.glsl
index f506747..9b28954 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
 mat4x3 f() {
-  mat4x3 m_1 = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+  mat4x3 m_1 = mat4x3(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.hlsl
index 8adbbb3..284dccb 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+static float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
 
 float4x3 f() {
-  const float4x3 m_1 = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+  const float4x3 m_1 = float4x3(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.msl
index b4c5eab..7327219 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
-
 float4x3 f() {
-  float4x3 const m_1 = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+  thread float4x3 tint_symbol = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+  float4x3 const m_1 = float4x3(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.spvasm
index be135b0..8cfb499 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -29,15 +29,18 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %19 = OpConstantComposite %v3float %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat4v3float %7 %11 %15 %19
+         %20 = OpConstantComposite %mat4v3float %7 %11 %15 %19
+%_ptr_Private_mat4v3float = OpTypePointer Private %mat4v3float
+          %m = OpVariable %_ptr_Private_mat4v3float Private %20
        %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-         %25 = OpTypeFunction %mat4v3float
-%unused_entry_point = OpFunction %void None %21
-         %24 = OpLabel
+         %23 = OpTypeFunction %void
+         %27 = OpTypeFunction %mat4v3float
+%unused_entry_point = OpFunction %void None %23
+         %26 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat4v3float None %25
-         %27 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat4v3float None %27
+         %29 = OpLabel
+         %31 = OpLoad %mat4v3float %m
+               OpReturnValue %31
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.wgsl
index d7e3f24..58662e4 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x3(mat4x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f));
+var<private> m = mat4x3(mat4x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f));
 
 fn f() -> mat4x3<f32> {
   let m_1 = mat4x3(m);
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl
index 32326a9..449400b 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x3(0.0, 1.0, 2.0,
-               3.0, 4.0, 5.0,
-               6.0, 7.0, 8.0,
-               9.0, 10.0, 11.0);
+var<private> m = mat4x3(0.0, 1.0, 2.0,
+                        3.0, 4.0, 5.0,
+                        6.0, 7.0, 8.0,
+                        9.0, 10.0, 11.0);
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.glsl
index 532369f..06560c7 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.hlsl
index 254cc40..6b34e6e 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+static float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.msl
index d935650..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.spvasm
index cf9f4f3..f5592ed 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 25
+; Bound: 27
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -28,10 +28,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %19 = OpConstantComposite %v3float %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat4v3float %7 %11 %15 %19
+         %20 = OpConstantComposite %mat4v3float %7 %11 %15 %19
+%_ptr_Private_mat4v3float = OpTypePointer Private %mat4v3float
+          %m = OpVariable %_ptr_Private_mat4v3float Private %20
        %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %21
-         %24 = OpLabel
+         %23 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %23
+         %26 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.wgsl
index 209a376..b8f80a7 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x3(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0);
+var<private> m = mat4x3(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0);
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl
index f9dd146..dfa9afe 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x3(0.0f, 1.0f, 2.0f,
-               3.0f, 4.0f, 5.0f,
-               6.0f, 7.0f, 8.0f,
-               9.0f, 10.0f, 11.0f);
+var<private> m = mat4x3(0.0f, 1.0f, 2.0f,
+                        3.0f, 4.0f, 5.0f,
+                        6.0f, 7.0f, 8.0f,
+                        9.0f, 10.0f, 11.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.glsl
index 532369f..06560c7 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.hlsl
index 254cc40..6b34e6e 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+static float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.msl
index d935650..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.spvasm
index cf9f4f3..f5592ed 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 25
+; Bound: 27
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -28,10 +28,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %19 = OpConstantComposite %v3float %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat4v3float %7 %11 %15 %19
+         %20 = OpConstantComposite %mat4v3float %7 %11 %15 %19
+%_ptr_Private_mat4v3float = OpTypePointer Private %mat4v3float
+          %m = OpVariable %_ptr_Private_mat4v3float Private %20
        %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %21
-         %24 = OpLabel
+         %23 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %23
+         %26 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.wgsl
index 424df3d..11bbddb 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
+var<private> m = mat4x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl
index 8a80c15..cd71d8c 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x3(vec3(0.0, 1.0, 2.0),
-               vec3(3.0, 4.0, 5.0),
-               vec3(6.0, 7.0, 8.0),
-               vec3(9.0, 10.0, 11.0));
+var<private> m = mat4x3(vec3(0.0, 1.0, 2.0),
+                        vec3(3.0, 4.0, 5.0),
+                        vec3(6.0, 7.0, 8.0),
+                        vec3(9.0, 10.0, 11.0));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.glsl
index 532369f..06560c7 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.hlsl
index 254cc40..6b34e6e 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+static float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.msl
index d935650..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.spvasm
index cf9f4f3..f5592ed 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 25
+; Bound: 27
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -28,10 +28,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %19 = OpConstantComposite %v3float %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat4v3float %7 %11 %15 %19
+         %20 = OpConstantComposite %mat4v3float %7 %11 %15 %19
+%_ptr_Private_mat4v3float = OpTypePointer Private %mat4v3float
+          %m = OpVariable %_ptr_Private_mat4v3float Private %20
        %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %21
-         %24 = OpLabel
+         %23 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %23
+         %26 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.wgsl
index 6e9e96b..2ec81b0 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x3(vec3(0.0, 1.0, 2.0), vec3(3.0, 4.0, 5.0), vec3(6.0, 7.0, 8.0), vec3(9.0, 10.0, 11.0));
+var<private> m = mat4x3(vec3(0.0, 1.0, 2.0), vec3(3.0, 4.0, 5.0), vec3(6.0, 7.0, 8.0), vec3(9.0, 10.0, 11.0));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl
index d6c8650..f55af6c 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x3(vec3<f32>(0.0f, 1.0f, 2.0f),
-               vec3<f32>(3.0f, 4.0f, 5.0f),
-               vec3<f32>(6.0f, 7.0f, 8.0f),
-               vec3<f32>(9.0f, 10.0f, 11.0f));
+var<private> m = mat4x3(vec3<f32>(0.0f, 1.0f, 2.0f),
+                        vec3<f32>(3.0f, 4.0f, 5.0f),
+                        vec3<f32>(6.0f, 7.0f, 8.0f),
+                        vec3<f32>(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.glsl
index 532369f..06560c7 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.hlsl
index 254cc40..6b34e6e 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
+static float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.msl
index d935650..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x3 m = float4x3(float3(0.0f, 1.0f, 2.0f), float3(3.0f, 4.0f, 5.0f), float3(6.0f, 7.0f, 8.0f), float3(9.0f, 10.0f, 11.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.spvasm
index cf9f4f3..f5592ed 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 25
+; Bound: 27
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -28,10 +28,12 @@
    %float_10 = OpConstant %float 10
    %float_11 = OpConstant %float 11
          %19 = OpConstantComposite %v3float %float_9 %float_10 %float_11
-          %m = OpConstantComposite %mat4v3float %7 %11 %15 %19
+         %20 = OpConstantComposite %mat4v3float %7 %11 %15 %19
+%_ptr_Private_mat4v3float = OpTypePointer Private %mat4v3float
+          %m = OpVariable %_ptr_Private_mat4v3float Private %20
        %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %21
-         %24 = OpLabel
+         %23 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %23
+         %26 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.wgsl
index eddcb09..7eb4b32 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x3(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f));
+var<private> m = mat4x3(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl
index b8e7cf0..e23b03f 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl
@@ -1 +1 @@
-let m = mat4x3<f32>();
+var<private> m = mat4x3<f32>();
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.glsl
index a60311a..b24fd7a 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4x3 m = mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f));
+mat4x3 m = mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.hlsl
index 8741443..297a867 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x3 m = float4x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx, (0.0f).xxx);
+static float4x3 m = float4x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx, (0.0f).xxx);
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.msl
index 88679a8..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x3 m = float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.spvasm
index 833cf99..53ffa7d 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 11
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,10 +12,12 @@
       %float = OpTypeFloat 32
     %v3float = OpTypeVector %float 3
 %mat4v3float = OpTypeMatrix %v3float 4
-          %m = OpConstantNull %mat4v3float
+          %4 = OpConstantNull %mat4v3float
+%_ptr_Private_mat4v3float = OpTypePointer Private %mat4v3float
+          %m = OpVariable %_ptr_Private_mat4v3float Private %4
        %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %5
-          %8 = OpLabel
+          %7 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %7
+         %10 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.wgsl
index b8e7cf0..e23b03f 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x3<f32>();
+var<private> m = mat4x3<f32>();
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl
index bc5556d..ff2b04a 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl
@@ -1,7 +1,7 @@
-let m = mat4x4(mat4x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
-                           4.0f, 5.0f, 6.0f, 7.0f,
-                           8.0f, 9.0f, 10.0f, 11.0f,
-                           12.0f, 13.0f, 14.0f, 15.0f));
+var<private> m = mat4x4(mat4x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
+                                    4.0f, 5.0f, 6.0f, 7.0f,
+                                    8.0f, 9.0f, 10.0f, 11.0f,
+                                    12.0f, 13.0f, 14.0f, 15.0f));
 
 fn f() -> mat4x4<f32> {
     let m_1 = mat4x4(m);
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.glsl
index 737abbe..5b8ecf4 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
 mat4 f() {
-  mat4 m_1 = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+  mat4 m_1 = mat4(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.hlsl
index cdde3bc..fe1a3a7 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+static float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
 
 float4x4 f() {
-  const float4x4 m_1 = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+  const float4x4 m_1 = float4x4(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.msl
index 54f69fa..71f0986 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
-
 float4x4 f() {
-  float4x4 const m_1 = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+  thread float4x4 tint_symbol = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+  float4x4 const m_1 = float4x4(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.spvasm
index 43fad62..e503126 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -33,15 +33,18 @@
    %float_14 = OpConstant %float 14
    %float_15 = OpConstant %float 15
          %23 = OpConstantComposite %v4float %float_12 %float_13 %float_14 %float_15
-          %m = OpConstantComposite %mat4v4float %8 %13 %18 %23
+         %24 = OpConstantComposite %mat4v4float %8 %13 %18 %23
+%_ptr_Private_mat4v4float = OpTypePointer Private %mat4v4float
+          %m = OpVariable %_ptr_Private_mat4v4float Private %24
        %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-         %29 = OpTypeFunction %mat4v4float
-%unused_entry_point = OpFunction %void None %25
-         %28 = OpLabel
+         %27 = OpTypeFunction %void
+         %31 = OpTypeFunction %mat4v4float
+%unused_entry_point = OpFunction %void None %27
+         %30 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat4v4float None %29
-         %31 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat4v4float None %31
+         %33 = OpLabel
+         %35 = OpLoad %mat4v4float %m
+               OpReturnValue %35
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.wgsl
index 908d9b9..ddab90c 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x4(mat4x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f));
+var<private> m = mat4x4(mat4x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f));
 
 fn f() -> mat4x4<f32> {
   let m_1 = mat4x4(m);
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl
index 8ab5b16..bdd6737 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
-                    4.0f, 5.0f, 6.0f, 7.0f,
-                    8.0f, 9.0f, 10.0f, 11.0f,
-                    12.0f, 13.0f, 14.0f, 15.0f);
+var<private> m = mat4x4<f32>(0.0f, 1.0f, 2.0f, 3.0f,
+                             4.0f, 5.0f, 6.0f, 7.0f,
+                             8.0f, 9.0f, 10.0f, 11.0f,
+                             12.0f, 13.0f, 14.0f, 15.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.glsl
index b86a544..5f8a226 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.hlsl
index 2707999..6b506f6 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+static float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.msl
index 053e23d..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.spvasm
index 7006fcd..ac2d6d7 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -32,10 +32,12 @@
    %float_14 = OpConstant %float 14
    %float_15 = OpConstant %float 15
          %23 = OpConstantComposite %v4float %float_12 %float_13 %float_14 %float_15
-          %m = OpConstantComposite %mat4v4float %8 %13 %18 %23
+         %24 = OpConstantComposite %mat4v4float %8 %13 %18 %23
+%_ptr_Private_mat4v4float = OpTypePointer Private %mat4v4float
+          %m = OpVariable %_ptr_Private_mat4v4float Private %24
        %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %25
-         %28 = OpLabel
+         %27 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %27
+         %30 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.wgsl
index 36fe95d..adc3d0c 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f);
+var<private> m = mat4x4<f32>(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl
index be1d342..62b2ea3 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
-                    vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f),
-                    vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f),
-                    vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f));
+var<private> m = mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
+                             vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f),
+                             vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f),
+                             vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.glsl
index b86a544..5f8a226 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.hlsl
index 2707999..6b506f6 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+static float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.msl
index 053e23d..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.spvasm
index 7006fcd..ac2d6d7 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -32,10 +32,12 @@
    %float_14 = OpConstant %float 14
    %float_15 = OpConstant %float 15
          %23 = OpConstantComposite %v4float %float_12 %float_13 %float_14 %float_15
-          %m = OpConstantComposite %mat4v4float %8 %13 %18 %23
+         %24 = OpConstantComposite %mat4v4float %8 %13 %18 %23
+%_ptr_Private_mat4v4float = OpTypePointer Private %mat4v4float
+          %m = OpVariable %_ptr_Private_mat4v4float Private %24
        %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %25
-         %28 = OpLabel
+         %27 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %27
+         %30 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.wgsl
index a09649c..e3c85d6 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f));
+var<private> m = mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl
index 2b9f7e9..3024289 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl
@@ -1,7 +1,7 @@
-let m = mat4x4(mat4x4(0.0f, 1.0f, 2.0f, 3.0f,
-                      4.0f, 5.0f, 6.0f, 7.0f,
-                      8.0f, 9.0f, 10.0f, 11.0f,
-                      12.0f, 13.0f, 14.0f, 15.0f));
+var<private> m = mat4x4(mat4x4(0.0f, 1.0f, 2.0f, 3.0f,
+                               4.0f, 5.0f, 6.0f, 7.0f,
+                               8.0f, 9.0f, 10.0f, 11.0f,
+                               12.0f, 13.0f, 14.0f, 15.0f));
 
 fn f() -> mat4x4<f32> {
     let m_1 = mat4x4(m);
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.glsl
index 737abbe..5b8ecf4 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.glsl
@@ -4,9 +4,9 @@
 void unused_entry_point() {
   return;
 }
-const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
 mat4 f() {
-  mat4 m_1 = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+  mat4 m_1 = mat4(m);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.hlsl
index cdde3bc..fe1a3a7 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.hlsl
@@ -3,9 +3,9 @@
   return;
 }
 
-static const float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+static float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
 
 float4x4 f() {
-  const float4x4 m_1 = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+  const float4x4 m_1 = float4x4(m);
   return m_1;
 }
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.msl
index 54f69fa..71f0986 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.msl
@@ -1,10 +1,9 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
-
 float4x4 f() {
-  float4x4 const m_1 = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+  thread float4x4 tint_symbol = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+  float4x4 const m_1 = float4x4(tint_symbol);
   return m_1;
 }
 
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.spvasm
index 43fad62..e503126 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -33,15 +33,18 @@
    %float_14 = OpConstant %float 14
    %float_15 = OpConstant %float 15
          %23 = OpConstantComposite %v4float %float_12 %float_13 %float_14 %float_15
-          %m = OpConstantComposite %mat4v4float %8 %13 %18 %23
+         %24 = OpConstantComposite %mat4v4float %8 %13 %18 %23
+%_ptr_Private_mat4v4float = OpTypePointer Private %mat4v4float
+          %m = OpVariable %_ptr_Private_mat4v4float Private %24
        %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-         %29 = OpTypeFunction %mat4v4float
-%unused_entry_point = OpFunction %void None %25
-         %28 = OpLabel
+         %27 = OpTypeFunction %void
+         %31 = OpTypeFunction %mat4v4float
+%unused_entry_point = OpFunction %void None %27
+         %30 = OpLabel
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %mat4v4float None %29
-         %31 = OpLabel
-               OpReturnValue %m
+          %f = OpFunction %mat4v4float None %31
+         %33 = OpLabel
+         %35 = OpLoad %mat4v4float %m
+               OpReturnValue %35
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.wgsl
index b9e9f8f..aa96555 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x4(mat4x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f));
+var<private> m = mat4x4(mat4x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f));
 
 fn f() -> mat4x4<f32> {
   let m_1 = mat4x4(m);
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl
index 571610f..3339d4d 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x4(0.0, 1.0, 2.0, 3.0,
-               4.0, 5.0, 6.0, 7.0,
-               8.0, 9.0, 10.0, 11.0,
-               12.0, 13.0, 14.0, 15.0);
+var<private> m = mat4x4(0.0, 1.0, 2.0, 3.0,
+                        4.0, 5.0, 6.0, 7.0,
+                        8.0, 9.0, 10.0, 11.0,
+                        12.0, 13.0, 14.0, 15.0);
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.glsl
index b86a544..5f8a226 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.hlsl
index 2707999..6b506f6 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+static float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.msl
index 053e23d..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.spvasm
index 7006fcd..ac2d6d7 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -32,10 +32,12 @@
    %float_14 = OpConstant %float 14
    %float_15 = OpConstant %float 15
          %23 = OpConstantComposite %v4float %float_12 %float_13 %float_14 %float_15
-          %m = OpConstantComposite %mat4v4float %8 %13 %18 %23
+         %24 = OpConstantComposite %mat4v4float %8 %13 %18 %23
+%_ptr_Private_mat4v4float = OpTypePointer Private %mat4v4float
+          %m = OpVariable %_ptr_Private_mat4v4float Private %24
        %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %25
-         %28 = OpLabel
+         %27 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %27
+         %30 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.wgsl
index 33b0598..83572f2 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x4(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
+var<private> m = mat4x4(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl
index a47089b..178b95b 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x4(0.0f, 1.0f, 2.0f, 3.0f,
-               4.0f, 5.0f, 6.0f, 7.0f,
-               8.0f, 9.0f, 10.0f, 11.0f,
-               12.0f, 13.0f, 14.0f, 15.0f);
+var<private> m = mat4x4(0.0f, 1.0f, 2.0f, 3.0f,
+                        4.0f, 5.0f, 6.0f, 7.0f,
+                        8.0f, 9.0f, 10.0f, 11.0f,
+                        12.0f, 13.0f, 14.0f, 15.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.glsl
index b86a544..5f8a226 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.hlsl
index 2707999..6b506f6 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+static float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.msl
index 053e23d..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.spvasm
index 7006fcd..ac2d6d7 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -32,10 +32,12 @@
    %float_14 = OpConstant %float 14
    %float_15 = OpConstant %float 15
          %23 = OpConstantComposite %v4float %float_12 %float_13 %float_14 %float_15
-          %m = OpConstantComposite %mat4v4float %8 %13 %18 %23
+         %24 = OpConstantComposite %mat4v4float %8 %13 %18 %23
+%_ptr_Private_mat4v4float = OpTypePointer Private %mat4v4float
+          %m = OpVariable %_ptr_Private_mat4v4float Private %24
        %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %25
-         %28 = OpLabel
+         %27 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %27
+         %30 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.wgsl
index 2374280..ae47f65 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f);
+var<private> m = mat4x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f);
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl
index a11a785..52c70d1 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x4(vec4(0.0, 1.0, 2.0, 3.0),
-               vec4(4.0, 5.0, 6.0, 7.0),
-               vec4(8.0, 9.0, 10.0, 11.0),
-               vec4(12.0, 13.0, 14.0, 15.0));
+var<private> m = mat4x4(vec4(0.0, 1.0, 2.0, 3.0),
+                        vec4(4.0, 5.0, 6.0, 7.0),
+                        vec4(8.0, 9.0, 10.0, 11.0),
+                        vec4(12.0, 13.0, 14.0, 15.0));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.glsl
index b86a544..5f8a226 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.hlsl
index 2707999..6b506f6 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+static float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.msl
index 053e23d..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.spvasm
index 7006fcd..ac2d6d7 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -32,10 +32,12 @@
    %float_14 = OpConstant %float 14
    %float_15 = OpConstant %float 15
          %23 = OpConstantComposite %v4float %float_12 %float_13 %float_14 %float_15
-          %m = OpConstantComposite %mat4v4float %8 %13 %18 %23
+         %24 = OpConstantComposite %mat4v4float %8 %13 %18 %23
+%_ptr_Private_mat4v4float = OpTypePointer Private %mat4v4float
+          %m = OpVariable %_ptr_Private_mat4v4float Private %24
        %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %25
-         %28 = OpLabel
+         %27 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %27
+         %30 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.wgsl
index faf14ff..13ec29a 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x4(vec4(0.0, 1.0, 2.0, 3.0), vec4(4.0, 5.0, 6.0, 7.0), vec4(8.0, 9.0, 10.0, 11.0), vec4(12.0, 13.0, 14.0, 15.0));
+var<private> m = mat4x4(vec4(0.0, 1.0, 2.0, 3.0), vec4(4.0, 5.0, 6.0, 7.0), vec4(8.0, 9.0, 10.0, 11.0), vec4(12.0, 13.0, 14.0, 15.0));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl
index 77740a2..1e8e479 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl
@@ -1,4 +1,4 @@
-let m = mat4x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
-               vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f),
-               vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f),
-               vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f));
+var<private> m = mat4x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f),
+                        vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f),
+                        vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f),
+                        vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.glsl
index b86a544..5f8a226 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
+mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.hlsl
index 2707999..6b506f6 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
+static float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.msl
index 053e23d..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x4 m = float4x4(float4(0.0f, 1.0f, 2.0f, 3.0f), float4(4.0f, 5.0f, 6.0f, 7.0f), float4(8.0f, 9.0f, 10.0f, 11.0f), float4(12.0f, 13.0f, 14.0f, 15.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.spvasm
index 7006fcd..ac2d6d7 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -32,10 +32,12 @@
    %float_14 = OpConstant %float 14
    %float_15 = OpConstant %float 15
          %23 = OpConstantComposite %v4float %float_12 %float_13 %float_14 %float_15
-          %m = OpConstantComposite %mat4v4float %8 %13 %18 %23
+         %24 = OpConstantComposite %mat4v4float %8 %13 %18 %23
+%_ptr_Private_mat4v4float = OpTypePointer Private %mat4v4float
+          %m = OpVariable %_ptr_Private_mat4v4float Private %24
        %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %25
-         %28 = OpLabel
+         %27 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %27
+         %30 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.wgsl
index 7bbde6b..9934a44 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f));
+var<private> m = mat4x4(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl
index 1f8286b..9a80a22 100644
--- a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl
@@ -1 +1 @@
-let m = mat4x4<f32>();
+var<private> m = mat4x4<f32>();
diff --git a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.glsl
index 1acbb86..b5f43a3 100644
--- a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const mat4 m = mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
+mat4 m = mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
diff --git a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.hlsl
index 1efc2bb..a1f75e2 100644
--- a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4x4 m = float4x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx);
+static float4x4 m = float4x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx);
diff --git a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.msl
index 9389ca4..466ceaa 100644
--- a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4x4 m = float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f));
-
diff --git a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.spvasm
index 7f7ca39..fc3f2dd 100644
--- a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 11
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -12,10 +12,12 @@
       %float = OpTypeFloat 32
     %v4float = OpTypeVector %float 4
 %mat4v4float = OpTypeMatrix %v4float 4
-          %m = OpConstantNull %mat4v4float
+          %4 = OpConstantNull %mat4v4float
+%_ptr_Private_mat4v4float = OpTypePointer Private %mat4v4float
+          %m = OpVariable %_ptr_Private_mat4v4float Private %4
        %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %5
-          %8 = OpLabel
+          %7 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %7
+         %10 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.wgsl
index 1f8286b..9a80a22 100644
--- a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let m = mat4x4<f32>();
+var<private> m = mat4x4<f32>();
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl
index c215909..3b03f91 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl
@@ -1 +1 @@
-let v = vec2<bool>(false, true);
+var<private> v = vec2<bool>(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.glsl
index bfd0cb7..4d0120f 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const bvec2 v = bvec2(false, true);
+bvec2 v = bvec2(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.hlsl
index 0ba8ae6..7c65ba8 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const bool2 v = bool2(false, true);
+static bool2 v = bool2(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.msl
index 15bd21b..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant bool2 v = bool2(false, true);
-
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.spvasm
index a686023..f3a9236 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
      %v2bool = OpTypeVector %bool 2
           %3 = OpConstantNull %bool
        %true = OpConstantTrue %bool
-          %v = OpConstantComposite %v2bool %3 %true
+          %5 = OpConstantComposite %v2bool %3 %true
+%_ptr_Private_v2bool = OpTypePointer Private %v2bool
+          %v = OpVariable %_ptr_Private_v2bool Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.wgsl
index c215909..3b03f91 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2<bool>(false, true);
+var<private> v = vec2<bool>(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl
index 074655c..c64a997 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl
@@ -1 +1 @@
-let v = vec2<f32>(0.0f, 1.0f);
+var<private> v = vec2<f32>(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.glsl
index af91949..e6f149f 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const vec2 v = vec2(0.0f, 1.0f);
+vec2 v = vec2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.hlsl
index 8802bbb..53ed028 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2 v = float2(0.0f, 1.0f);
+static float2 v = float2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.msl
index f343a25..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2 v = float2(0.0f, 1.0f);
-
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.spvasm
index 8e31d05..26be830 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
     %v2float = OpTypeVector %float 2
           %3 = OpConstantNull %float
     %float_1 = OpConstant %float 1
-          %v = OpConstantComposite %v2float %3 %float_1
+          %5 = OpConstantComposite %v2float %3 %float_1
+%_ptr_Private_v2float = OpTypePointer Private %v2float
+          %v = OpVariable %_ptr_Private_v2float Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.wgsl
index 074655c..c64a997 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2<f32>(0.0f, 1.0f);
+var<private> v = vec2<f32>(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl
index ee90f91..684570e 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl
@@ -1 +1 @@
-let v = vec2<i32>(0, 1);
+var<private> v = vec2<i32>(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.glsl
index ebef7ff..cc388f0 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const ivec2 v = ivec2(0, 1);
+ivec2 v = ivec2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.hlsl
index afa632e..203fe9a 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const int2 v = int2(0, 1);
+static int2 v = int2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.msl
index af85d23..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant int2 v = int2(0, 1);
-
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.spvasm
index 1c6792f..3fdf50d 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
       %v2int = OpTypeVector %int 2
           %3 = OpConstantNull %int
       %int_1 = OpConstant %int 1
-          %v = OpConstantComposite %v2int %3 %int_1
+          %5 = OpConstantComposite %v2int %3 %int_1
+%_ptr_Private_v2int = OpTypePointer Private %v2int
+          %v = OpVariable %_ptr_Private_v2int Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.wgsl
index ee90f91..684570e 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2<i32>(0, 1);
+var<private> v = vec2<i32>(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl
index 1b3006c..1d75b1f 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl
@@ -1 +1 @@
-let v = vec2<u32>(0u, 1u);
+var<private> v = vec2<u32>(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.glsl
index 9630097..0319a07 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const uvec2 v = uvec2(0u, 1u);
+uvec2 v = uvec2(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.hlsl
index c298713..3138b6c 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const uint2 v = uint2(0u, 1u);
+static uint2 v = uint2(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.msl
index 764c49a..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant uint2 v = uint2(0u, 1u);
-
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.spvasm
index 7f95ffd..37aa2cb 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
      %v2uint = OpTypeVector %uint 2
           %3 = OpConstantNull %uint
      %uint_1 = OpConstant %uint 1
-          %v = OpConstantComposite %v2uint %3 %uint_1
+          %5 = OpConstantComposite %v2uint %3 %uint_1
+%_ptr_Private_v2uint = OpTypePointer Private %v2uint
+          %v = OpVariable %_ptr_Private_v2uint Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.wgsl
index 1b3006c..1d75b1f 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2<u32>(0u, 1u);
+var<private> v = vec2<u32>(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl
index e0e5dc9..eba6e76 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl
@@ -1 +1 @@
-let v = vec2(0.0, 1.0);
+var<private> v = vec2(0.0, 1.0);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.glsl
index af91949..e6f149f 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const vec2 v = vec2(0.0f, 1.0f);
+vec2 v = vec2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.hlsl
index 8802bbb..53ed028 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2 v = float2(0.0f, 1.0f);
+static float2 v = float2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.msl
index f343a25..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2 v = float2(0.0f, 1.0f);
-
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.spvasm
index 8e31d05..26be830 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
     %v2float = OpTypeVector %float 2
           %3 = OpConstantNull %float
     %float_1 = OpConstant %float 1
-          %v = OpConstantComposite %v2float %3 %float_1
+          %5 = OpConstantComposite %v2float %3 %float_1
+%_ptr_Private_v2float = OpTypePointer Private %v2float
+          %v = OpVariable %_ptr_Private_v2float Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.wgsl
index e0e5dc9..eba6e76 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2(0.0, 1.0);
+var<private> v = vec2(0.0, 1.0);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl
index de5642e..6aabaca 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl
@@ -1 +1 @@
-let v = vec2(0, 1);
+var<private> v = vec2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.glsl
index ebef7ff..cc388f0 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const ivec2 v = ivec2(0, 1);
+ivec2 v = ivec2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.hlsl
index afa632e..203fe9a 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const int2 v = int2(0, 1);
+static int2 v = int2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.msl
index af85d23..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant int2 v = int2(0, 1);
-
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.spvasm
index 1c6792f..3fdf50d 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
       %v2int = OpTypeVector %int 2
           %3 = OpConstantNull %int
       %int_1 = OpConstant %int 1
-          %v = OpConstantComposite %v2int %3 %int_1
+          %5 = OpConstantComposite %v2int %3 %int_1
+%_ptr_Private_v2int = OpTypePointer Private %v2int
+          %v = OpVariable %_ptr_Private_v2int Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.wgsl
index de5642e..6aabaca 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2(0, 1);
+var<private> v = vec2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl
index f5aced3..c5bc0b1 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl
@@ -1 +1 @@
-let v = vec2(false, true);
+var<private> v = vec2(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.glsl
index bfd0cb7..4d0120f 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const bvec2 v = bvec2(false, true);
+bvec2 v = bvec2(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.hlsl
index 0ba8ae6..7c65ba8 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const bool2 v = bool2(false, true);
+static bool2 v = bool2(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.msl
index 15bd21b..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant bool2 v = bool2(false, true);
-
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.spvasm
index a686023..f3a9236 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
      %v2bool = OpTypeVector %bool 2
           %3 = OpConstantNull %bool
        %true = OpConstantTrue %bool
-          %v = OpConstantComposite %v2bool %3 %true
+          %5 = OpConstantComposite %v2bool %3 %true
+%_ptr_Private_v2bool = OpTypePointer Private %v2bool
+          %v = OpVariable %_ptr_Private_v2bool Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.wgsl
index f5aced3..c5bc0b1 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2(false, true);
+var<private> v = vec2(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl
index 3ca3308..03994f3 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl
@@ -1 +1 @@
-let v = vec2(0.0f, 1.0f);
+var<private> v = vec2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.glsl
index af91949..e6f149f 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const vec2 v = vec2(0.0f, 1.0f);
+vec2 v = vec2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.hlsl
index 8802bbb..53ed028 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float2 v = float2(0.0f, 1.0f);
+static float2 v = float2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.msl
index f343a25..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float2 v = float2(0.0f, 1.0f);
-
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.spvasm
index 8e31d05..26be830 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
     %v2float = OpTypeVector %float 2
           %3 = OpConstantNull %float
     %float_1 = OpConstant %float 1
-          %v = OpConstantComposite %v2float %3 %float_1
+          %5 = OpConstantComposite %v2float %3 %float_1
+%_ptr_Private_v2float = OpTypePointer Private %v2float
+          %v = OpVariable %_ptr_Private_v2float Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.wgsl
index 3ca3308..03994f3 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2(0.0f, 1.0f);
+var<private> v = vec2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl
index 7207f34..4ea409d 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl
@@ -1 +1 @@
-let v = vec2(0i, 1i);
+var<private> v = vec2(0i, 1i);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.glsl
index ebef7ff..cc388f0 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const ivec2 v = ivec2(0, 1);
+ivec2 v = ivec2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.hlsl
index afa632e..203fe9a 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const int2 v = int2(0, 1);
+static int2 v = int2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.msl
index af85d23..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant int2 v = int2(0, 1);
-
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.spvasm
index 1c6792f..3fdf50d 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
       %v2int = OpTypeVector %int 2
           %3 = OpConstantNull %int
       %int_1 = OpConstant %int 1
-          %v = OpConstantComposite %v2int %3 %int_1
+          %5 = OpConstantComposite %v2int %3 %int_1
+%_ptr_Private_v2int = OpTypePointer Private %v2int
+          %v = OpVariable %_ptr_Private_v2int Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.wgsl
index 7207f34..4ea409d 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2(0i, 1i);
+var<private> v = vec2(0i, 1i);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl
index bd3e939..dafac2d 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl
@@ -1 +1 @@
-let v = vec2(0u, 1u);
+var<private> v = vec2(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.glsl
index 9630097..0319a07 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const uvec2 v = uvec2(0u, 1u);
+uvec2 v = uvec2(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.hlsl
index c298713..3138b6c 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const uint2 v = uint2(0u, 1u);
+static uint2 v = uint2(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.msl
index 764c49a..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant uint2 v = uint2(0u, 1u);
-
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.spvasm
index 7f95ffd..37aa2cb 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
      %v2uint = OpTypeVector %uint 2
           %3 = OpConstantNull %uint
      %uint_1 = OpConstant %uint 1
-          %v = OpConstantComposite %v2uint %3 %uint_1
+          %5 = OpConstantComposite %v2uint %3 %uint_1
+%_ptr_Private_v2uint = OpTypePointer Private %v2uint
+          %v = OpVariable %_ptr_Private_v2uint Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.wgsl
index bd3e939..dafac2d 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec2(0u, 1u);
+var<private> v = vec2(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl
index 0acf3bf..aeee5a2 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl
@@ -1 +1 @@
-let v = vec3<bool>(false, true, false);
+var<private> v = vec3<bool>(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.glsl
index e7d7818..872f1a2 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const bvec3 v = bvec3(false, true, false);
+bvec3 v = bvec3(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.hlsl
index d5acfa0..420e0c3 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const bool3 v = bool3(false, true, false);
+static bool3 v = bool3(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.msl
index 0cd9b5b..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant bool3 v = bool3(false, true, false);
-
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.spvasm
index 4abfaa6..587225f 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
      %v3bool = OpTypeVector %bool 3
           %3 = OpConstantNull %bool
        %true = OpConstantTrue %bool
-          %v = OpConstantComposite %v3bool %3 %true %3
+          %5 = OpConstantComposite %v3bool %3 %true %3
+%_ptr_Private_v3bool = OpTypePointer Private %v3bool
+          %v = OpVariable %_ptr_Private_v3bool Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.wgsl
index 0acf3bf..aeee5a2 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3<bool>(false, true, false);
+var<private> v = vec3<bool>(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl
index 0978438..2815001 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl
@@ -1 +1 @@
-let v = vec3<f32>(0.0f, 1.0f, 2.0f);
+var<private> v = vec3<f32>(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.glsl
index 9f73b75..f63fa39 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const vec3 v = vec3(0.0f, 1.0f, 2.0f);
+vec3 v = vec3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.hlsl
index daa5a1c..f2ffb86 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3 v = float3(0.0f, 1.0f, 2.0f);
+static float3 v = float3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.msl
index b0b245a..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3 v = float3(0.0f, 1.0f, 2.0f);
-
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.spvasm
index 5dde9d6..5df28a4 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 11
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -14,10 +14,12 @@
           %3 = OpConstantNull %float
     %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
-          %v = OpConstantComposite %v3float %3 %float_1 %float_2
+          %6 = OpConstantComposite %v3float %3 %float_1 %float_2
+%_ptr_Private_v3float = OpTypePointer Private %v3float
+          %v = OpVariable %_ptr_Private_v3float Private %6
        %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
-         %10 = OpLabel
+          %9 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %9
+         %12 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.wgsl
index 0978438..2815001 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3<f32>(0.0f, 1.0f, 2.0f);
+var<private> v = vec3<f32>(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl
index 605fa30..434bb56 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl
@@ -1 +1 @@
-let v = vec3<i32>(0i, 1i, 2i);
+var<private> v = vec3<i32>(0i, 1i, 2i);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.glsl
index 0392e70..26b5581 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const ivec3 v = ivec3(0, 1, 2);
+ivec3 v = ivec3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.hlsl
index 9bc1dc4..fcb0802 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const int3 v = int3(0, 1, 2);
+static int3 v = int3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.msl
index 63fbce8..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant int3 v = int3(0, 1, 2);
-
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.spvasm
index 20bcaa8..68ed2d6 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 11
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -14,10 +14,12 @@
           %3 = OpConstantNull %int
       %int_1 = OpConstant %int 1
       %int_2 = OpConstant %int 2
-          %v = OpConstantComposite %v3int %3 %int_1 %int_2
+          %6 = OpConstantComposite %v3int %3 %int_1 %int_2
+%_ptr_Private_v3int = OpTypePointer Private %v3int
+          %v = OpVariable %_ptr_Private_v3int Private %6
        %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
-         %10 = OpLabel
+          %9 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %9
+         %12 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.wgsl
index 605fa30..434bb56 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3<i32>(0i, 1i, 2i);
+var<private> v = vec3<i32>(0i, 1i, 2i);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl
index 111a1d3..ab0e797 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl
@@ -1 +1 @@
-let v = vec3<u32>(0u, 1u, 2u);
+var<private> v = vec3<u32>(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.glsl
index 1aabf2d..7187970 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const uvec3 v = uvec3(0u, 1u, 2u);
+uvec3 v = uvec3(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.hlsl
index 18899ea..3190b32 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const uint3 v = uint3(0u, 1u, 2u);
+static uint3 v = uint3(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.msl
index 6090ecf..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant uint3 v = uint3(0u, 1u, 2u);
-
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.spvasm
index 74c3ed3..1e4e51f 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 11
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -14,10 +14,12 @@
           %3 = OpConstantNull %uint
      %uint_1 = OpConstant %uint 1
      %uint_2 = OpConstant %uint 2
-          %v = OpConstantComposite %v3uint %3 %uint_1 %uint_2
+          %6 = OpConstantComposite %v3uint %3 %uint_1 %uint_2
+%_ptr_Private_v3uint = OpTypePointer Private %v3uint
+          %v = OpVariable %_ptr_Private_v3uint Private %6
        %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
-         %10 = OpLabel
+          %9 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %9
+         %12 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.wgsl
index 111a1d3..ab0e797 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3<u32>(0u, 1u, 2u);
+var<private> v = vec3<u32>(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl
index 376f901c..2b4faac 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl
@@ -1 +1 @@
-let v = vec3(0.0, 1.0, 2.0);
+var<private> v = vec3(0.0, 1.0, 2.0);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.glsl
index 9f73b75..f63fa39 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const vec3 v = vec3(0.0f, 1.0f, 2.0f);
+vec3 v = vec3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.hlsl
index daa5a1c..f2ffb86 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3 v = float3(0.0f, 1.0f, 2.0f);
+static float3 v = float3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.msl
index b0b245a..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3 v = float3(0.0f, 1.0f, 2.0f);
-
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.spvasm
index 5dde9d6..5df28a4 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 11
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -14,10 +14,12 @@
           %3 = OpConstantNull %float
     %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
-          %v = OpConstantComposite %v3float %3 %float_1 %float_2
+          %6 = OpConstantComposite %v3float %3 %float_1 %float_2
+%_ptr_Private_v3float = OpTypePointer Private %v3float
+          %v = OpVariable %_ptr_Private_v3float Private %6
        %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
-         %10 = OpLabel
+          %9 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %9
+         %12 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.wgsl
index 376f901c..2b4faac 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3(0.0, 1.0, 2.0);
+var<private> v = vec3(0.0, 1.0, 2.0);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl
index 7b9ebcb..1c301e1 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl
@@ -1 +1 @@
-let v = vec3(0, 1, 2);
+var<private> v = vec3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.glsl
index 0392e70..26b5581 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const ivec3 v = ivec3(0, 1, 2);
+ivec3 v = ivec3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.hlsl
index 9bc1dc4..fcb0802 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const int3 v = int3(0, 1, 2);
+static int3 v = int3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.msl
index 63fbce8..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant int3 v = int3(0, 1, 2);
-
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.spvasm
index 20bcaa8..68ed2d6 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 11
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -14,10 +14,12 @@
           %3 = OpConstantNull %int
       %int_1 = OpConstant %int 1
       %int_2 = OpConstant %int 2
-          %v = OpConstantComposite %v3int %3 %int_1 %int_2
+          %6 = OpConstantComposite %v3int %3 %int_1 %int_2
+%_ptr_Private_v3int = OpTypePointer Private %v3int
+          %v = OpVariable %_ptr_Private_v3int Private %6
        %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
-         %10 = OpLabel
+          %9 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %9
+         %12 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.wgsl
index 7b9ebcb..1c301e1 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3(0, 1, 2);
+var<private> v = vec3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl
index 9f3a1f3..741e882 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl
@@ -1 +1 @@
-let v = vec3(false, true, false);
+var<private> v = vec3(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.glsl
index e7d7818..872f1a2 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const bvec3 v = bvec3(false, true, false);
+bvec3 v = bvec3(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.hlsl
index d5acfa0..420e0c3 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const bool3 v = bool3(false, true, false);
+static bool3 v = bool3(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.msl
index 0cd9b5b..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant bool3 v = bool3(false, true, false);
-
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.spvasm
index 4abfaa6..587225f 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
      %v3bool = OpTypeVector %bool 3
           %3 = OpConstantNull %bool
        %true = OpConstantTrue %bool
-          %v = OpConstantComposite %v3bool %3 %true %3
+          %5 = OpConstantComposite %v3bool %3 %true %3
+%_ptr_Private_v3bool = OpTypePointer Private %v3bool
+          %v = OpVariable %_ptr_Private_v3bool Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.wgsl
index 9f3a1f3..741e882 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3(false, true, false);
+var<private> v = vec3(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl
index e09c928..05ccfdd 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl
@@ -1 +1 @@
-let v = vec3(0.0f, 1.0f, 2.0f);
+var<private> v = vec3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.glsl
index 9f73b75..f63fa39 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const vec3 v = vec3(0.0f, 1.0f, 2.0f);
+vec3 v = vec3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.hlsl
index daa5a1c..f2ffb86 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float3 v = float3(0.0f, 1.0f, 2.0f);
+static float3 v = float3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.msl
index b0b245a..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float3 v = float3(0.0f, 1.0f, 2.0f);
-
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.spvasm
index 5dde9d6..5df28a4 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 11
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -14,10 +14,12 @@
           %3 = OpConstantNull %float
     %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
-          %v = OpConstantComposite %v3float %3 %float_1 %float_2
+          %6 = OpConstantComposite %v3float %3 %float_1 %float_2
+%_ptr_Private_v3float = OpTypePointer Private %v3float
+          %v = OpVariable %_ptr_Private_v3float Private %6
        %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
-         %10 = OpLabel
+          %9 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %9
+         %12 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.wgsl
index e09c928..05ccfdd 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3(0.0f, 1.0f, 2.0f);
+var<private> v = vec3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl
index 73cd973..1fbcabe 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl
@@ -1 +1 @@
-let v = vec3(0i, 1i, 2i);
+var<private> v = vec3(0i, 1i, 2i);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.glsl
index 0392e70..26b5581 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const ivec3 v = ivec3(0, 1, 2);
+ivec3 v = ivec3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.hlsl
index 9bc1dc4..fcb0802 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const int3 v = int3(0, 1, 2);
+static int3 v = int3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.msl
index 63fbce8..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant int3 v = int3(0, 1, 2);
-
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.spvasm
index 20bcaa8..68ed2d6 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 11
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -14,10 +14,12 @@
           %3 = OpConstantNull %int
       %int_1 = OpConstant %int 1
       %int_2 = OpConstant %int 2
-          %v = OpConstantComposite %v3int %3 %int_1 %int_2
+          %6 = OpConstantComposite %v3int %3 %int_1 %int_2
+%_ptr_Private_v3int = OpTypePointer Private %v3int
+          %v = OpVariable %_ptr_Private_v3int Private %6
        %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
-         %10 = OpLabel
+          %9 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %9
+         %12 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.wgsl
index 73cd973..1fbcabe 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3(0i, 1i, 2i);
+var<private> v = vec3(0i, 1i, 2i);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl
index 0040d27..8b6ff5a 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl
@@ -1 +1 @@
-let v = vec3(0u, 1u, 2u);
+var<private> v = vec3(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.glsl
index 1aabf2d..7187970 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const uvec3 v = uvec3(0u, 1u, 2u);
+uvec3 v = uvec3(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.hlsl
index 18899ea..3190b32 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const uint3 v = uint3(0u, 1u, 2u);
+static uint3 v = uint3(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.msl
index 6090ecf..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant uint3 v = uint3(0u, 1u, 2u);
-
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.spvasm
index 74c3ed3..1e4e51f 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 11
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -14,10 +14,12 @@
           %3 = OpConstantNull %uint
      %uint_1 = OpConstant %uint 1
      %uint_2 = OpConstant %uint 2
-          %v = OpConstantComposite %v3uint %3 %uint_1 %uint_2
+          %6 = OpConstantComposite %v3uint %3 %uint_1 %uint_2
+%_ptr_Private_v3uint = OpTypePointer Private %v3uint
+          %v = OpVariable %_ptr_Private_v3uint Private %6
        %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
-         %10 = OpLabel
+          %9 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %9
+         %12 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.wgsl
index 0040d27..8b6ff5a 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec3(0u, 1u, 2u);
+var<private> v = vec3(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl
index baeff0f..118eaf5 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl
@@ -1 +1 @@
-let v = vec4(false, true, false, true);
+var<private> v = vec4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.glsl
index 11236db..6b3de93 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const bvec4 v = bvec4(false, true, false, true);
+bvec4 v = bvec4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.hlsl
index af7e30f..0c15046 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const bool4 v = bool4(false, true, false, true);
+static bool4 v = bool4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.msl
index 840b113..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant bool4 v = bool4(false, true, false, true);
-
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.spvasm
index e5ad229..32c8adc 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
      %v4bool = OpTypeVector %bool 4
           %3 = OpConstantNull %bool
        %true = OpConstantTrue %bool
-          %v = OpConstantComposite %v4bool %3 %true %3 %true
+          %5 = OpConstantComposite %v4bool %3 %true %3 %true
+%_ptr_Private_v4bool = OpTypePointer Private %v4bool
+          %v = OpVariable %_ptr_Private_v4bool Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.wgsl
index baeff0f..118eaf5 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(false, true, false, true);
+var<private> v = vec4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl
index 5a04e5b..9ade06d 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl
@@ -1 +1 @@
-let v = vec4(0.f, 1.f, 2.f, 3.f);
+var<private> v = vec4(0.f, 1.f, 2.f, 3.f);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.glsl
index 254bda9..b053214 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const vec4 v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
+vec4 v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.hlsl
index bd679f3..f518edb 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
+static float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.msl
index 568e746..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
-
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.spvasm
index a45788b..d98cea5 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 12
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,12 @@
     %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
-          %v = OpConstantComposite %v4float %3 %float_1 %float_2 %float_3
+          %7 = OpConstantComposite %v4float %3 %float_1 %float_2 %float_3
+%_ptr_Private_v4float = OpTypePointer Private %v4float
+          %v = OpVariable %_ptr_Private_v4float Private %7
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %8
-         %11 = OpLabel
+         %10 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %10
+         %13 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.wgsl
index 89c6254..27e5285 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
+var<private> v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl
index 38a4ff8..b274f75 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl
@@ -1 +1 @@
-let v = vec4(0i, 1i, 2i, 3i);
+var<private> v = vec4(0i, 1i, 2i, 3i);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.glsl
index 77c907b..b7c56a2 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const ivec4 v = ivec4(0, 1, 2, 3);
+ivec4 v = ivec4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.hlsl
index 58b86ce..baeb427 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const int4 v = int4(0, 1, 2, 3);
+static int4 v = int4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.msl
index f00d2eb..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant int4 v = int4(0, 1, 2, 3);
-
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.spvasm
index 8518f99..98f0347 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 12
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,12 @@
       %int_1 = OpConstant %int 1
       %int_2 = OpConstant %int 2
       %int_3 = OpConstant %int 3
-          %v = OpConstantComposite %v4int %3 %int_1 %int_2 %int_3
+          %7 = OpConstantComposite %v4int %3 %int_1 %int_2 %int_3
+%_ptr_Private_v4int = OpTypePointer Private %v4int
+          %v = OpVariable %_ptr_Private_v4int Private %7
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %8
-         %11 = OpLabel
+         %10 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %10
+         %13 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.wgsl
index 38a4ff8..b274f75 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(0i, 1i, 2i, 3i);
+var<private> v = vec4(0i, 1i, 2i, 3i);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl
index ef7c766..0c12dbf 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl
@@ -1 +1 @@
-let v = vec4(0u, 1u, 2u, 3u);
+var<private> v = vec4(0u, 1u, 2u, 3u);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.glsl
index a6bfcae..8414d82 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const uvec4 v = uvec4(0u, 1u, 2u, 3u);
+uvec4 v = uvec4(0u, 1u, 2u, 3u);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.hlsl
index 014390a..2ab778a 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const uint4 v = uint4(0u, 1u, 2u, 3u);
+static uint4 v = uint4(0u, 1u, 2u, 3u);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.msl
index 83695b8..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant uint4 v = uint4(0u, 1u, 2u, 3u);
-
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.spvasm
index 2424ee0..b2ae7f4 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 12
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,12 @@
      %uint_1 = OpConstant %uint 1
      %uint_2 = OpConstant %uint 2
      %uint_3 = OpConstant %uint 3
-          %v = OpConstantComposite %v4uint %3 %uint_1 %uint_2 %uint_3
+          %7 = OpConstantComposite %v4uint %3 %uint_1 %uint_2 %uint_3
+%_ptr_Private_v4uint = OpTypePointer Private %v4uint
+          %v = OpVariable %_ptr_Private_v4uint Private %7
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %8
-         %11 = OpLabel
+         %10 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %10
+         %13 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.wgsl
index ef7c766..0c12dbf 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(0u, 1u, 2u, 3u);
+var<private> v = vec4(0u, 1u, 2u, 3u);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl
index bb1280e..3d81ce6 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl
@@ -1 +1 @@
-let v = vec4(0.0, 1.0, 2.0, 3.0);
+var<private> v = vec4(0.0, 1.0, 2.0, 3.0);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.glsl
index 254bda9..b053214 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const vec4 v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
+vec4 v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.hlsl
index bd679f3..f518edb 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
+static float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.msl
index 568e746..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
-
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.spvasm
index a45788b..d98cea5 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 12
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,12 @@
     %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
-          %v = OpConstantComposite %v4float %3 %float_1 %float_2 %float_3
+          %7 = OpConstantComposite %v4float %3 %float_1 %float_2 %float_3
+%_ptr_Private_v4float = OpTypePointer Private %v4float
+          %v = OpVariable %_ptr_Private_v4float Private %7
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %8
-         %11 = OpLabel
+         %10 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %10
+         %13 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.wgsl
index bb1280e..3d81ce6 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(0.0, 1.0, 2.0, 3.0);
+var<private> v = vec4(0.0, 1.0, 2.0, 3.0);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl
index ab60e6e..f59b42c 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl
@@ -1 +1 @@
-let v = vec4(0, 1, 2, 3);
+var<private> v = vec4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.glsl
index 77c907b..b7c56a2 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const ivec4 v = ivec4(0, 1, 2, 3);
+ivec4 v = ivec4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.hlsl
index 58b86ce..baeb427 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const int4 v = int4(0, 1, 2, 3);
+static int4 v = int4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.msl
index f00d2eb..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant int4 v = int4(0, 1, 2, 3);
-
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.spvasm
index 8518f99..98f0347 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 12
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,12 @@
       %int_1 = OpConstant %int 1
       %int_2 = OpConstant %int 2
       %int_3 = OpConstant %int 3
-          %v = OpConstantComposite %v4int %3 %int_1 %int_2 %int_3
+          %7 = OpConstantComposite %v4int %3 %int_1 %int_2 %int_3
+%_ptr_Private_v4int = OpTypePointer Private %v4int
+          %v = OpVariable %_ptr_Private_v4int Private %7
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %8
-         %11 = OpLabel
+         %10 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %10
+         %13 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.wgsl
index ab60e6e..f59b42c 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(0, 1, 2, 3);
+var<private> v = vec4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl
index baeff0f..118eaf5 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl
@@ -1 +1 @@
-let v = vec4(false, true, false, true);
+var<private> v = vec4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.glsl
index 11236db..6b3de93 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const bvec4 v = bvec4(false, true, false, true);
+bvec4 v = bvec4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.hlsl
index af7e30f..0c15046 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const bool4 v = bool4(false, true, false, true);
+static bool4 v = bool4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.msl
index 840b113..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant bool4 v = bool4(false, true, false, true);
-
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.spvasm
index e5ad229..32c8adc 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 10
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -13,10 +13,12 @@
      %v4bool = OpTypeVector %bool 4
           %3 = OpConstantNull %bool
        %true = OpConstantTrue %bool
-          %v = OpConstantComposite %v4bool %3 %true %3 %true
+          %5 = OpConstantComposite %v4bool %3 %true %3 %true
+%_ptr_Private_v4bool = OpTypePointer Private %v4bool
+          %v = OpVariable %_ptr_Private_v4bool Private %5
        %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %6
-          %9 = OpLabel
+          %8 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %8
+         %11 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.wgsl
index baeff0f..118eaf5 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(false, true, false, true);
+var<private> v = vec4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl
index 89c6254..27e5285 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl
@@ -1 +1 @@
-let v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
+var<private> v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.glsl
index 254bda9..b053214 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const vec4 v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
+vec4 v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.hlsl
index bd679f3..f518edb 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
+static float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.msl
index 568e746..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
-
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.spvasm
index a45788b..d98cea5 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 12
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,12 @@
     %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
     %float_3 = OpConstant %float 3
-          %v = OpConstantComposite %v4float %3 %float_1 %float_2 %float_3
+          %7 = OpConstantComposite %v4float %3 %float_1 %float_2 %float_3
+%_ptr_Private_v4float = OpTypePointer Private %v4float
+          %v = OpVariable %_ptr_Private_v4float Private %7
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %8
-         %11 = OpLabel
+         %10 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %10
+         %13 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.wgsl
index 89c6254..27e5285 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
+var<private> v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl
index 38a4ff8..b274f75 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl
@@ -1 +1 @@
-let v = vec4(0i, 1i, 2i, 3i);
+var<private> v = vec4(0i, 1i, 2i, 3i);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.glsl
index 77c907b..b7c56a2 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const ivec4 v = ivec4(0, 1, 2, 3);
+ivec4 v = ivec4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.hlsl
index 58b86ce..baeb427 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const int4 v = int4(0, 1, 2, 3);
+static int4 v = int4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.msl
index f00d2eb..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant int4 v = int4(0, 1, 2, 3);
-
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.spvasm
index 8518f99..98f0347 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 12
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,12 @@
       %int_1 = OpConstant %int 1
       %int_2 = OpConstant %int 2
       %int_3 = OpConstant %int 3
-          %v = OpConstantComposite %v4int %3 %int_1 %int_2 %int_3
+          %7 = OpConstantComposite %v4int %3 %int_1 %int_2 %int_3
+%_ptr_Private_v4int = OpTypePointer Private %v4int
+          %v = OpVariable %_ptr_Private_v4int Private %7
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %8
-         %11 = OpLabel
+         %10 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %10
+         %13 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.wgsl
index 38a4ff8..b274f75 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(0i, 1i, 2i, 3i);
+var<private> v = vec4(0i, 1i, 2i, 3i);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl
index ef7c766..0c12dbf 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl
@@ -1 +1 @@
-let v = vec4(0u, 1u, 2u, 3u);
+var<private> v = vec4(0u, 1u, 2u, 3u);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.glsl b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.glsl
index a6bfcae..8414d82 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.glsl
@@ -4,4 +4,4 @@
 void unused_entry_point() {
   return;
 }
-const uvec4 v = uvec4(0u, 1u, 2u, 3u);
+uvec4 v = uvec4(0u, 1u, 2u, 3u);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.hlsl b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.hlsl
index 014390a..2ab778a 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.hlsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.hlsl
@@ -3,4 +3,4 @@
   return;
 }
 
-static const uint4 v = uint4(0u, 1u, 2u, 3u);
+static uint4 v = uint4(0u, 1u, 2u, 3u);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.msl b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.msl
index 83695b8..466ceaa 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.msl
@@ -1,5 +1,3 @@
 #include <metal_stdlib>
 
 using namespace metal;
-constant uint4 v = uint4(0u, 1u, 2u, 3u);
-
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.spvasm b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.spvasm
index 2424ee0..b2ae7f4 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 12
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -15,10 +15,12 @@
      %uint_1 = OpConstant %uint 1
      %uint_2 = OpConstant %uint 2
      %uint_3 = OpConstant %uint 3
-          %v = OpConstantComposite %v4uint %3 %uint_1 %uint_2 %uint_3
+          %7 = OpConstantComposite %v4uint %3 %uint_1 %uint_2 %uint_3
+%_ptr_Private_v4uint = OpTypePointer Private %v4uint
+          %v = OpVariable %_ptr_Private_v4uint Private %7
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %8
-         %11 = OpLabel
+         %10 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %10
+         %13 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.wgsl b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.wgsl
index ef7c766..0c12dbf 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.wgsl
@@ -1 +1 @@
-let v = vec4(0u, 1u, 2u, 3u);
+var<private> v = vec4(0u, 1u, 2u, 3u);