Add entry points to end2end test 3/n

Update end2end tests to have entry points. Make sure methods are called
and globals are referenced to avoid dead code elimination.

Bug: 383315683
Change-Id: I177b7892b5229617b33a9e82827180a62b3ade96
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/268475
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl
index eb6a969..b04798d 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl
@@ -5,6 +5,8 @@
     t = 1.0f;
     return f32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : f16 = f16(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.dxc.hlsl
index 88f32cc..7a9bcb9 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return float(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float16_t v = float16_t(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.glsl
index 074a986..075e298 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.glsl
@@ -6,9 +6,7 @@
   t = 1.0f;
   return float(t);
 }
-void f() {
-  float16_t v = float16_t(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float16_t v = float16_t(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.msl
index 9fe8a3b..b117ef8 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return float((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float t = 0.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   half v = half(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.spvasm
index 51f846c..b58a8d6 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 21
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
           %4 = OpConstantNull %float
@@ -38,7 +37,3 @@
                OpStore %v %16
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.wgsl
index 18e3f13..b45c0b2 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return f32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : f16 = f16(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl
index 20ba445..4ddf43f 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl
@@ -3,6 +3,8 @@
     t = 1.0f;
     return f32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : i32 = i32(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.dxc.hlsl
index 99b4e7f..c12c426 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.dxc.hlsl
@@ -9,11 +9,8 @@
   return int(clamp(value, -2147483648.0f, 2147483520.0f));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int v = tint_f32_to_i32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.fxc.hlsl
index 99b4e7f..c12c426 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.fxc.hlsl
@@ -9,11 +9,8 @@
   return int(clamp(value, -2147483648.0f, 2147483520.0f));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int v = tint_f32_to_i32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.glsl
index 33644c4..fbec8ad 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.glsl
@@ -8,9 +8,7 @@
 int tint_f32_to_i32(float value) {
   return int(clamp(value, -2147483648.0f, 2147483520.0f));
 }
-void f() {
-  int v = tint_f32_to_i32(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  int v = tint_f32_to_i32(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.msl
index 7c52142..fe40c87 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.msl
@@ -14,6 +14,8 @@
   return int(clamp(value, -2147483648.0f, 2147483520.0f));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float t = 0.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   int v = tint_f32_to_i32(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.spvasm
index 517eb7c..8f64a40 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.spvasm
@@ -1,20 +1,19 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 30
+; Bound: 28
 ; Schema: 0
                OpCapability Shader
          %24 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_f32_to_i32 "tint_f32_to_i32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
           %4 = OpConstantNull %float
@@ -49,7 +48,3 @@
          %27 = OpConvertFToS %int %23
                OpReturnValue %27
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.wgsl
index 51e40e4..d7c7a2d 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return f32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : i32 = i32(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl
index 68354f0..00e4195 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl
@@ -3,6 +3,8 @@
     t = 1.0f;
     return f32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : u32 = u32(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.dxc.hlsl
index 14ed222..742aed8 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.dxc.hlsl
@@ -9,11 +9,8 @@
   return uint(clamp(value, 0.0f, 4294967040.0f));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint v = tint_f32_to_u32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.fxc.hlsl
index 14ed222..742aed8 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.fxc.hlsl
@@ -9,11 +9,8 @@
   return uint(clamp(value, 0.0f, 4294967040.0f));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint v = tint_f32_to_u32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.glsl
index 51e1eb4..0dd99e2 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.glsl
@@ -8,9 +8,7 @@
 uint tint_f32_to_u32(float value) {
   return uint(clamp(value, 0.0f, 4294967040.0f));
 }
-void f() {
-  uint v = tint_f32_to_u32(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uint v = tint_f32_to_u32(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.msl
index 9c86deb..8ba4bb4 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.msl
@@ -14,6 +14,8 @@
   return uint(clamp(value, 0.0f, 4294967040.0f));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float t = 0.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   uint v = tint_f32_to_u32(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.spvasm
index 0242caa..9827202 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.spvasm
@@ -1,20 +1,19 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 30
+; Bound: 28
 ; Schema: 0
                OpCapability Shader
          %24 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_f32_to_u32 "tint_f32_to_u32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
           %4 = OpConstantNull %float
@@ -49,7 +48,3 @@
          %27 = OpConvertFToU %uint %23
                OpReturnValue %27
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.wgsl
index 2168094..8a6ebc2 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return f32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : u32 = u32(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl
index e184404..0ee1db6 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl
@@ -3,6 +3,8 @@
     t = 1i;
     return i32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : bool = bool(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.dxc.hlsl
index 8cb844fd..500217b 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return int(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.fxc.hlsl
index 8cb844fd..500217b 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return int(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.glsl
index e6263b7..b57e66a 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1;
   return int(t);
 }
-void f() {
-  bool v = bool(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bool v = bool(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.msl
index 2b25da3..5b75f66 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return int((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int t = 0;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   bool v = bool(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.spvasm
index c2973ed..9cbf6c7 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 21
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
           %4 = OpConstantNull %int
@@ -36,7 +35,3 @@
                OpStore %v %16
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.wgsl
index c65ee31..57b364a 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return i32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : bool = bool(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl
index b2ad166..7083416 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl
@@ -5,6 +5,8 @@
     t = 1i;
     return i32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : f16 = f16(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.dxc.hlsl
index be0d5cf..62b2a7a 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return int(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float16_t v = float16_t(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.glsl
index 20a5542..4f8ec8d 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.glsl
@@ -6,9 +6,7 @@
   t = 1;
   return int(t);
 }
-void f() {
-  float16_t v = float16_t(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float16_t v = float16_t(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.msl
index 9f6231e..3c4a72b 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return int((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int t = 0;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   half v = half(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.spvasm
index 2993ae0..3ff5319 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 21
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
           %4 = OpConstantNull %int
@@ -38,7 +37,3 @@
                OpStore %v %16
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.wgsl
index c88c363..dc67806 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return i32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : f16 = f16(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl
index 19f8e5b..71a9a8c 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl
@@ -3,6 +3,8 @@
     t = 1i;
     return i32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : f32 = f32(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.dxc.hlsl
index 94c8397..d1af3dc 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return int(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.fxc.hlsl
index 94c8397..d1af3dc 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return int(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.glsl
index 4519604..0378b94 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1;
   return int(t);
 }
-void f() {
-  float v = float(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float v = float(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.msl
index 1c57c32..a089052 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return int((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int t = 0;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   float v = float(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.spvasm
index 04fb022..cac01d2 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 21
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
           %4 = OpConstantNull %int
@@ -36,7 +35,3 @@
                OpStore %v %16
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.wgsl
index 7dfd41b..e494e10 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return i32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : f32 = f32(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl
index 7e37889..60b4a3e 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl
@@ -3,6 +3,8 @@
     t = 1i;
     return i32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : u32 = u32(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.dxc.hlsl
index 740b73f..b12fe1e 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return int(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint v = uint(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.fxc.hlsl
index 740b73f..b12fe1e 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return int(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint v = uint(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.glsl
index 409a66d..cb7c0c4 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1;
   return int(t);
 }
-void f() {
-  uint v = uint(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uint v = uint(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.msl
index 6588473..33ccd89 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return int((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int t = 0;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   uint v = uint(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.spvasm
index 7891968..cee140b 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 21
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
           %4 = OpConstantNull %int
@@ -36,7 +35,3 @@
                OpStore %v %16
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.wgsl
index 2073153..7e771f2 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return i32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : u32 = u32(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl
index 3a01c45..b46d738 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl
@@ -3,6 +3,8 @@
     t = 1u;
     return u32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : bool = bool(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.dxc.hlsl
index 64154de..876c498 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return uint(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.fxc.hlsl
index 64154de..876c498 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return uint(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.glsl
index fc00403..84cf174 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1u;
   return uint(t);
 }
-void f() {
-  bool v = bool(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bool v = bool(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.msl
index 535ce39..99d81cf 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return uint((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint t = 0u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   bool v = bool(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.spvasm
index 52e4c91..b1cef47 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 21
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
           %4 = OpConstantNull %uint
@@ -36,7 +35,3 @@
                OpStore %v %16
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.wgsl
index 5bd0e62..f33dbe9 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return u32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : bool = bool(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl
index 8b2fd9c..61c27b6 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl
@@ -5,6 +5,8 @@
     t = 1u;
     return u32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : f16 = f16(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.dxc.hlsl
index c30c2d2..a50ef96 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return uint(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float16_t v = float16_t(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.glsl
index 6e8507d..518307d 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.glsl
@@ -6,9 +6,7 @@
   t = 1u;
   return uint(t);
 }
-void f() {
-  float16_t v = float16_t(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float16_t v = float16_t(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.msl
index 318609c..a1a0557 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return uint((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint t = 0u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   half v = half(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.spvasm
index 51244b4..7cf85c0 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 21
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
           %4 = OpConstantNull %uint
@@ -38,7 +37,3 @@
                OpStore %v %16
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.wgsl
index b97e57c..2b72a39 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return u32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : f16 = f16(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl
index 2ed51ec..2e5ab95 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl
@@ -3,6 +3,8 @@
     t = 1u;
     return u32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : f32 = f32(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.dxc.hlsl
index 9abfb65..e27afe5 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return uint(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.fxc.hlsl
index 9abfb65..e27afe5 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return uint(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.glsl
index de83c17..833bc8d 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1u;
   return uint(t);
 }
-void f() {
-  float v = float(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float v = float(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.msl
index 5e3da46..d72d30d 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return uint((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint t = 0u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   float v = float(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.spvasm
index 1d6acc0..ad09fd0 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 21
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
           %4 = OpConstantNull %uint
@@ -36,7 +35,3 @@
                OpStore %v %16
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.wgsl
index 46780ee..51daa51 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return u32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : f32 = f32(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl
index dd6f788..8b081b2 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl
@@ -3,6 +3,8 @@
     t = 1u;
     return u32(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : i32 = i32(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.dxc.hlsl
index a0871e2..b880355 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return uint(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int v = int(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.fxc.hlsl
index a0871e2..b880355 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return uint(t);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int v = int(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.glsl
index 7787868..a034c85 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1u;
   return uint(t);
 }
-void f() {
-  int v = int(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  int v = int(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.msl
index cebd6c5..60315d4 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return uint((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint t = 0u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   int v = int(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.spvasm
index c473bf7..42a57a3 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 21
+; Bound: 19
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
           %4 = OpConstantNull %uint
@@ -36,7 +35,3 @@
                OpStore %v %16
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %12
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.wgsl
index d95289b..ce7fc71 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return u32(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : i32 = i32(m());
 }
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl
index 5b98669..96f06ffc 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : f16 = f16(bool(true));
\ No newline at end of file
+var<private> u : f16 = f16(bool(true));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.dxc.hlsl
index 9e169bd..eb9a38d 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float16_t u = float16_t(1.0h);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.msl
index ef3aa0f..cd26d21 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread half* u;
+};
+
+kernel void v() {
+  thread half u = 1.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.spvasm
index 7e9bdeb..ac71139 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.spvasm
@@ -1,23 +1,24 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
 %half_0x1p_0 = OpConstant %half 0x1p+0
           %u = OpVariable %_ptr_Private_half Private %half_0x1p_0
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %half %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.wgsl
index 3bde2f0..8e20289 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : f16 = f16(bool(true));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl
index d3b414b..a103b10 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl
@@ -1 +1,6 @@
-var<private> u : f32 = f32(bool(true));
\ No newline at end of file
+var<private> u : f32 = f32(bool(true));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.dxc.hlsl
index c2e4476..2837532 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float u = 1.0f;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.fxc.hlsl
index c2e4476..2837532 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static float u = 1.0f;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.msl
index ef3aa0f..68af7e3 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread float* u;
+};
+
+kernel void v() {
+  thread float u = 1.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.spvasm
index ec5ff92..c476b95 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
     %float_1 = OpConstant %float 1
           %u = OpVariable %_ptr_Private_float Private %float_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %float %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.wgsl
index 2431d42..9155b95 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : f32 = f32(bool(true));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl
index ee7b4df..f55a141 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl
@@ -1 +1,6 @@
-var<private> u : i32 = i32(bool(true));
\ No newline at end of file
+var<private> u : i32 = i32(bool(true));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.dxc.hlsl
index cfbb438..ef6cd70 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static int u = int(1);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.fxc.hlsl
index cfbb438..ef6cd70 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static int u = int(1);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.msl
index ef3aa0f..4ca65bc 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread int* u;
+};
+
+kernel void v() {
+  thread int u = 1;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.spvasm
index 78385fd..8836437 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
       %int_1 = OpConstant %int 1
           %u = OpVariable %_ptr_Private_int Private %int_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %int %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.wgsl
index 323307f..578759e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : i32 = i32(bool(true));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl
index 8e355a4..2762f9d 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl
@@ -1 +1,6 @@
-var<private> u : u32 = u32(bool(true));
\ No newline at end of file
+var<private> u : u32 = u32(bool(true));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.dxc.hlsl
index 2477ff5..a5902bb 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint u = 1u;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.fxc.hlsl
index 2477ff5..a5902bb 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint u = 1u;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.msl
index ef3aa0f..1bacb98 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread uint* u;
+};
+
+kernel void v() {
+  thread uint u = 1u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.spvasm
index af4f009..4e8533e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
      %uint_1 = OpConstant %uint 1
           %u = OpVariable %_ptr_Private_uint Private %uint_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %uint %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.wgsl
index a8833ba..37c4178 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : u32 = u32(bool(true));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl
index d4fee32..f1a0faf 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : bool = bool(f16(1.0h));
\ No newline at end of file
+var<private> u : bool = bool(f16(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.dxc.hlsl
index dee0aec..02b00c2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool u = true;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.fxc.hlsl
index dee0aec..02b00c2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool u = true;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.msl
index ef3aa0f..c309c62 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread bool* u;
+};
+
+kernel void v() {
+  thread bool u = true;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.spvasm
index 077d5e5..5d5bde3 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
        %true = OpConstantTrue %bool
           %u = OpVariable %_ptr_Private_bool Private %true
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %bool %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.wgsl
index 24b0904..73d1b10 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : bool = bool(f16(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl
index be80e5a..3609c7f 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : f32 = f32(f16(1.0h));
\ No newline at end of file
+var<private> u : f32 = f32(f16(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.dxc.hlsl
index c2e4476..2837532 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float u = 1.0f;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.fxc.hlsl
index c2e4476..2837532 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static float u = 1.0f;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.msl
index ef3aa0f..68af7e3 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread float* u;
+};
+
+kernel void v() {
+  thread float u = 1.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.spvasm
index ec5ff92..c476b95 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
     %float_1 = OpConstant %float 1
           %u = OpVariable %_ptr_Private_float Private %float_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %float %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.wgsl
index 552f0af..578156c2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : f32 = f32(f16(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl
index 11580e5..499c9ae 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : i32 = i32(f16(1.0h));
\ No newline at end of file
+var<private> u : i32 = i32(f16(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.dxc.hlsl
index cfbb438..ef6cd70 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static int u = int(1);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.fxc.hlsl
index cfbb438..ef6cd70 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static int u = int(1);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.msl
index ef3aa0f..4ca65bc 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread int* u;
+};
+
+kernel void v() {
+  thread int u = 1;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.spvasm
index 78385fd..8836437 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
       %int_1 = OpConstant %int 1
           %u = OpVariable %_ptr_Private_int Private %int_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %int %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.wgsl
index 6399f20..a05c15a 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : i32 = i32(f16(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl
index f525bca..4a4995e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : u32 = u32(f16(1.0h));
\ No newline at end of file
+var<private> u : u32 = u32(f16(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.dxc.hlsl
index 2477ff5..a5902bb 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint u = 1u;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.fxc.hlsl
index 2477ff5..a5902bb 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint u = 1u;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.msl
index ef3aa0f..1bacb98 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread uint* u;
+};
+
+kernel void v() {
+  thread uint u = 1u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.spvasm
index af4f009..4e8533e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
      %uint_1 = OpConstant %uint 1
           %u = OpVariable %_ptr_Private_uint Private %uint_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %uint %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.wgsl
index 9b05580..92b8836 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : u32 = u32(f16(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl
index 5449839..e2dd7cb 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl
@@ -1 +1,6 @@
-var<private> u : bool = bool(f32(1.0f));
\ No newline at end of file
+var<private> u : bool = bool(f32(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.dxc.hlsl
index dee0aec..02b00c2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool u = true;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.fxc.hlsl
index dee0aec..02b00c2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool u = true;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.msl
index ef3aa0f..c309c62 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread bool* u;
+};
+
+kernel void v() {
+  thread bool u = true;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.spvasm
index 077d5e5..5d5bde3 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
        %true = OpConstantTrue %bool
           %u = OpVariable %_ptr_Private_bool Private %true
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %bool %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.wgsl
index 0c731d4..53228a9 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : bool = bool(f32(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl
index ad15dc7..32c4970 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : f16 = f16(f32(1.0f));
\ No newline at end of file
+var<private> u : f16 = f16(f32(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.dxc.hlsl
index 9e169bd..eb9a38d 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float16_t u = float16_t(1.0h);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.msl
index ef3aa0f..cd26d21 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread half* u;
+};
+
+kernel void v() {
+  thread half u = 1.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.spvasm
index 7e9bdeb..ac71139 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.spvasm
@@ -1,23 +1,24 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
 %half_0x1p_0 = OpConstant %half 0x1p+0
           %u = OpVariable %_ptr_Private_half Private %half_0x1p_0
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %half %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.wgsl
index 758a102..059ec40 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : f16 = f16(f32(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl
index 6dc6953..d92a543 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl
@@ -1 +1,6 @@
-var<private> u : i32 = i32(f32(1.0f));
\ No newline at end of file
+var<private> u : i32 = i32(f32(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.dxc.hlsl
index cfbb438..ef6cd70 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static int u = int(1);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.fxc.hlsl
index cfbb438..ef6cd70 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static int u = int(1);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.msl
index ef3aa0f..4ca65bc 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread int* u;
+};
+
+kernel void v() {
+  thread int u = 1;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.spvasm
index 78385fd..8836437 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
       %int_1 = OpConstant %int 1
           %u = OpVariable %_ptr_Private_int Private %int_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %int %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.wgsl
index c6e43f7..8d24de7 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : i32 = i32(f32(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl
index e99f9fa..d213577 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl
@@ -1 +1,6 @@
-var<private> u : u32 = u32(f32(1.0f));
\ No newline at end of file
+var<private> u : u32 = u32(f32(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.dxc.hlsl
index 2477ff5..a5902bb 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint u = 1u;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.fxc.hlsl
index 2477ff5..a5902bb 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint u = 1u;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.msl
index ef3aa0f..1bacb98 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread uint* u;
+};
+
+kernel void v() {
+  thread uint u = 1u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.spvasm
index af4f009..4e8533e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
      %uint_1 = OpConstant %uint 1
           %u = OpVariable %_ptr_Private_uint Private %uint_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %uint %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.wgsl
index bdeebe7..f1a99a4 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : u32 = u32(f32(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl
index 3b5cb95..07481aa 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl
@@ -1 +1,6 @@
-var<private> u : bool = bool(i32(1i));
\ No newline at end of file
+var<private> u : bool = bool(i32(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.dxc.hlsl
index dee0aec..02b00c2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool u = true;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.fxc.hlsl
index dee0aec..02b00c2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool u = true;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.msl
index ef3aa0f..c309c62 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread bool* u;
+};
+
+kernel void v() {
+  thread bool u = true;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.spvasm
index 077d5e5..5d5bde3 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
        %true = OpConstantTrue %bool
           %u = OpVariable %_ptr_Private_bool Private %true
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %bool %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.wgsl
index 94be66b..a1e3e2a 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : bool = bool(i32(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl
index f8846dd..e2cd043 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : f16 = f16(i32(1i));
\ No newline at end of file
+var<private> u : f16 = f16(i32(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.dxc.hlsl
index 9e169bd..eb9a38d 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float16_t u = float16_t(1.0h);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.msl
index ef3aa0f..cd26d21 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread half* u;
+};
+
+kernel void v() {
+  thread half u = 1.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.spvasm
index 7e9bdeb..ac71139 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.spvasm
@@ -1,23 +1,24 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
 %half_0x1p_0 = OpConstant %half 0x1p+0
           %u = OpVariable %_ptr_Private_half Private %half_0x1p_0
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %half %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.wgsl
index 0b32d74..1842e68 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : f16 = f16(i32(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl
index a0a0ae6..34f244e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl
@@ -1 +1,6 @@
-var<private> u : f32 = f32(i32(1i));
\ No newline at end of file
+var<private> u : f32 = f32(i32(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.dxc.hlsl
index c2e4476..2837532 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float u = 1.0f;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.fxc.hlsl
index c2e4476..2837532 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static float u = 1.0f;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.msl
index ef3aa0f..68af7e3 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread float* u;
+};
+
+kernel void v() {
+  thread float u = 1.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.spvasm
index ec5ff92..c476b95 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
     %float_1 = OpConstant %float 1
           %u = OpVariable %_ptr_Private_float Private %float_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %float %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.wgsl
index 67c9548..0b917ac 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : f32 = f32(i32(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl
index f0d6674..85b3e9d 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl
@@ -1 +1,6 @@
-var<private> u : u32 = u32(i32(1i));
\ No newline at end of file
+var<private> u : u32 = u32(i32(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.dxc.hlsl
index 2477ff5..a5902bb 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint u = 1u;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.fxc.hlsl
index 2477ff5..a5902bb 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint u = 1u;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.msl
index ef3aa0f..1bacb98 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread uint* u;
+};
+
+kernel void v() {
+  thread uint u = 1u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.spvasm
index af4f009..4e8533e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
      %uint_1 = OpConstant %uint 1
           %u = OpVariable %_ptr_Private_uint Private %uint_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %uint %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.wgsl
index af0f9b7..5a4899c 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : u32 = u32(i32(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl
index ecdeb2a..50bb9b1 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl
@@ -1 +1,6 @@
-var<private> u : bool = bool(u32(1u));
\ No newline at end of file
+var<private> u : bool = bool(u32(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.dxc.hlsl
index dee0aec..02b00c2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool u = true;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.fxc.hlsl
index dee0aec..02b00c2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool u = true;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.msl
index ef3aa0f..c309c62 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread bool* u;
+};
+
+kernel void v() {
+  thread bool u = true;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.spvasm
index 077d5e5..5d5bde3 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
        %true = OpConstantTrue %bool
           %u = OpVariable %_ptr_Private_bool Private %true
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %bool %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.wgsl
index bdd5393..57421e2 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : bool = bool(u32(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl
index 149ff03..ca4e7d3 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : f16 = f16(u32(1u));
\ No newline at end of file
+var<private> u : f16 = f16(u32(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.dxc.hlsl
index 9e169bd..eb9a38d 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float16_t u = float16_t(1.0h);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.msl
index ef3aa0f..cd26d21 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread half* u;
+};
+
+kernel void v() {
+  thread half u = 1.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.spvasm
index 7e9bdeb..ac71139 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.spvasm
@@ -1,23 +1,24 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
 %half_0x1p_0 = OpConstant %half 0x1p+0
           %u = OpVariable %_ptr_Private_half Private %half_0x1p_0
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %half %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.wgsl
index f0d45d7..e296753 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : f16 = f16(u32(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl
index 45ed98f..cb82c77 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl
@@ -1 +1,6 @@
-var<private> u : f32 = f32(u32(1u));
\ No newline at end of file
+var<private> u : f32 = f32(u32(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.dxc.hlsl
index c2e4476..2837532 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float u = 1.0f;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.fxc.hlsl
index c2e4476..2837532 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static float u = 1.0f;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.msl
index ef3aa0f..68af7e3 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread float* u;
+};
+
+kernel void v() {
+  thread float u = 1.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.spvasm
index ec5ff92..c476b95 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
     %float_1 = OpConstant %float 1
           %u = OpVariable %_ptr_Private_float Private %float_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %float %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.wgsl
index 6c73ec6..99fa241 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : f32 = f32(u32(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl
index 9bc418b..cf57398 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl
@@ -1 +1,6 @@
-var<private> u : i32 = i32(u32(1u));
\ No newline at end of file
+var<private> u : i32 = i32(u32(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.dxc.hlsl
index cfbb438..ef6cd70 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static int u = int(1);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.fxc.hlsl
index cfbb438..ef6cd70 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static int u = int(1);
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.msl
index ef3aa0f..4ca65bc 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread int* u;
+};
+
+kernel void v() {
+  thread int u = 1;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.spvasm
index 78385fd..8836437 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.spvasm
@@ -1,21 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 9
+; Bound: 10
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
       %int_1 = OpConstant %int 1
           %u = OpVariable %_ptr_Private_int Private %int_1
        %void = OpTypeVoid
           %7 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %7
+       %main = OpFunction %void None %7
           %8 = OpLabel
+          %9 = OpLoad %int %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.wgsl
index 97e29d6..65b5010 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : i32 = i32(u32(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl
index 0fc1893..3d9b8b6 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = bool(true);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : f16 = f16(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.dxc.hlsl
index 4a17538..5887a99 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool u = true;
+[numthreads(1, 1, 1)]
 void f() {
   float16_t v = float16_t(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.glsl
index 693de70..c799d03 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.glsl
@@ -2,9 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float: require
 
 bool u = true;
-void f() {
-  float16_t v = float16_t(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float16_t v = float16_t(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.msl
index 405ed98..e22b0bf 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread bool* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool u = true;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   half const v = half((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.spvasm
index abbf9b7..5ad6f5b 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.spvasm
@@ -1,18 +1,17 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 16
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
        %true = OpConstantTrue %bool
@@ -28,7 +27,3 @@
           %v = OpSelect %half %9 %half_0x1p_0 %half_0x0p_0
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.wgsl
index 76d3f8f..028ffc6 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = bool(true);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : f16 = f16(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl
index a8e5d3c..e9e8b3b3 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = bool(true);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : f32 = f32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.dxc.hlsl
index 743c5be..4a8d9c7 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool u = true;
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.fxc.hlsl
index 743c5be..4a8d9c7 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool u = true;
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.glsl
index 4a39771..cf34c0e 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 bool u = true;
-void f() {
-  float v = float(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float v = float(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.msl
index a7fd93c..c5561b2 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread bool* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool u = true;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   float const v = float((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.spvasm
index 22370ea..8cabfd9 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 16
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
        %true = OpConstantTrue %bool
@@ -26,7 +25,3 @@
           %v = OpSelect %float %9 %float_1 %float_0
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.wgsl
index 80c943c..3afecb5 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = bool(true);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : f32 = f32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl
index 16d0775..fccf158 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = bool(true);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : i32 = i32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.dxc.hlsl
index e29c1f9..8be9251 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool u = true;
+[numthreads(1, 1, 1)]
 void f() {
   int v = int(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.fxc.hlsl
index e29c1f9..8be9251 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool u = true;
+[numthreads(1, 1, 1)]
 void f() {
   int v = int(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.glsl
index 36f95cf..b4a07cd 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 bool u = true;
-void f() {
-  int v = int(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  int v = int(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.msl
index 339ab45..8c5544d 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread bool* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool u = true;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   int const v = int((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.spvasm
index dff7fa3..709b3fd 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 16
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
        %true = OpConstantTrue %bool
@@ -26,7 +25,3 @@
           %v = OpSelect %int %9 %int_1 %int_0
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.wgsl
index 12d29b4..ac31beb 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = bool(true);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : i32 = i32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl
index 05eec83..e1808f9 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = bool(true);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : u32 = u32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.dxc.hlsl
index 76344ae..a95b6d2 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool u = true;
+[numthreads(1, 1, 1)]
 void f() {
   uint v = uint(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.fxc.hlsl
index 76344ae..a95b6d2 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool u = true;
+[numthreads(1, 1, 1)]
 void f() {
   uint v = uint(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.glsl
index 774b611..df2badc 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 bool u = true;
-void f() {
-  uint v = uint(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uint v = uint(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.msl
index be5feba..ff88950 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread bool* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool u = true;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   uint const v = uint((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.spvasm
index e829820..3975923 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 16
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
        %true = OpConstantTrue %bool
@@ -26,7 +25,3 @@
           %v = OpSelect %uint %9 %uint_1 %uint_0
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.wgsl
index 627875d..f44a906 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = bool(true);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : u32 = u32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl
index 5f39b50..06c23cf 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = f16(1.0h);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : bool = bool(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.dxc.hlsl
index 2470847..68d3029 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static float16_t u = float16_t(1.0h);
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.glsl
index d1898d1..88da99c 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.glsl
@@ -2,9 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float: require
 
 float16_t u = 1.0hf;
-void f() {
-  bool v = bool(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bool v = bool(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.msl
index 01489b1..ed472d2 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread half* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half u = 1.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   bool const v = bool((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.spvasm
index 8534eff..c3ce492 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.spvasm
@@ -1,18 +1,17 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 15
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
 %half_0x1p_0 = OpConstant %half 0x1p+0
@@ -27,7 +26,3 @@
           %v = OpFUnordNotEqual %bool %9 %12
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.wgsl
index 2526e50..2bc88d3 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = f16(1.0h);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : bool = bool(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl
index df2305d..3120196 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = f16(1.0h);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : f32 = f32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.dxc.hlsl
index 924d463..8bca43f 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static float16_t u = float16_t(1.0h);
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.glsl
index c3f5467..27f0f19 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.glsl
@@ -2,9 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float: require
 
 float16_t u = 1.0hf;
-void f() {
-  float v = float(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float v = float(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.msl
index a296a45..4e4154f 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread half* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half u = 1.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   float const v = float((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.spvasm
index 1f4ee10..5a3a386 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.spvasm
@@ -1,18 +1,17 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
 %half_0x1p_0 = OpConstant %half 0x1p+0
@@ -26,7 +25,3 @@
           %v = OpFConvert %float %9
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.wgsl
index 25a0dea..f75c4b4 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = f16(1.0h);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : f32 = f32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl
index 56ce046..860f023 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = f16(1.0h);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : i32 = i32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.dxc.hlsl
index 3b3ab2e..a612191 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.dxc.hlsl
@@ -4,11 +4,8 @@
   return int(clamp(value, float16_t(-65504.0h), float16_t(65504.0h)));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int v = tint_f16_to_i32(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.glsl
index db6bc3d..a7b1e79 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
 int tint_f16_to_i32(float16_t value) {
   return int(clamp(value, -65504.0hf, 65504.0hf));
 }
-void f() {
-  int v = tint_f16_to_i32(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  int v = tint_f16_to_i32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.msl
index 642177d..7a68642 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.msl
@@ -9,6 +9,8 @@
   return int(clamp(value, -65504.0h, 65504.0h));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half u = 1.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   int const v = tint_f16_to_i32((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.spvasm
index 1e019f4..46ccbc3 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.spvasm
@@ -1,21 +1,20 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 23
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
          %17 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_f16_to_i32 "tint_f16_to_i32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
 %half_0x1p_0 = OpConstant %half 0x1p+0
@@ -39,7 +38,3 @@
          %20 = OpConvertFToS %int %16
                OpReturnValue %20
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.wgsl
index ba52be3..e9b744e 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = f16(1.0h);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : i32 = i32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl
index a91884a..34d133f 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = f16(1.0h);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : u32 = u32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.dxc.hlsl
index 79b21ac..109b644 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.dxc.hlsl
@@ -4,11 +4,8 @@
   return uint(clamp(value, float16_t(0.0h), float16_t(65504.0h)));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint v = tint_f16_to_u32(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.glsl
index b0f1db7..22d855e 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
 uint tint_f16_to_u32(float16_t value) {
   return uint(clamp(value, 0.0hf, 65504.0hf));
 }
-void f() {
-  uint v = tint_f16_to_u32(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uint v = tint_f16_to_u32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.msl
index 78361df..72134e9 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.msl
@@ -9,6 +9,8 @@
   return uint(clamp(value, 0.0h, 65504.0h));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half u = 1.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   uint const v = tint_f16_to_u32((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.spvasm
index a66cf3c..07e27e7 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.spvasm
@@ -1,21 +1,20 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 23
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
          %17 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_f16_to_u32 "tint_f16_to_u32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
 %half_0x1p_0 = OpConstant %half 0x1p+0
@@ -39,7 +38,3 @@
          %20 = OpConvertFToU %uint %16
                OpReturnValue %20
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.wgsl
index 3db457f..3018d52 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = f16(1.0h);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : u32 = u32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl
index 6f2c14b..715e4a7 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl
@@ -1,4 +1,6 @@
 var<private> u = f32(1.0f);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : bool = bool(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.dxc.hlsl
index d087924..c821179 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static float u = 1.0f;
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.fxc.hlsl
index d087924..c821179 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static float u = 1.0f;
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.glsl
index 67e654f..c153b43 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 float u = 1.0f;
-void f() {
-  bool v = bool(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bool v = bool(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.msl
index 89de9df..280b380 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread float* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float u = 1.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   bool const v = bool((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.spvasm
index d72b072..c3f3271 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 15
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
     %float_1 = OpConstant %float 1
@@ -25,7 +24,3 @@
           %v = OpFUnordNotEqual %bool %9 %12
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.wgsl
index 41d4cc9..d3e73f0 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = f32(1.0f);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : bool = bool(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl
index cd0ee14..818d705 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = f32(1.0f);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : f16 = f16(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.dxc.hlsl
index 065c2dd..0fd3f547 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static float u = 1.0f;
+[numthreads(1, 1, 1)]
 void f() {
   float16_t v = float16_t(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.glsl
index 8512d8f..9112809 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.glsl
@@ -2,9 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float: require
 
 float u = 1.0f;
-void f() {
-  float16_t v = float16_t(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float16_t v = float16_t(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.msl
index f472557..23d8b86 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread float* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float u = 1.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   half const v = half((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.spvasm
index db70a84..40c1750 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.spvasm
@@ -1,18 +1,17 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
     %float_1 = OpConstant %float 1
@@ -26,7 +25,3 @@
           %v = OpFConvert %half %9
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.wgsl
index a6057b1..81fbee7 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = f32(1.0f);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : f16 = f16(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl
index a66dc01..9c0a9a0 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = f32(1.0f);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : i32 = i32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.dxc.hlsl
index 3d1a28a..9e8b052 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.dxc.hlsl
@@ -4,11 +4,8 @@
   return int(clamp(value, -2147483648.0f, 2147483520.0f));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int v = tint_f32_to_i32(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.fxc.hlsl
index 3d1a28a..9e8b052 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.fxc.hlsl
@@ -4,11 +4,8 @@
   return int(clamp(value, -2147483648.0f, 2147483520.0f));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int v = tint_f32_to_i32(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.glsl
index cb6d49a..764e33f 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.glsl
@@ -4,9 +4,7 @@
 int tint_f32_to_i32(float value) {
   return int(clamp(value, -2147483648.0f, 2147483520.0f));
 }
-void f() {
-  int v = tint_f32_to_i32(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  int v = tint_f32_to_i32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.msl
index be892e4..50f62f4 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.msl
@@ -9,6 +9,8 @@
   return int(clamp(value, -2147483648.0f, 2147483520.0f));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float u = 1.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   int const v = tint_f32_to_i32((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.spvasm
index 807912d..0c64050 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 23
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
          %17 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_f32_to_i32 "tint_f32_to_i32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
     %float_1 = OpConstant %float 1
@@ -37,7 +36,3 @@
          %20 = OpConvertFToS %int %16
                OpReturnValue %20
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.wgsl
index c4f2cc1..96b7471 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = f32(1.0f);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : i32 = i32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl
index de994c3..e46dbf6 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = f32(1.0f);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : u32 = u32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.dxc.hlsl
index 1a8e13b..70fd4ae 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.dxc.hlsl
@@ -4,11 +4,8 @@
   return uint(clamp(value, 0.0f, 4294967040.0f));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint v = tint_f32_to_u32(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.fxc.hlsl
index 1a8e13b..70fd4ae 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.fxc.hlsl
@@ -4,11 +4,8 @@
   return uint(clamp(value, 0.0f, 4294967040.0f));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint v = tint_f32_to_u32(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.glsl
index 59c31ed..c552d52 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.glsl
@@ -4,9 +4,7 @@
 uint tint_f32_to_u32(float value) {
   return uint(clamp(value, 0.0f, 4294967040.0f));
 }
-void f() {
-  uint v = tint_f32_to_u32(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uint v = tint_f32_to_u32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.msl
index 0fd2412..d19ce99 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.msl
@@ -9,6 +9,8 @@
   return uint(clamp(value, 0.0f, 4294967040.0f));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float u = 1.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   uint const v = tint_f32_to_u32((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.spvasm
index 381d618..5068f12 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 23
+; Bound: 21
 ; Schema: 0
                OpCapability Shader
          %17 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_f32_to_u32 "tint_f32_to_u32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
     %float_1 = OpConstant %float 1
@@ -37,7 +36,3 @@
          %20 = OpConvertFToU %uint %16
                OpReturnValue %20
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.wgsl
index f877218..012fc36 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = f32(1.0f);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : u32 = u32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl
index 6ba9360..ffcda85 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl
@@ -1,4 +1,6 @@
 var<private> u = i32(1i);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : bool = bool(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.dxc.hlsl
index 6e898dd..1516926 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static int u = int(1);
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.fxc.hlsl
index 6e898dd..1516926 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static int u = int(1);
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.glsl
index 0644773..92f10f8 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 int u = 1;
-void f() {
-  bool v = bool(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bool v = bool(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.msl
index 1d74d08..a1f2373 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread int* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int u = 1;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   bool const v = bool((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.spvasm
index 93adf7d..cba6e8e 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 15
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
       %int_1 = OpConstant %int 1
@@ -25,7 +24,3 @@
           %v = OpINotEqual %bool %9 %12
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.wgsl
index b7e670f..7375d53 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = i32(1i);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : bool = bool(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl
index e9ebd7b..f9d6f35 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = i32(1i);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : f16 = f16(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.dxc.hlsl
index d4551b0..27d4be0 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static int u = int(1);
+[numthreads(1, 1, 1)]
 void f() {
   float16_t v = float16_t(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.glsl
index 1edf398..382016b 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.glsl
@@ -2,9 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float: require
 
 int u = 1;
-void f() {
-  float16_t v = float16_t(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float16_t v = float16_t(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.msl
index 33c7b94..e281003 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread int* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int u = 1;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   half const v = half((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.spvasm
index 4ea35f5..ab44214 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.spvasm
@@ -1,18 +1,17 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
       %int_1 = OpConstant %int 1
@@ -26,7 +25,3 @@
           %v = OpConvertSToF %half %9
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.wgsl
index 37a3a10..8ee0723 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = i32(1i);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : f16 = f16(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl
index 9e94811..bed3e8d 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = i32(1i);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : f32 = f32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.dxc.hlsl
index ce9d53e..23b2d2f 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static int u = int(1);
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.fxc.hlsl
index ce9d53e..23b2d2f 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static int u = int(1);
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.glsl
index e6aa7a0..f16ad11 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 int u = 1;
-void f() {
-  float v = float(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float v = float(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.msl
index 9d0d08e..58db38a 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread int* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int u = 1;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   float const v = float((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.spvasm
index 65720b2..7f995c2 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
       %int_1 = OpConstant %int 1
@@ -24,7 +23,3 @@
           %v = OpConvertSToF %float %9
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.wgsl
index 2d3bc2b..6a465e6 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = i32(1i);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : f32 = f32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl
index 6f213d6..51e7231 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = i32(1i);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : u32 = u32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.dxc.hlsl
index 4407866..819dfc5 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static int u = int(1);
+[numthreads(1, 1, 1)]
 void f() {
   uint v = uint(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.fxc.hlsl
index 4407866..819dfc5 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static int u = int(1);
+[numthreads(1, 1, 1)]
 void f() {
   uint v = uint(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.glsl
index 3bf36f2..79505a4 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 int u = 1;
-void f() {
-  uint v = uint(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uint v = uint(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.msl
index 650deb3..3799931 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread int* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int u = 1;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   uint const v = uint((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.spvasm
index a1a03d5..c25ff12 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
       %int_1 = OpConstant %int 1
@@ -24,7 +23,3 @@
           %v = OpBitcast %uint %9
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.wgsl
index b1b334c..22809d7 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = i32(1i);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : u32 = u32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl
index a914b1f..0ebe4d6 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl
@@ -1,4 +1,6 @@
 var<private> u = u32(1u);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : bool = bool(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.dxc.hlsl
index 456c7fd..f444332 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static uint u = 1u;
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.fxc.hlsl
index 456c7fd..f444332 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static uint u = 1u;
+[numthreads(1, 1, 1)]
 void f() {
   bool v = bool(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.glsl
index dcc0ddf..31b1541 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 uint u = 1u;
-void f() {
-  bool v = bool(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bool v = bool(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.msl
index 05c1cf4..e29ca4b 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread uint* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint u = 1u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   bool const v = bool((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.spvasm
index f504daa..b60788a 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 15
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
      %uint_1 = OpConstant %uint 1
@@ -25,7 +24,3 @@
           %v = OpINotEqual %bool %9 %12
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.wgsl
index 36a86c5..b5b2fcf 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = u32(1u);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : bool = bool(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl
index 34afa7b..e730561 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = u32(1u);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : f16 = f16(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.dxc.hlsl
index b98518b..d5ac019 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static uint u = 1u;
+[numthreads(1, 1, 1)]
 void f() {
   float16_t v = float16_t(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.glsl
index 4dd5bfd..8257e6a 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.glsl
@@ -2,9 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float: require
 
 uint u = 1u;
-void f() {
-  float16_t v = float16_t(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float16_t v = float16_t(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.msl
index f8d6ae0..7a44e9d 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread uint* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint u = 1u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   half const v = half((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.spvasm
index 557b110..5197433 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.spvasm
@@ -1,18 +1,17 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
      %uint_1 = OpConstant %uint 1
@@ -26,7 +25,3 @@
           %v = OpConvertUToF %half %9
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.wgsl
index 769efd2..09fdea7 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = u32(1u);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : f16 = f16(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl
index 59083e6..9c2e7a5 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = u32(1u);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : f32 = f32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.dxc.hlsl
index 82d0b64..9467cd5 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static uint u = 1u;
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.fxc.hlsl
index 82d0b64..9467cd5 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static uint u = 1u;
+[numthreads(1, 1, 1)]
 void f() {
   float v = float(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.glsl
index b1301a4..a7cecb8 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 uint u = 1u;
-void f() {
-  float v = float(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  float v = float(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.msl
index e2acc7c..6d0fde0 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread uint* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint u = 1u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   float const v = float((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.spvasm
index dee1e69..06b6ee1 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
      %uint_1 = OpConstant %uint 1
@@ -24,7 +23,3 @@
           %v = OpConvertUToF %float %9
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.wgsl
index c0c9c29..12f78ba 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = u32(1u);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : f32 = f32(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl
index 7ad464a..5ff894e 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = u32(1u);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : i32 = i32(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.dxc.hlsl
index bae3fa0..a0bf6a7 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static uint u = 1u;
+[numthreads(1, 1, 1)]
 void f() {
   int v = int(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.fxc.hlsl
index bae3fa0..a0bf6a7 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static uint u = 1u;
+[numthreads(1, 1, 1)]
 void f() {
   int v = int(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.glsl
index 996e5d0..5fddecd 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 uint u = 1u;
-void f() {
-  int v = int(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  int v = int(u);
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.msl
index 3917e69..529dc21 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread uint* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint u = 1u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   int const v = int((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.spvasm
index 33415db..31c310f 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
      %uint_1 = OpConstant %uint 1
@@ -24,7 +23,3 @@
           %v = OpBitcast %int %9
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %7
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.wgsl
index 303f9c8..6cdb613 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = u32(1u);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : i32 = i32(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl
index bb7ec22..4ef5ebe 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl
@@ -5,6 +5,8 @@
     t = true;
     return vec2<bool>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<f16> = vec2<f16>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.dxc.hlsl
index dd61436..b5ae840 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return bool2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> v = vector<float16_t, 2>(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.glsl
index e1aa864..4889327 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.glsl
@@ -6,9 +6,7 @@
   t = true;
   return bvec2(t);
 }
-void f() {
-  f16vec2 v = f16vec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  f16vec2 v = f16vec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.msl
index f0d1dd3..f88401f 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return bool2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool t = false;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   half2 v = half2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.spvasm
index b48661a..46ebd56 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 27
+; Bound: 25
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
           %4 = OpConstantNull %bool
@@ -44,7 +43,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %26 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.wgsl
index 3b01ebf..5975350 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return vec2<bool>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<f16> = vec2<f16>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl
index 0297268..f69a89d 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl
@@ -3,6 +3,8 @@
     t = true;
     return vec2<bool>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<f32> = vec2<f32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.dxc.hlsl
index 44127fc..098efbc 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return bool2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.fxc.hlsl
index 44127fc..098efbc 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return bool2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.glsl
index d6662c1..cbd8bd0 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = true;
   return bvec2(t);
 }
-void f() {
-  vec2 v = vec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  vec2 v = vec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.msl
index afcea7f..71142f3 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return bool2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool t = false;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   float2 v = float2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.spvasm
index 5a0e403..5a37ba5 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 27
+; Bound: 25
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
           %4 = OpConstantNull %bool
@@ -42,7 +41,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %26 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.wgsl
index b47833d..b3470b9 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<bool>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<f32> = vec2<f32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl
index c6239c1..11b6263 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl
@@ -3,6 +3,8 @@
     t = true;
     return vec2<bool>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<i32> = vec2<i32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.dxc.hlsl
index e3fc6e6..fa3f270 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return bool2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = int2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.fxc.hlsl
index e3fc6e6..fa3f270 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return bool2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = int2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.glsl
index 0a9da40..89a5794 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = true;
   return bvec2(t);
 }
-void f() {
-  ivec2 v = ivec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  ivec2 v = ivec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.msl
index 845468d..d488a1f 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return bool2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool t = false;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   int2 v = int2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.spvasm
index b427373..0c9b8cb 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 27
+; Bound: 25
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
           %4 = OpConstantNull %bool
@@ -42,7 +41,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %26 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.wgsl
index c34ab7a..5807339 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<bool>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<i32> = vec2<i32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl
index 2addc5d..1948cd9 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl
@@ -3,6 +3,8 @@
     t = true;
     return vec2<bool>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<u32> = vec2<u32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.dxc.hlsl
index 4c4ce01..8db6ae5 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return bool2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = uint2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.fxc.hlsl
index 4c4ce01..8db6ae5 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return bool2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = uint2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.glsl
index e3aac08..627e4b9 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = true;
   return bvec2(t);
 }
-void f() {
-  uvec2 v = uvec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uvec2 v = uvec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.msl
index b9983f8..ae27904 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return bool2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool t = false;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   uint2 v = uint2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.spvasm
index 99bbea7..c12cb7b 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 27
+; Bound: 25
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
 %_ptr_Private_bool = OpTypePointer Private %bool
           %4 = OpConstantNull %bool
@@ -42,7 +41,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %26 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.wgsl
index 8285f3c..34e3fb0 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<bool>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<u32> = vec2<u32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl
index fd41dd5..7398c79 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl
@@ -5,6 +5,8 @@
     t = 1.0h;
     return vec2<f16>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<bool> = vec2<bool>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.dxc.hlsl
index 8599fe5..874c583 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return vector<float16_t, 2>((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.glsl
index b46024a..8020920 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.glsl
@@ -6,9 +6,7 @@
   t = 1.0hf;
   return f16vec2(t);
 }
-void f() {
-  bvec2 v = bvec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bvec2 v = bvec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.msl
index 3b07a53..7ee51ec 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return half2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half t = 0.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   bool2 v = bool2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.spvasm
index 22a4b63..6ded8b9 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 25
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
           %4 = OpConstantNull %half
@@ -42,7 +41,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.wgsl
index 02dd30a..fcbb1c31 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return vec2<f16>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<bool> = vec2<bool>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl
index 0d60e70..969891a 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl
@@ -5,6 +5,8 @@
     t = 1.0h;
     return vec2<f16>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<f32> = vec2<f32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.dxc.hlsl
index 6230165..3258645 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return vector<float16_t, 2>((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.glsl
index 6bb45f8..3aba689 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.glsl
@@ -6,9 +6,7 @@
   t = 1.0hf;
   return f16vec2(t);
 }
-void f() {
-  vec2 v = vec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  vec2 v = vec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.msl
index af92805..9eb720d 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return half2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half t = 0.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   float2 v = float2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.spvasm
index bff5949..65cd451 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 24
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
           %4 = OpConstantNull %half
@@ -41,7 +40,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.wgsl
index 60a4008..882e8a1 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return vec2<f16>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<f32> = vec2<f32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl
index 230ec6e..ebb2273 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl
@@ -5,6 +5,8 @@
     t = 1.0h;
     return vec2<f16>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<i32> = vec2<i32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.dxc.hlsl
index 36f9dff..34e8c20 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.dxc.hlsl
@@ -9,11 +9,8 @@
   return int2(clamp(value, (float16_t(-65504.0h)).xx, (float16_t(65504.0h)).xx));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = tint_v2f16_to_v2i32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.glsl
index 56aa816..5485dc9 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.glsl
@@ -9,9 +9,7 @@
 ivec2 tint_v2f16_to_v2i32(f16vec2 value) {
   return ivec2(clamp(value, f16vec2(-65504.0hf), f16vec2(65504.0hf)));
 }
-void f() {
-  ivec2 v = tint_v2f16_to_v2i32(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  ivec2 v = tint_v2f16_to_v2i32(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.msl
index 75cea5b..ffc54f9 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.msl
@@ -14,6 +14,8 @@
   return int2(clamp(value, half2(-65504.0h), half2(65504.0h)));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half t = 0.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   int2 v = tint_v2f16_to_v2i32(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.spvasm
index 446384f..4fc7374 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.spvasm
@@ -1,22 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 35
+; Bound: 33
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
          %27 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_v2f16_to_v2i32 "tint_v2f16_to_v2i32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
           %4 = OpConstantNull %half
@@ -56,7 +55,3 @@
          %32 = OpConvertFToS %v2int %26
                OpReturnValue %32
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.wgsl
index 3be738e..21757f0 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return vec2<f16>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<i32> = vec2<i32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl
index 67893d3..780d0b4 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl
@@ -5,6 +5,8 @@
     t = 1.0h;
     return vec2<f16>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<u32> = vec2<u32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.dxc.hlsl
index 321619e..497aa73 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.dxc.hlsl
@@ -9,11 +9,8 @@
   return uint2(clamp(value, (float16_t(0.0h)).xx, (float16_t(65504.0h)).xx));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = tint_v2f16_to_v2u32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.glsl
index 6f381bb..17cb5ee 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.glsl
@@ -9,9 +9,7 @@
 uvec2 tint_v2f16_to_v2u32(f16vec2 value) {
   return uvec2(clamp(value, f16vec2(0.0hf), f16vec2(65504.0hf)));
 }
-void f() {
-  uvec2 v = tint_v2f16_to_v2u32(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uvec2 v = tint_v2f16_to_v2u32(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.msl
index d278433..03becab 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.msl
@@ -14,6 +14,8 @@
   return uint2(clamp(value, half2(0.0h), half2(65504.0h)));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half t = 0.0h;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   uint2 v = tint_v2f16_to_v2u32(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.spvasm
index f313aa2..14e52f7 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.spvasm
@@ -1,22 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
          %27 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_v2f16_to_v2u32 "tint_v2f16_to_v2u32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
 %_ptr_Private_half = OpTypePointer Private %half
           %4 = OpConstantNull %half
@@ -55,7 +54,3 @@
          %31 = OpConvertFToU %v2uint %26
                OpReturnValue %31
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.wgsl
index 0baea21..1c0dc76 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return vec2<f16>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<u32> = vec2<u32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl
index 4548914..d9aace0 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl
@@ -3,6 +3,8 @@
     t = 1.0f;
     return vec2<f32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<bool> = vec2<bool>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.dxc.hlsl
index 61cf286..509c70d 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return float2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.fxc.hlsl
index 61cf286..509c70d 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return float2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.glsl
index 3ab4c8d..e093c8b 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1.0f;
   return vec2(t);
 }
-void f() {
-  bvec2 v = bvec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bvec2 v = bvec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.msl
index 31a11d3..2c47b5c 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return float2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float t = 0.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   bool2 v = bool2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.spvasm
index f113eb0..e6153d5 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 25
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
           %4 = OpConstantNull %float
@@ -40,7 +39,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.wgsl
index e1569c0..adfe16c 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<f32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<bool> = vec2<bool>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl
index 9445dd1..d5ed635 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl
@@ -5,6 +5,8 @@
     t = 1.0f;
     return vec2<f32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<f16> = vec2<f16>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.dxc.hlsl
index 62fd63d..379f0a9 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return float2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> v = vector<float16_t, 2>(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.glsl
index 43ea857..0b86297 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.glsl
@@ -6,9 +6,7 @@
   t = 1.0f;
   return vec2(t);
 }
-void f() {
-  f16vec2 v = f16vec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  f16vec2 v = f16vec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.msl
index f8f1e66..5e071c4 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return float2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float t = 0.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   half2 v = half2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.spvasm
index 2f0a9c4..cffd4c0 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 24
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
           %4 = OpConstantNull %float
@@ -41,7 +40,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.wgsl
index 6b4ed96..aae0867 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return vec2<f32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<f16> = vec2<f16>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl
index 4707f3a..d4247d6 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl
@@ -3,6 +3,8 @@
     t = 1.0f;
     return vec2<f32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<i32> = vec2<i32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.dxc.hlsl
index a402480..9d0aae2 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.dxc.hlsl
@@ -9,11 +9,8 @@
   return int2(clamp(value, (-2147483648.0f).xx, (2147483520.0f).xx));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = tint_v2f32_to_v2i32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.fxc.hlsl
index a402480..9d0aae2 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.fxc.hlsl
@@ -9,11 +9,8 @@
   return int2(clamp(value, (-2147483648.0f).xx, (2147483520.0f).xx));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = tint_v2f32_to_v2i32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.glsl
index 180bf9c..f8be358 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.glsl
@@ -8,9 +8,7 @@
 ivec2 tint_v2f32_to_v2i32(vec2 value) {
   return ivec2(clamp(value, vec2(-2147483648.0f), vec2(2147483520.0f)));
 }
-void f() {
-  ivec2 v = tint_v2f32_to_v2i32(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  ivec2 v = tint_v2f32_to_v2i32(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.msl
index 9fda2c1..ff7dccc 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.msl
@@ -14,6 +14,8 @@
   return int2(clamp(value, float2(-2147483648.0f), float2(2147483520.0f)));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float t = 0.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   int2 v = tint_v2f32_to_v2i32(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.spvasm
index dc344ee..4075f48 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.spvasm
@@ -1,20 +1,19 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 35
+; Bound: 33
 ; Schema: 0
                OpCapability Shader
          %27 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_v2f32_to_v2i32 "tint_v2f32_to_v2i32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
           %4 = OpConstantNull %float
@@ -54,7 +53,3 @@
          %32 = OpConvertFToS %v2int %26
                OpReturnValue %32
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.wgsl
index 2eb1111..113a905 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<f32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<i32> = vec2<i32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl
index 93ccc95..3bb9e88 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl
@@ -3,6 +3,8 @@
     t = 1.0f;
     return vec2<f32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<u32> = vec2<u32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.dxc.hlsl
index ba1e67f..e53c3ab 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.dxc.hlsl
@@ -9,11 +9,8 @@
   return uint2(clamp(value, (0.0f).xx, (4294967040.0f).xx));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = tint_v2f32_to_v2u32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.fxc.hlsl
index ba1e67f..e53c3ab 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.fxc.hlsl
@@ -9,11 +9,8 @@
   return uint2(clamp(value, (0.0f).xx, (4294967040.0f).xx));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = tint_v2f32_to_v2u32(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.glsl
index 2b8d6ac..aa85d97 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.glsl
@@ -8,9 +8,7 @@
 uvec2 tint_v2f32_to_v2u32(vec2 value) {
   return uvec2(clamp(value, vec2(0.0f), vec2(4294967040.0f)));
 }
-void f() {
-  uvec2 v = tint_v2f32_to_v2u32(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uvec2 v = tint_v2f32_to_v2u32(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.msl
index 166d21f..7ea8108 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.msl
@@ -14,6 +14,8 @@
   return uint2(clamp(value, float2(0.0f), float2(4294967040.0f)));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float t = 0.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   uint2 v = tint_v2f32_to_v2u32(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.spvasm
index 3ef8225..1d9c60b 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.spvasm
@@ -1,20 +1,19 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
          %27 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_v2f32_to_v2u32 "tint_v2f32_to_v2u32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
 %_ptr_Private_float = OpTypePointer Private %float
           %4 = OpConstantNull %float
@@ -53,7 +52,3 @@
          %31 = OpConvertFToU %v2uint %26
                OpReturnValue %31
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.wgsl
index 1c7402c..bf178db 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<f32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<u32> = vec2<u32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl
index c22e51e..2bc4d11 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl
@@ -3,6 +3,8 @@
     t = 1i;
     return vec2<i32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<bool> = vec2<bool>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.dxc.hlsl
index 8cf99e3..3a073e9 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return int2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.fxc.hlsl
index 8cf99e3..3a073e9 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return int2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.glsl
index aef2780..30aa495 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1;
   return ivec2(t);
 }
-void f() {
-  bvec2 v = bvec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bvec2 v = bvec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.msl
index 38e2d8a..5467576 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return int2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int t = 0;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   bool2 v = bool2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.spvasm
index a1f31d7..18f8c37 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 25
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
           %4 = OpConstantNull %int
@@ -40,7 +39,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.wgsl
index 0041212..bb9c88c 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<i32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<bool> = vec2<bool>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl
index 7e6847b..892a9a2 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl
@@ -5,6 +5,8 @@
     t = 1i;
     return vec2<i32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<f16> = vec2<f16>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.dxc.hlsl
index a0d68e6..f40664d 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return int2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> v = vector<float16_t, 2>(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.glsl
index c6654b8..48c35f8 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.glsl
@@ -6,9 +6,7 @@
   t = 1;
   return ivec2(t);
 }
-void f() {
-  f16vec2 v = f16vec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  f16vec2 v = f16vec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.msl
index b82f6ec..4844c1c 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return int2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int t = 0;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   half2 v = half2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.spvasm
index 6fb3309..2bf40b3 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 24
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
           %4 = OpConstantNull %int
@@ -41,7 +40,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.wgsl
index 6653d1a..d171ebf 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return vec2<i32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<f16> = vec2<f16>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl
index e87bf9c..db89b46 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl
@@ -3,6 +3,8 @@
     t = 1i;
     return vec2<i32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<f32> = vec2<f32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.dxc.hlsl
index 63e9c3f..d9de267 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return int2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.fxc.hlsl
index 63e9c3f..d9de267 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return int2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.glsl
index 44d67f6..5169a36 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1;
   return ivec2(t);
 }
-void f() {
-  vec2 v = vec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  vec2 v = vec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.msl
index f90942e..39c8157 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return int2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int t = 0;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   float2 v = float2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.spvasm
index 1ea3389..1f5ccd0 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 24
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
           %4 = OpConstantNull %int
@@ -39,7 +38,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.wgsl
index 7c772d0..d848e3a 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<i32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<f32> = vec2<f32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl
index e8ad78f..0346034 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl
@@ -3,6 +3,8 @@
     t = 1i;
     return vec2<i32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<u32> = vec2<u32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.dxc.hlsl
index 1f8cb37..c2988fa 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return int2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = uint2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.fxc.hlsl
index 1f8cb37..c2988fa 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return int2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = uint2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.glsl
index af982aa..bfd4f54 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1;
   return ivec2(t);
 }
-void f() {
-  uvec2 v = uvec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uvec2 v = uvec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.msl
index 6d65ce9..ff6c2a1 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return int2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread int t = 0;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   uint2 v = uint2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.spvasm
index ea2ec8a..18f866f 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 24
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
         %int = OpTypeInt 32 1
 %_ptr_Private_int = OpTypePointer Private %int
           %4 = OpConstantNull %int
@@ -39,7 +38,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.wgsl
index 3d9532a..c5d15d3 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<i32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<u32> = vec2<u32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl
index dcc13c9..305183b 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl
@@ -3,6 +3,8 @@
     t = 1u;
     return vec2<u32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<bool> = vec2<bool>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.dxc.hlsl
index cbfa8e4..592b835 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return uint2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.fxc.hlsl
index cbfa8e4..592b835 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return uint2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.glsl
index e806b73..a7b08a2 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1u;
   return uvec2(t);
 }
-void f() {
-  bvec2 v = bvec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bvec2 v = bvec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.msl
index 6fbd6ea..ca780e1 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return uint2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint t = 0u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   bool2 v = bool2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.spvasm
index 0ae4bc2..72fa65b 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 25
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
           %4 = OpConstantNull %uint
@@ -40,7 +39,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.wgsl
index f236f37..88b8251 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<u32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<bool> = vec2<bool>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl
index 8d9ca55..44ddfe6 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl
@@ -5,6 +5,8 @@
     t = 1u;
     return vec2<u32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<f16> = vec2<f16>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.dxc.hlsl
index cd6f604..f5533b9 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return uint2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> v = vector<float16_t, 2>(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.glsl
index 0dc343c..8efb9e3 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.glsl
@@ -6,9 +6,7 @@
   t = 1u;
   return uvec2(t);
 }
-void f() {
-  f16vec2 v = f16vec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  f16vec2 v = f16vec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.msl
index de79ffb..8de11bb 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return uint2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint t = 0u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   half2 v = half2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.spvasm
index 7acaf80..c141b6f 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.spvasm
@@ -1,19 +1,18 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 24
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
           %4 = OpConstantNull %uint
@@ -41,7 +40,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.wgsl
index e1b5af6..b80dac4 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.wgsl
@@ -7,6 +7,7 @@
   return vec2<u32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<f16> = vec2<f16>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl
index 6c0fe6e..f307e8b 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl
@@ -3,6 +3,8 @@
     t = 1u;
     return vec2<u32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<f32> = vec2<f32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.dxc.hlsl
index afaa273..5bea468 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return uint2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.fxc.hlsl
index afaa273..5bea468 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return uint2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.glsl
index f862108..884182d 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1u;
   return uvec2(t);
 }
-void f() {
-  vec2 v = vec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  vec2 v = vec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.msl
index 164efa5..288d6d9 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return uint2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint t = 0u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   float2 v = float2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.spvasm
index 98a6d63..e0cc49c 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 24
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
           %4 = OpConstantNull %uint
@@ -39,7 +38,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.wgsl
index 096c896..6d6b506 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<u32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<f32> = vec2<f32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl
index b530e87..d49a306 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl
@@ -3,6 +3,8 @@
     t = 1u;
     return vec2<u32>(t);
 }
+
+@compute @workgroup_size(1)
 fn f() {
     var v : vec2<i32> = vec2<i32>(m());
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.dxc.hlsl
index c3e14c1..d9bed7d 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.dxc.hlsl
@@ -5,11 +5,8 @@
   return uint2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = int2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.fxc.hlsl
index c3e14c1..d9bed7d 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.fxc.hlsl
@@ -5,11 +5,8 @@
   return uint2((t).xx);
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = int2(m());
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.glsl
index 2f2db21..fd8138d 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
   t = 1u;
   return uvec2(t);
 }
-void f() {
-  ivec2 v = ivec2(m());
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  ivec2 v = ivec2(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.msl
index 3a3370f..72ef728 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.msl
@@ -10,6 +10,8 @@
   return uint2((*tint_module_vars.t));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread uint t = 0u;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.t=(&t)};
   int2 v = int2(m(tint_module_vars));
 }
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.spvasm
index a0a25c0..50b5440 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.spvasm
@@ -1,17 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 24
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %t "t"
                OpName %m "m"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %uint = OpTypeInt 32 0
 %_ptr_Private_uint = OpTypePointer Private %uint
           %4 = OpConstantNull %uint
@@ -39,7 +38,3 @@
                OpStore %v %19
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %14
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.wgsl
index 324ba10..64a44c5 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.wgsl
@@ -5,6 +5,7 @@
   return vec2<u32>(t);
 }
 
+@compute @workgroup_size(1)
 fn f() {
   var v : vec2<i32> = vec2<i32>(m());
 }
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl
index 8144d7f..c81e8c0 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : vec2<f16> = vec2<f16>(vec2<bool>(true));
\ No newline at end of file
+var<private> u : vec2<f16> = vec2<f16>(vec2<bool>(true));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.dxc.hlsl
index bdc3590..5883fb2 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static vector<float16_t, 2> u = (float16_t(1.0h)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.msl
index ef3aa0f..1aa5e53 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread half2* u;
+};
+
+kernel void v() {
+  thread half2 u = half2(1.0h);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.spvasm
index 32cd8cd..af7b4a7 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.spvasm
@@ -1,16 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
 %_ptr_Private_v2half = OpTypePointer Private %v2half
@@ -19,7 +19,8 @@
           %u = OpVariable %_ptr_Private_v2half Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2half %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.wgsl
index 4fc4fc0..f8d4aa4 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : vec2<f16> = vec2<f16>(vec2<bool>(true));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl
index 995fda2..eb87ba7 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<f32> = vec2<f32>(vec2<bool>(true));
\ No newline at end of file
+var<private> u : vec2<f32> = vec2<f32>(vec2<bool>(true));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.dxc.hlsl
index 61b917e..11ddf76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float2 u = (1.0f).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.fxc.hlsl
index 61b917e..11ddf76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static float2 u = (1.0f).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.msl
index ef3aa0f..dd63a76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread float2* u;
+};
+
+kernel void v() {
+  thread float2 u = float2(1.0f);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.spvasm
index 9cd2d48..9484960 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
       %float = OpTypeFloat 32
     %v2float = OpTypeVector %float 2
 %_ptr_Private_v2float = OpTypePointer Private %v2float
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2float Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2float %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.wgsl
index 7f0d6d8..0a73e37 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<f32> = vec2<f32>(vec2<bool>(true));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl
index 7d8766b..98cb48c 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<i32> = vec2<i32>(vec2<bool>(true));
\ No newline at end of file
+var<private> u : vec2<i32> = vec2<i32>(vec2<bool>(true));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.dxc.hlsl
index c432e48..7ec359e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static int2 u = (int(1)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.fxc.hlsl
index c432e48..7ec359e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static int2 u = (int(1)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.msl
index ef3aa0f..8452b5a 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread int2* u;
+};
+
+kernel void v() {
+  thread int2 u = int2(1);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.spvasm
index c842608..5b72da0 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
 %_ptr_Private_v2int = OpTypePointer Private %v2int
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2int Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2int %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.wgsl
index c093739..eb7d36f 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<i32> = vec2<i32>(vec2<bool>(true));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl
index 7a56f42..c25439a 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<u32> = vec2<u32>(vec2<bool>(true));
\ No newline at end of file
+var<private> u : vec2<u32> = vec2<u32>(vec2<bool>(true));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.dxc.hlsl
index bc577df..3589792 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint2 u = (1u).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.fxc.hlsl
index bc577df..3589792 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint2 u = (1u).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.msl
index ef3aa0f..dba217b 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread uint2* u;
+};
+
+kernel void v() {
+  thread uint2 u = uint2(1u);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.spvasm
index 64b77f6..4f4dacb 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %uint = OpTypeInt 32 0
      %v2uint = OpTypeVector %uint 2
 %_ptr_Private_v2uint = OpTypePointer Private %v2uint
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2uint Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2uint %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.wgsl
index a9fb8eb..98f16fd 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<u32> = vec2<u32>(vec2<bool>(true));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl
index 7e0cccb..f8825e9 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : vec2<bool> = vec2<bool>(vec2<f16>(1.0h));
\ No newline at end of file
+var<private> u : vec2<bool> = vec2<bool>(vec2<f16>(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.dxc.hlsl
index 77009d6..f723c98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool2 u = (true).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.fxc.hlsl
index 77009d6..f723c98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool2 u = (true).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.msl
index ef3aa0f..93d708e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread bool2* u;
+};
+
+kernel void v() {
+  thread bool2 u = bool2(true);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.spvasm
index 86aabe8..19fa147 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %bool = OpTypeBool
      %v2bool = OpTypeVector %bool 2
 %_ptr_Private_v2bool = OpTypePointer Private %v2bool
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2bool Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2bool %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.wgsl
index 04f2464..a130fa0 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : vec2<bool> = vec2<bool>(vec2<f16>(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl
index 33e01ba..f667fe4 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : vec2<f32> = vec2<f32>(vec2<f16>(1.0h));
\ No newline at end of file
+var<private> u : vec2<f32> = vec2<f32>(vec2<f16>(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.dxc.hlsl
index 61b917e..11ddf76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float2 u = (1.0f).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.fxc.hlsl
index 61b917e..11ddf76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static float2 u = (1.0f).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.msl
index ef3aa0f..dd63a76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread float2* u;
+};
+
+kernel void v() {
+  thread float2 u = float2(1.0f);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.spvasm
index 9cd2d48..9484960 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
       %float = OpTypeFloat 32
     %v2float = OpTypeVector %float 2
 %_ptr_Private_v2float = OpTypePointer Private %v2float
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2float Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2float %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.wgsl
index 7a01d28..9c7d579 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : vec2<f32> = vec2<f32>(vec2<f16>(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl
index 7ef489e..637a622 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : vec2<i32> = vec2<i32>(vec2<f16>(1.0h));
\ No newline at end of file
+var<private> u : vec2<i32> = vec2<i32>(vec2<f16>(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.dxc.hlsl
index c432e48..7ec359e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static int2 u = (int(1)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.fxc.hlsl
index c432e48..7ec359e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static int2 u = (int(1)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.msl
index ef3aa0f..8452b5a 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread int2* u;
+};
+
+kernel void v() {
+  thread int2 u = int2(1);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.spvasm
index c842608..5b72da0 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
 %_ptr_Private_v2int = OpTypePointer Private %v2int
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2int Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2int %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.wgsl
index bab493c..a2374af 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : vec2<i32> = vec2<i32>(vec2<f16>(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl
index 8a651fe..1328c36 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : vec2<u32> = vec2<u32>(vec2<f16>(1.0h));
\ No newline at end of file
+var<private> u : vec2<u32> = vec2<u32>(vec2<f16>(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.dxc.hlsl
index bc577df..3589792 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint2 u = (1u).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.fxc.hlsl
index bc577df..3589792 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint2 u = (1u).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.msl
index ef3aa0f..dba217b 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread uint2* u;
+};
+
+kernel void v() {
+  thread uint2 u = uint2(1u);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.spvasm
index 64b77f6..4f4dacb 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %uint = OpTypeInt 32 0
      %v2uint = OpTypeVector %uint 2
 %_ptr_Private_v2uint = OpTypePointer Private %v2uint
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2uint Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2uint %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.wgsl
index 9c2a272..d425be6 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : vec2<u32> = vec2<u32>(vec2<f16>(1.0h));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl
index 0889a43..c8aeee6 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<bool> = vec2<bool>(vec2<f32>(1.0f));
\ No newline at end of file
+var<private> u : vec2<bool> = vec2<bool>(vec2<f32>(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.dxc.hlsl
index 77009d6..f723c98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool2 u = (true).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.fxc.hlsl
index 77009d6..f723c98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool2 u = (true).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.msl
index ef3aa0f..93d708e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread bool2* u;
+};
+
+kernel void v() {
+  thread bool2 u = bool2(true);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.spvasm
index 86aabe8..19fa147 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %bool = OpTypeBool
      %v2bool = OpTypeVector %bool 2
 %_ptr_Private_v2bool = OpTypePointer Private %v2bool
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2bool Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2bool %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.wgsl
index 6991fa6..cfd602b 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<bool> = vec2<bool>(vec2<f32>(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl
index 6914c2e..92f2030 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : vec2<f16> = vec2<f16>(vec2<f32>(1.0f));
\ No newline at end of file
+var<private> u : vec2<f16> = vec2<f16>(vec2<f32>(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.dxc.hlsl
index bdc3590..5883fb2 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static vector<float16_t, 2> u = (float16_t(1.0h)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.msl
index ef3aa0f..1aa5e53 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread half2* u;
+};
+
+kernel void v() {
+  thread half2 u = half2(1.0h);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.spvasm
index 32cd8cd..af7b4a7 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.spvasm
@@ -1,16 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
 %_ptr_Private_v2half = OpTypePointer Private %v2half
@@ -19,7 +19,8 @@
           %u = OpVariable %_ptr_Private_v2half Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2half %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.wgsl
index c99a967..e500bee 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : vec2<f16> = vec2<f16>(vec2<f32>(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl
index 7e69760..b9af1f5 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<i32> = vec2<i32>(vec2<f32>(1.0f));
\ No newline at end of file
+var<private> u : vec2<i32> = vec2<i32>(vec2<f32>(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.dxc.hlsl
index c432e48..7ec359e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static int2 u = (int(1)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.fxc.hlsl
index c432e48..7ec359e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static int2 u = (int(1)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.msl
index ef3aa0f..8452b5a 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread int2* u;
+};
+
+kernel void v() {
+  thread int2 u = int2(1);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.spvasm
index c842608..5b72da0 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
 %_ptr_Private_v2int = OpTypePointer Private %v2int
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2int Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2int %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.wgsl
index 3351611..3cab5ea 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<i32> = vec2<i32>(vec2<f32>(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl
index 724d1b5..348c3ec 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<u32> = vec2<u32>(vec2<f32>(1.0f));
\ No newline at end of file
+var<private> u : vec2<u32> = vec2<u32>(vec2<f32>(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.dxc.hlsl
index bc577df..3589792 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint2 u = (1u).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.fxc.hlsl
index bc577df..3589792 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint2 u = (1u).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.msl
index ef3aa0f..dba217b 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread uint2* u;
+};
+
+kernel void v() {
+  thread uint2 u = uint2(1u);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.spvasm
index 64b77f6..4f4dacb 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %uint = OpTypeInt 32 0
      %v2uint = OpTypeVector %uint 2
 %_ptr_Private_v2uint = OpTypePointer Private %v2uint
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2uint Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2uint %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.wgsl
index 97e31cc..31a2eec 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<u32> = vec2<u32>(vec2<f32>(1.0f));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl
index 51f32ab..4b0390e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<bool> = vec2<bool>(vec2<i32>(1i));
\ No newline at end of file
+var<private> u : vec2<bool> = vec2<bool>(vec2<i32>(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.dxc.hlsl
index 77009d6..f723c98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool2 u = (true).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.fxc.hlsl
index 77009d6..f723c98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool2 u = (true).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.msl
index ef3aa0f..93d708e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread bool2* u;
+};
+
+kernel void v() {
+  thread bool2 u = bool2(true);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.spvasm
index 86aabe8..19fa147 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %bool = OpTypeBool
      %v2bool = OpTypeVector %bool 2
 %_ptr_Private_v2bool = OpTypePointer Private %v2bool
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2bool Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2bool %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.wgsl
index 0fd69e1..ac83744 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<bool> = vec2<bool>(vec2<i32>(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl
index 06bc989..b146079 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : vec2<f16> = vec2<f16>(vec2<i32>(1i));
\ No newline at end of file
+var<private> u : vec2<f16> = vec2<f16>(vec2<i32>(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.dxc.hlsl
index bdc3590..5883fb2 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static vector<float16_t, 2> u = (float16_t(1.0h)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.msl
index ef3aa0f..1aa5e53 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread half2* u;
+};
+
+kernel void v() {
+  thread half2 u = half2(1.0h);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.spvasm
index 32cd8cd..af7b4a7 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.spvasm
@@ -1,16 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
 %_ptr_Private_v2half = OpTypePointer Private %v2half
@@ -19,7 +19,8 @@
           %u = OpVariable %_ptr_Private_v2half Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2half %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.wgsl
index b7d8170..aca3515 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : vec2<f16> = vec2<f16>(vec2<i32>(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl
index 7c87b77..b0653d4 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<f32> = vec2<f32>(vec2<i32>(1i));
\ No newline at end of file
+var<private> u : vec2<f32> = vec2<f32>(vec2<i32>(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.dxc.hlsl
index 61b917e..11ddf76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float2 u = (1.0f).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.fxc.hlsl
index 61b917e..11ddf76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static float2 u = (1.0f).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.msl
index ef3aa0f..dd63a76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread float2* u;
+};
+
+kernel void v() {
+  thread float2 u = float2(1.0f);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.spvasm
index 9cd2d48..9484960 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
       %float = OpTypeFloat 32
     %v2float = OpTypeVector %float 2
 %_ptr_Private_v2float = OpTypePointer Private %v2float
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2float Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2float %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.wgsl
index 980d359..a102a34 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<f32> = vec2<f32>(vec2<i32>(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl
index fbd0112..3eff63a 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<u32> = vec2<u32>(vec2<i32>(1i));
\ No newline at end of file
+var<private> u : vec2<u32> = vec2<u32>(vec2<i32>(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.dxc.hlsl
index bc577df..3589792 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint2 u = (1u).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.fxc.hlsl
index bc577df..3589792 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static uint2 u = (1u).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.msl
index ef3aa0f..dba217b 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread uint2* u;
+};
+
+kernel void v() {
+  thread uint2 u = uint2(1u);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.spvasm
index 64b77f6..4f4dacb 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %uint = OpTypeInt 32 0
      %v2uint = OpTypeVector %uint 2
 %_ptr_Private_v2uint = OpTypePointer Private %v2uint
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2uint Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2uint %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.wgsl
index ed8e217..31458cf 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<u32> = vec2<u32>(vec2<i32>(1i));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl
index f8e6764..fb6de8f 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<bool> = vec2<bool>(vec2<u32>(1u));
\ No newline at end of file
+var<private> u : vec2<bool> = vec2<bool>(vec2<u32>(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.dxc.hlsl
index 77009d6..f723c98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool2 u = (true).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.fxc.hlsl
index 77009d6..f723c98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static bool2 u = (true).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.msl
index ef3aa0f..93d708e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread bool2* u;
+};
+
+kernel void v() {
+  thread bool2 u = bool2(true);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.spvasm
index 86aabe8..19fa147 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %bool = OpTypeBool
      %v2bool = OpTypeVector %bool 2
 %_ptr_Private_v2bool = OpTypePointer Private %v2bool
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2bool Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2bool %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.wgsl
index 1394f64..de10561 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<bool> = vec2<bool>(vec2<u32>(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl
index 7054c93..40f1d42 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl
@@ -1,3 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
-var<private> u : vec2<f16> = vec2<f16>(vec2<u32>(1u));
\ No newline at end of file
+var<private> u : vec2<f16> = vec2<f16>(vec2<u32>(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.dxc.hlsl
index bdc3590..5883fb2 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static vector<float16_t, 2> u = (float16_t(1.0h)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.msl
index ef3aa0f..1aa5e53 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread half2* u;
+};
+
+kernel void v() {
+  thread half2 u = half2(1.0h);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.spvasm
index 32cd8cd..af7b4a7 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.spvasm
@@ -1,16 +1,16 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
 %_ptr_Private_v2half = OpTypePointer Private %v2half
@@ -19,7 +19,8 @@
           %u = OpVariable %_ptr_Private_v2half Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2half %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.wgsl
index 3f5126b..346fdef 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.wgsl
@@ -1,3 +1,8 @@
 enable f16;
 
 var<private> u : vec2<f16> = vec2<f16>(vec2<u32>(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl
index 6474db4..6c33189 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<f32> = vec2<f32>(vec2<u32>(1u));
\ No newline at end of file
+var<private> u : vec2<f32> = vec2<f32>(vec2<u32>(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.dxc.hlsl
index 61b917e..11ddf76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static float2 u = (1.0f).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.fxc.hlsl
index 61b917e..11ddf76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static float2 u = (1.0f).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.msl
index ef3aa0f..dd63a76 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread float2* u;
+};
+
+kernel void v() {
+  thread float2 u = float2(1.0f);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.spvasm
index 9cd2d48..9484960 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
       %float = OpTypeFloat 32
     %v2float = OpTypeVector %float 2
 %_ptr_Private_v2float = OpTypePointer Private %v2float
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2float Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2float %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.wgsl
index 2feab4a..28b7a22 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<f32> = vec2<f32>(vec2<u32>(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl
index 109941c..38f26d2 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl
@@ -1 +1,6 @@
-var<private> u : vec2<i32> = vec2<i32>(vec2<u32>(1u));
\ No newline at end of file
+var<private> u : vec2<i32> = vec2<i32>(vec2<u32>(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+    _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.dxc.hlsl
index c432e48..7ec359e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 
 static int2 u = (int(1)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.fxc.hlsl
index c432e48..7ec359e 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 
 static int2 u = (int(1)).xx;
 [numthreads(1, 1, 1)]
-void unused_entry_point() {
+void main() {
 }
 
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.msl
index ef3aa0f..8452b5a 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.msl
@@ -1,2 +1,11 @@
 #include <metal_stdlib>
 using namespace metal;
+
+struct tint_module_vars_struct {
+  thread int2* u;
+};
+
+kernel void v() {
+  thread int2 u = int2(1);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
+}
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.spvasm
index c842608..5b72da0 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 11
+; Bound: 12
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
                OpName %u "u"
-               OpName %unused_entry_point "unused_entry_point"
+               OpName %main "main"
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
 %_ptr_Private_v2int = OpTypePointer Private %v2int
@@ -17,7 +17,8 @@
           %u = OpVariable %_ptr_Private_v2int Private %5
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %9
+       %main = OpFunction %void None %9
          %10 = OpLabel
+         %11 = OpLoad %v2int %u None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.wgsl
index 4ef1933..6a0e2b0 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.wgsl
@@ -1 +1,6 @@
 var<private> u : vec2<i32> = vec2<i32>(vec2<u32>(1u));
+
+@compute @workgroup_size(1)
+fn main() {
+  _ = u;
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl
index 87ec0e1..da7c099 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = vec2<bool>(true);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : vec2<f16> = vec2<f16>(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.dxc.hlsl
index f16e3a1..55b1823 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool2 u = (true).xx;
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> v = vector<float16_t, 2>(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.glsl
index 462a8f4..d72efb2 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.glsl
@@ -2,9 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float: require
 
 bvec2 u = bvec2(true);
-void f() {
-  f16vec2 v = f16vec2(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  f16vec2 v = f16vec2(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.msl
index c83a9c0..c35803b 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread bool2* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool2 u = bool2(true);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   half2 const v = half2((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.spvasm
index 2ebf67b..12c7837 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.spvasm
@@ -1,18 +1,17 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 20
+; Bound: 18
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
      %v2bool = OpTypeVector %bool 2
 %_ptr_Private_v2bool = OpTypePointer Private %v2bool
@@ -32,7 +31,3 @@
           %v = OpSelect %v2half %11 %15 %17
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %9
-         %19 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.wgsl
index e3d8df8..24d4ca3 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = vec2<bool>(true);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : vec2<f16> = vec2<f16>(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl
index bd60add..f46f899 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = vec2<bool>(true);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : vec2<f32> = vec2<f32>(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.dxc.hlsl
index 0d5f022..2c01f94 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool2 u = (true).xx;
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.fxc.hlsl
index 0d5f022..2c01f94 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool2 u = (true).xx;
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.glsl
index 1390b9c..6670128 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 bvec2 u = bvec2(true);
-void f() {
-  vec2 v = vec2(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  vec2 v = vec2(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.msl
index 299fdfa..a7ce245 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread bool2* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool2 u = bool2(true);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   float2 const v = float2((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.spvasm
index bda98e4..02c780d 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 20
+; Bound: 18
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
      %v2bool = OpTypeVector %bool 2
 %_ptr_Private_v2bool = OpTypePointer Private %v2bool
@@ -30,7 +29,3 @@
           %v = OpSelect %v2float %11 %15 %17
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %9
-         %19 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.wgsl
index 36f68b0..af28153 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = vec2<bool>(true);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : vec2<f32> = vec2<f32>(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl
index 8d4f4e0..3bf59a4 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = vec2<bool>(true);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : vec2<i32> = vec2<i32>(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.dxc.hlsl
index d89e2c5..15dc8a2 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool2 u = (true).xx;
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = int2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.fxc.hlsl
index d89e2c5..15dc8a2 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool2 u = (true).xx;
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = int2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.glsl
index 0c1bc1b..8885795 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 bvec2 u = bvec2(true);
-void f() {
-  ivec2 v = ivec2(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  ivec2 v = ivec2(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.msl
index f47aa39..5b588a8 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread bool2* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool2 u = bool2(true);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   int2 const v = int2((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.spvasm
index 57c4b98..2e57e86 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 20
+; Bound: 18
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
      %v2bool = OpTypeVector %bool 2
 %_ptr_Private_v2bool = OpTypePointer Private %v2bool
@@ -30,7 +29,3 @@
           %v = OpSelect %v2int %11 %15 %17
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %9
-         %19 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.wgsl
index 9213d00..128d830 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = vec2<bool>(true);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : vec2<i32> = vec2<i32>(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl
index 408718c..69d7893 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl
@@ -1,4 +1,6 @@
 var<private> u = vec2<bool>(true);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : vec2<u32> = vec2<u32>(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.dxc.hlsl
index 65a8568..b26d41f 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool2 u = (true).xx;
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = uint2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.fxc.hlsl
index 65a8568..b26d41f 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static bool2 u = (true).xx;
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = uint2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.glsl
index 2d65224..a34790a 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 bvec2 u = bvec2(true);
-void f() {
-  uvec2 v = uvec2(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uvec2 v = uvec2(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.msl
index c871c72..8a337fb 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread bool2* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread bool2 u = bool2(true);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   uint2 const v = uint2((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.spvasm
index 1b7b12a..7b9d458 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 20
+; Bound: 18
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %bool = OpTypeBool
      %v2bool = OpTypeVector %bool 2
 %_ptr_Private_v2bool = OpTypePointer Private %v2bool
@@ -30,7 +29,3 @@
           %v = OpSelect %v2uint %11 %15 %17
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %9
-         %19 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.wgsl
index eaf55f0..6246c80 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = vec2<bool>(true);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : vec2<u32> = vec2<u32>(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl
index f9d5196..9c31e9a 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = vec2<f16>(1.0h);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : vec2<bool> = vec2<bool>(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.dxc.hlsl
index 6b77c98..71365d3 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static vector<float16_t, 2> u = (float16_t(1.0h)).xx;
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.glsl
index dcf1411..fb9f107 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.glsl
@@ -2,9 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float: require
 
 f16vec2 u = f16vec2(1.0hf);
-void f() {
-  bvec2 v = bvec2(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bvec2 v = bvec2(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.msl
index 246efeb..a1a6c33 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread half2* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half2 u = half2(1.0h);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   bool2 const v = bool2((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.spvasm
index 4cea341..4de00d9 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.spvasm
@@ -1,18 +1,17 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 18
+; Bound: 16
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
 %_ptr_Private_v2half = OpTypePointer Private %v2half
@@ -30,7 +29,3 @@
           %v = OpFUnordNotEqual %v2bool %11 %15
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %9
-         %17 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.wgsl
index ec7585d..e0e4318 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = vec2<f16>(1.0h);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : vec2<bool> = vec2<bool>(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl
index affd482..57ae824 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = vec2<f16>(1.0h);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : vec2<f32> = vec2<f32>(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.dxc.hlsl
index 786cea5..ca530fd 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static vector<float16_t, 2> u = (float16_t(1.0h)).xx;
+[numthreads(1, 1, 1)]
 void f() {
   float2 v = float2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.glsl
index 0d3e1a30..d1c033a 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.glsl
@@ -2,9 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float: require
 
 f16vec2 u = f16vec2(1.0hf);
-void f() {
-  vec2 v = vec2(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  vec2 v = vec2(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.msl
index 3ca408a..392b0e4 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread half2* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half2 u = half2(1.0h);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   float2 const v = float2((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.spvasm
index c9fffac..6575c7c 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.spvasm
@@ -1,18 +1,17 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 17
+; Bound: 15
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
 %_ptr_Private_v2half = OpTypePointer Private %v2half
@@ -29,7 +28,3 @@
           %v = OpFConvert %v2float %11
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %9
-         %16 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.wgsl
index 5d52dc6..977a97a 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = vec2<f16>(1.0h);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : vec2<f32> = vec2<f32>(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl
index 8061bf8..63ecb3d 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = vec2<f16>(1.0h);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : vec2<i32> = vec2<i32>(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.dxc.hlsl
index 0c9492d..e281910 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.dxc.hlsl
@@ -4,11 +4,8 @@
   return int2(clamp(value, (float16_t(-65504.0h)).xx, (float16_t(65504.0h)).xx));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   int2 v = tint_v2f16_to_v2i32(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.glsl
index c013d0d..afcc5b2 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
 ivec2 tint_v2f16_to_v2i32(f16vec2 value) {
   return ivec2(clamp(value, f16vec2(-65504.0hf), f16vec2(65504.0hf)));
 }
-void f() {
-  ivec2 v = tint_v2f16_to_v2i32(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  ivec2 v = tint_v2f16_to_v2i32(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.msl
index 5c54cf6..b410693 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.msl
@@ -9,6 +9,8 @@
   return int2(clamp(value, half2(-65504.0h), half2(65504.0h)));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half2 u = half2(1.0h);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   int2 const v = tint_v2f16_to_v2i32((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.spvasm
index dea1631..a1df129 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.spvasm
@@ -1,21 +1,20 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 28
+; Bound: 26
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
          %20 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_v2f16_to_v2i32 "tint_v2f16_to_v2i32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
 %_ptr_Private_v2half = OpTypePointer Private %v2half
@@ -44,7 +43,3 @@
          %25 = OpConvertFToS %v2int %19
                OpReturnValue %25
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %9
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.wgsl
index bdf4d4f..39a663e 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = vec2<f16>(1.0h);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : vec2<i32> = vec2<i32>(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl
index 0fa15ea..32221bd 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl
@@ -1,6 +1,8 @@
 // flags:  --hlsl-shader-model 62
 enable f16;
 var<private> u = vec2<f16>(1.0h);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : vec2<u32> = vec2<u32>(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.dxc.hlsl
index c8c8fdb..6b89cf2 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.dxc.hlsl
@@ -4,11 +4,8 @@
   return uint2(clamp(value, (float16_t(0.0h)).xx, (float16_t(65504.0h)).xx));
 }
 
+[numthreads(1, 1, 1)]
 void f() {
   uint2 v = tint_v2f16_to_v2u32(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.glsl
index f353122..209d918 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.glsl
@@ -5,9 +5,7 @@
 uvec2 tint_v2f16_to_v2u32(f16vec2 value) {
   return uvec2(clamp(value, f16vec2(0.0hf), f16vec2(65504.0hf)));
 }
-void f() {
-  uvec2 v = tint_v2f16_to_v2u32(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  uvec2 v = tint_v2f16_to_v2u32(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.msl
index f4c5eb2..6d582fa 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.msl
@@ -9,6 +9,8 @@
   return uint2(clamp(value, half2(0.0h), half2(65504.0h)));
 }
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread half2 u = half2(1.0h);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   uint2 const v = tint_v2f16_to_v2u32((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.spvasm
index 8821fa4..ebad9f2 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.spvasm
@@ -1,21 +1,20 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 27
+; Bound: 25
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability StorageBuffer16BitAccess
          %20 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
                OpName %tint_v2f16_to_v2u32 "tint_v2f16_to_v2u32"
                OpName %value "value"
-               OpName %unused_entry_point "unused_entry_point"
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
 %_ptr_Private_v2half = OpTypePointer Private %v2half
@@ -43,7 +42,3 @@
          %24 = OpConvertFToU %v2uint %19
                OpReturnValue %24
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %9
-         %26 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.wgsl
index d809ca7..bc34597 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.wgsl
@@ -2,6 +2,7 @@
 
 var<private> u = vec2<f16>(1.0h);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : vec2<u32> = vec2<u32>(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl
index ec468a0..4b93f87 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl
@@ -1,4 +1,6 @@
 var<private> u = vec2<f32>(1.0f);
+
+@compute @workgroup_size(1)
 fn f() {
     let v : vec2<bool> = vec2<bool>(u);
-}
\ No newline at end of file
+}
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.dxc.hlsl
index a47bb72..7f95180 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.dxc.hlsl
@@ -1,10 +1,7 @@
 
 static float2 u = (1.0f).xx;
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.fxc.hlsl
index a47bb72..7f95180 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.fxc.hlsl
@@ -1,10 +1,7 @@
 
 static float2 u = (1.0f).xx;
+[numthreads(1, 1, 1)]
 void f() {
   bool2 v = bool2(u);
 }
 
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-}
-
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.glsl
index 1e0e426..01fabe9 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.glsl
@@ -1,9 +1,7 @@
 #version 310 es
 
 vec2 u = vec2(1.0f);
-void f() {
-  bvec2 v = bvec2(u);
-}
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
+  bvec2 v = bvec2(u);
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.msl
index 43ec116..5104e94 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.msl
@@ -5,6 +5,8 @@
   thread float2* u;
 };
 
-void f(tint_module_vars_struct tint_module_vars) {
+kernel void f() {
+  thread float2 u = float2(1.0f);
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.u=(&u)};
   bool2 const v = bool2((*tint_module_vars.u));
 }
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.spvasm b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.spvasm
index 94a4ecb..10e22a7 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.spvasm
+++ b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.spvasm
@@ -1,16 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 18
+; Bound: 16
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
+               OpEntryPoint GLCompute %f "f"
+               OpExecutionMode %f LocalSize 1 1 1
                OpName %u "u"
                OpName %f "f"
                OpName %v "v"
-               OpName %unused_entry_point "unused_entry_point"
       %float = OpTypeFloat 32
     %v2float = OpTypeVector %float 2
 %_ptr_Private_v2float = OpTypePointer Private %v2float
@@ -28,7 +27,3 @@
           %v = OpFUnordNotEqual %v2bool %11 %15
                OpReturn
                OpFunctionEnd
-%unused_entry_point = OpFunction %void None %9
-         %17 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.wgsl b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.wgsl
index 978663b..ae338d4 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.wgsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.wgsl
@@ -1,5 +1,6 @@
 var<private> u = vec2<f32>(1.0f);
 
+@compute @workgroup_size(1)
 fn f() {
   let v : vec2<bool> = vec2<bool>(u);
 }