tools: Return position from generated vertex shaders

This is required to generate valid MSL code, and will soon be
validated by Tint too.

Change-Id: I4c5f5c4ecb1c91131c934de1132217d9f6be1f8e
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/53420
Auto-Submit: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/test/intrinsics/gen/textureStore/05ce15.wgsl b/test/intrinsics/gen/textureStore/05ce15.wgsl
index f0df428..877e6f0 100644
--- a/test/intrinsics/gen/textureStore/05ce15.wgsl
+++ b/test/intrinsics/gen/textureStore/05ce15.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_05ce15();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.hlsl
index d38cd87..ca8dc95 100644
--- a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<float4> arg_0 : register(u0, space1);
 
 void textureStore_05ce15() {
   arg_0[int2(0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_05ce15();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.spvasm
index d9b79d5..ee23e7f 100644
--- a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_05ce15 "textureStore_05ce15"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v2int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_05ce15 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_05ce15 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_05ce15
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_05ce15
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_05ce15
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_05ce15
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_05ce15
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.wgsl
index 75c0ae2..f31db20 100644
--- a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_05ce15();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/064c7f.wgsl b/test/intrinsics/gen/textureStore/064c7f.wgsl
index caa9253..a999c8b 100644
--- a/test/intrinsics/gen/textureStore/064c7f.wgsl
+++ b/test/intrinsics/gen/textureStore/064c7f.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_064c7f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.hlsl
index 85108a6..f627b4d 100644
--- a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<float4> arg_0 : register(u0, space1);
 
 void textureStore_064c7f() {
   arg_0[int2(0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_064c7f();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.spvasm
index 97edb60..b4bba70 100644
--- a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_064c7f "textureStore_064c7f"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,43 @@
           %7 = OpTypeImage %float 2D 0 0 0 2 Rg32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v2int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_064c7f = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_064c7f = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_064c7f
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_064c7f
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_064c7f
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_064c7f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_064c7f
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.wgsl
index 500c2a1..46247d5 100644
--- a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_064c7f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/068641.wgsl b/test/intrinsics/gen/textureStore/068641.wgsl
index b5a277b..27c616e 100644
--- a/test/intrinsics/gen/textureStore/068641.wgsl
+++ b/test/intrinsics/gen/textureStore/068641.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_068641();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/068641.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/068641.wgsl.expected.hlsl
index e744a5e..89951d9 100644
--- a/test/intrinsics/gen/textureStore/068641.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/068641.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_068641() {
   arg_0[int3(0, 0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_068641();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/068641.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/068641.wgsl.expected.spvasm
index 17de556..ad9d55c 100644
--- a/test/intrinsics/gen/textureStore/068641.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/068641.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_068641 "textureStore_068641"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,45 @@
           %7 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %17 = OpConstantNull %v3int
+         %21 = OpConstantNull %v3int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_068641 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_068641 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_068641
+         %31 = OpFunctionCall %void %textureStore_068641
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_068641
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_068641
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_068641
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_068641
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/068641.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/068641.wgsl.expected.wgsl
index 1cff6cd..dbb407b 100644
--- a/test/intrinsics/gen/textureStore/068641.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/068641.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_068641();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/0af6b5.wgsl b/test/intrinsics/gen/textureStore/0af6b5.wgsl
index dbcb216..24c67b7 100644
--- a/test/intrinsics/gen/textureStore/0af6b5.wgsl
+++ b/test/intrinsics/gen/textureStore/0af6b5.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_0af6b5();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.hlsl
index 6e80c55..45c7624 100644
--- a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<float4> arg_0 : register(u0, space1);
 
 void textureStore_0af6b5() {
   arg_0[int2(0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_0af6b5();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.spvasm
index d651f50..d83c8d9 100644
--- a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_0af6b5 "textureStore_0af6b5"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 2D 0 0 0 2 R32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v2int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_0af6b5 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_0af6b5 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_0af6b5
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_0af6b5
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_0af6b5
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_0af6b5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_0af6b5
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.wgsl
index dedf0b6..6a1e8dd 100644
--- a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_0af6b5();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/0c3dff.wgsl b/test/intrinsics/gen/textureStore/0c3dff.wgsl
index b6189de..5133f2e 100644
--- a/test/intrinsics/gen/textureStore/0c3dff.wgsl
+++ b/test/intrinsics/gen/textureStore/0c3dff.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_0c3dff();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.hlsl
index dcc9b15..2212b86 100644
--- a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_0c3dff() {
   arg_0[int2(0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_0c3dff();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.spvasm
index 32263fd..0bc05e8 100644
--- a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_0c3dff "textureStore_0c3dff"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,45 @@
           %7 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %17 = OpConstantNull %v2int
+         %21 = OpConstantNull %v2int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_0c3dff = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_0c3dff = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_0c3dff
+         %31 = OpFunctionCall %void %textureStore_0c3dff
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_0c3dff
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_0c3dff
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_0c3dff
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_0c3dff
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.wgsl
index 6420eaf..96e508b 100644
--- a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_0c3dff();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/102722.wgsl b/test/intrinsics/gen/textureStore/102722.wgsl
index c1c0bf4..37c8455 100644
--- a/test/intrinsics/gen/textureStore/102722.wgsl
+++ b/test/intrinsics/gen/textureStore/102722.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_102722();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/102722.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/102722.wgsl.expected.hlsl
index bfbb63b..b6604d9 100644
--- a/test/intrinsics/gen/textureStore/102722.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/102722.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_102722() {
   arg_0[1] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_102722();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/102722.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/102722.wgsl.expected.spvasm
index 0406d15..1fc763e 100644
--- a/test/intrinsics/gen/textureStore/102722.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/102722.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_102722 "textureStore_102722"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,32 +33,44 @@
           %7 = OpTypeImage %uint 1D 0 0 0 2 R32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
      %v4uint = OpTypeVector %uint 4
-         %18 = OpConstantNull %v4uint
+         %22 = OpConstantNull %v4uint
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_102722 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %18
+%textureStore_102722 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_102722
+         %30 = OpFunctionCall %void %textureStore_102722
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_102722
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_102722
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_102722
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_102722
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/102722.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/102722.wgsl.expected.wgsl
index bab8dc4..78bc05d 100644
--- a/test/intrinsics/gen/textureStore/102722.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/102722.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_102722();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/1bbd08.wgsl b/test/intrinsics/gen/textureStore/1bbd08.wgsl
index 5296393..70562e8 100644
--- a/test/intrinsics/gen/textureStore/1bbd08.wgsl
+++ b/test/intrinsics/gen/textureStore/1bbd08.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_1bbd08();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.hlsl
index 561bce9..870bbe9 100644
--- a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<float4> arg_0 : register(u0, space1);
 
 void textureStore_1bbd08() {
   arg_0[int3(0, 0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_1bbd08();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.spvasm
index 9bde491..f177c1b 100644
--- a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_1bbd08 "textureStore_1bbd08"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 3D 0 0 0 2 Rgba8
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v3int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_1bbd08 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_1bbd08 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_1bbd08
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_1bbd08
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_1bbd08
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_1bbd08
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_1bbd08
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.wgsl
index 0b676c2..d265bc0 100644
--- a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_1bbd08();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/1c02e7.wgsl b/test/intrinsics/gen/textureStore/1c02e7.wgsl
index 0170e00..134e7f8 100644
--- a/test/intrinsics/gen/textureStore/1c02e7.wgsl
+++ b/test/intrinsics/gen/textureStore/1c02e7.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_1c02e7();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.hlsl
index eead151..e0d0308 100644
--- a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 
 void textureStore_1c02e7() {
   arg_0[int3(0, 0, 1)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_1c02e7();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.spvasm
index b1fef26..6f3cf7b 100644
--- a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_1c02e7 "textureStore_1c02e7"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,34 +32,46 @@
           %7 = OpTypeImage %int 2D 0 1 0 2 R32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
       %v4int = OpTypeVector %int 4
-         %20 = OpConstantNull %v4int
+         %24 = OpConstantNull %v4int
+         %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_1c02e7 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %18 %20
+%textureStore_1c02e7 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %22 %24
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %22 = OpLabel
+%tint_symbol_2 = OpFunction %void None %25
+%tint_symbol = OpFunctionParameter %v4float
+         %28 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_1c02e7
+         %32 = OpFunctionCall %void %textureStore_1c02e7
+         %33 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_1c02e7
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_1c02e7
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %textureStore_1c02e7
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_1c02e7
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.wgsl
index 715524f..17368d2 100644
--- a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_1c02e7();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/22d955.wgsl b/test/intrinsics/gen/textureStore/22d955.wgsl
index 815e628..ada2279 100644
--- a/test/intrinsics/gen/textureStore/22d955.wgsl
+++ b/test/intrinsics/gen/textureStore/22d955.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_22d955();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.hlsl
index 20cec38..0d9852c 100644
--- a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 
 void textureStore_22d955() {
   arg_0[int3(0, 0, 1)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_22d955();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.spvasm
index 01dc1cc..bde9762 100644
--- a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_22d955 "textureStore_22d955"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,35 +32,47 @@
           %7 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %19 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpConstantComposite %v3int %int_0 %int_0 %int_1
      %v4uint = OpTypeVector %uint 4
-         %21 = OpConstantNull %v4uint
+         %25 = OpConstantNull %v4uint
+         %26 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_22d955 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %19 %21
+%textureStore_22d955 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %23 %25
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %23 = OpLabel
+%tint_symbol_2 = OpFunction %void None %26
+%tint_symbol = OpFunctionParameter %v4float
+         %29 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
                OpStore %tint_pointsize %float_1
-         %25 = OpFunctionCall %void %textureStore_22d955
+         %33 = OpFunctionCall %void %textureStore_22d955
+         %34 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_22d955
+%fragment_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_22d955
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %textureStore_22d955
+%compute_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_22d955
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.wgsl
index 08c8bb1..cb9bde4 100644
--- a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_22d955();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/26bf70.wgsl b/test/intrinsics/gen/textureStore/26bf70.wgsl
index 693d8e8..6f8b38d 100644
--- a/test/intrinsics/gen/textureStore/26bf70.wgsl
+++ b/test/intrinsics/gen/textureStore/26bf70.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_26bf70();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.hlsl
index 8a9bbda..323424c 100644
--- a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_26bf70() {
   arg_0[int2(0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_26bf70();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.spvasm
index 2a8ef15..ba254cc 100644
--- a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_26bf70 "textureStore_26bf70"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,45 @@
           %7 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %17 = OpConstantNull %v2int
+         %21 = OpConstantNull %v2int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_26bf70 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_26bf70 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_26bf70
+         %31 = OpFunctionCall %void %textureStore_26bf70
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_26bf70
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_26bf70
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_26bf70
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_26bf70
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.wgsl
index d1ff649..a2bb93d 100644
--- a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_26bf70();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/2796b4.wgsl b/test/intrinsics/gen/textureStore/2796b4.wgsl
index 3b2e3b2..627e15f 100644
--- a/test/intrinsics/gen/textureStore/2796b4.wgsl
+++ b/test/intrinsics/gen/textureStore/2796b4.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_2796b4();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.hlsl
index 88e1e0f..ead20b9 100644
--- a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<int4> arg_0 : register(u0, space1);
 
 void textureStore_2796b4() {
   arg_0[int3(0, 0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_2796b4();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.spvasm
index e26f6b6..3c77ab2 100644
--- a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_2796b4 "textureStore_2796b4"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,32 +33,44 @@
           %7 = OpTypeImage %int 3D 0 0 0 2 Rg32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
+         %20 = OpConstantNull %v3int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_2796b4 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_2796b4 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_2796b4
+         %30 = OpFunctionCall %void %textureStore_2796b4
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_2796b4
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_2796b4
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_2796b4
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_2796b4
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.wgsl
index d307706..f541a87 100644
--- a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_2796b4();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/2ac6c7.wgsl b/test/intrinsics/gen/textureStore/2ac6c7.wgsl
index 7a5200f..882b766 100644
--- a/test/intrinsics/gen/textureStore/2ac6c7.wgsl
+++ b/test/intrinsics/gen/textureStore/2ac6c7.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_2ac6c7();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.hlsl
index 2e5bd83..0427db5 100644
--- a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<float4> arg_0 : register(u0, space1);
 
 void textureStore_2ac6c7() {
   arg_0[1] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_2ac6c7();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.spvasm
index 6a05c5c..ae33248 100644
--- a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_2ac6c7 "textureStore_2ac6c7"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,42 @@
           %7 = OpTypeImage %float 1D 0 0 0 2 R32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-    %v4float = OpTypeVector %float 4
-         %17 = OpConstantNull %v4float
+         %20 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_2ac6c7 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %int_1 %17
+%textureStore_2ac6c7 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %int_1 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %19 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_2ac6c7
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %20
+%tint_symbol = OpFunctionParameter %v4float
          %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_2ac6c7
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %26 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %25 = OpLabel
+               OpStore %tint_pointsize %float_1
          %27 = OpFunctionCall %void %textureStore_2ac6c7
+         %28 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_2ac6c7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_2ac6c7
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.wgsl
index 7d3f57a..6dd1a80 100644
--- a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_2ac6c7();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/2eb2a4.wgsl b/test/intrinsics/gen/textureStore/2eb2a4.wgsl
index 2f4f9d7..18b7284 100644
--- a/test/intrinsics/gen/textureStore/2eb2a4.wgsl
+++ b/test/intrinsics/gen/textureStore/2eb2a4.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_2eb2a4();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.hlsl
index 2bfcdeb..b44f1ad 100644
--- a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_2eb2a4() {
   arg_0[1] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_2eb2a4();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.spvasm
index fd59253..01255a8 100644
--- a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_2eb2a4 "textureStore_2eb2a4"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,32 +33,44 @@
           %7 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
      %v4uint = OpTypeVector %uint 4
-         %18 = OpConstantNull %v4uint
+         %22 = OpConstantNull %v4uint
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_2eb2a4 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %18
+%textureStore_2eb2a4 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_2eb2a4
+         %30 = OpFunctionCall %void %textureStore_2eb2a4
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_2eb2a4
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_2eb2a4
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_2eb2a4
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_2eb2a4
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.wgsl
index f62d137..c1d63b6 100644
--- a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_2eb2a4();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/2ed2a3.wgsl b/test/intrinsics/gen/textureStore/2ed2a3.wgsl
index c710a47..ac2c48e 100644
--- a/test/intrinsics/gen/textureStore/2ed2a3.wgsl
+++ b/test/intrinsics/gen/textureStore/2ed2a3.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_2ed2a3();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.hlsl
index 61caf3b..cf0bd1e 100644
--- a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<float4> arg_0 : register(u0, space1);
 
 void textureStore_2ed2a3() {
   arg_0[1] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_2ed2a3();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.spvasm
index 3c4624c..e517f8c 100644
--- a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_2ed2a3 "textureStore_2ed2a3"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,42 @@
           %7 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-    %v4float = OpTypeVector %float 4
-         %17 = OpConstantNull %v4float
+         %20 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_2ed2a3 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %int_1 %17
+%textureStore_2ed2a3 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %int_1 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %19 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_2ed2a3
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %20
+%tint_symbol = OpFunctionParameter %v4float
          %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_2ed2a3
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %26 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %25 = OpLabel
+               OpStore %tint_pointsize %float_1
          %27 = OpFunctionCall %void %textureStore_2ed2a3
+         %28 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_2ed2a3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_2ed2a3
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.wgsl
index 366b088..adb55f6 100644
--- a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_2ed2a3();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/31745b.wgsl b/test/intrinsics/gen/textureStore/31745b.wgsl
index be9ae40..68d862e 100644
--- a/test/intrinsics/gen/textureStore/31745b.wgsl
+++ b/test/intrinsics/gen/textureStore/31745b.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_31745b();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.hlsl
index 2205238..6978776 100644
--- a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<int4> arg_0 : register(u0, space1);
 
 void textureStore_31745b() {
   arg_0[int2(0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_31745b();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.spvasm
index 101f8dd..d2216e9 100644
--- a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_31745b "textureStore_31745b"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,32 +33,44 @@
           %7 = OpTypeImage %int 2D 0 0 0 2 Rg32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
+         %20 = OpConstantNull %v2int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_31745b = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_31745b = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_31745b
+         %30 = OpFunctionCall %void %textureStore_31745b
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_31745b
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_31745b
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_31745b
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_31745b
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.wgsl
index fc1848f..0349879 100644
--- a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_31745b();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/32f368.wgsl b/test/intrinsics/gen/textureStore/32f368.wgsl
index 82fea17..e4104c3 100644
--- a/test/intrinsics/gen/textureStore/32f368.wgsl
+++ b/test/intrinsics/gen/textureStore/32f368.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_32f368();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.hlsl
index 1b4385dec..f8e9148 100644
--- a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 
 void textureStore_32f368() {
   arg_0[int3(0, 0, 1)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_32f368();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.spvasm
index 63c2b1c..9c38831 100644
--- a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_32f368 "textureStore_32f368"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,35 +31,45 @@
           %7 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
-    %v4float = OpTypeVector %float 4
-         %20 = OpConstantNull %v4float
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_32f368 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %18 %20
+%textureStore_32f368 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %22 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %22 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_32f368
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
          %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_32f368
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %29 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %28 = OpLabel
+               OpStore %tint_pointsize %float_1
          %30 = OpFunctionCall %void %textureStore_32f368
+         %31 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_32f368
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_32f368
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.wgsl
index 43d6af5..c7addc8 100644
--- a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_32f368();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/331aee.wgsl b/test/intrinsics/gen/textureStore/331aee.wgsl
index f4bf4e4..a5934bb 100644
--- a/test/intrinsics/gen/textureStore/331aee.wgsl
+++ b/test/intrinsics/gen/textureStore/331aee.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_331aee();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.hlsl
index ef51064..acb18d1 100644
--- a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<float4> arg_0 : register(u0, space1);
 
 void textureStore_331aee() {
   arg_0[int3(0, 0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_331aee();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.spvasm
index 1c6d255..d6ba273 100644
--- a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_331aee "textureStore_331aee"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v3int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_331aee = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_331aee = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_331aee
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_331aee
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_331aee
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_331aee
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_331aee
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.wgsl
index d1ed0c6..3d47b38 100644
--- a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_331aee();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/38e8d7.wgsl b/test/intrinsics/gen/textureStore/38e8d7.wgsl
index e6bb103..713b571 100644
--- a/test/intrinsics/gen/textureStore/38e8d7.wgsl
+++ b/test/intrinsics/gen/textureStore/38e8d7.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_38e8d7();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.hlsl
index 23abfe3..10ad900 100644
--- a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 
 void textureStore_38e8d7() {
   arg_0[int3(0, 0, 1)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_38e8d7();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.spvasm
index fd1b989..1a7da57 100644
--- a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_38e8d7 "textureStore_38e8d7"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,35 +32,47 @@
           %7 = OpTypeImage %uint 2D 0 1 0 2 R32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %19 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpConstantComposite %v3int %int_0 %int_0 %int_1
      %v4uint = OpTypeVector %uint 4
-         %21 = OpConstantNull %v4uint
+         %25 = OpConstantNull %v4uint
+         %26 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_38e8d7 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %19 %21
+%textureStore_38e8d7 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %23 %25
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %23 = OpLabel
+%tint_symbol_2 = OpFunction %void None %26
+%tint_symbol = OpFunctionParameter %v4float
+         %29 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
                OpStore %tint_pointsize %float_1
-         %25 = OpFunctionCall %void %textureStore_38e8d7
+         %33 = OpFunctionCall %void %textureStore_38e8d7
+         %34 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_38e8d7
+%fragment_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_38e8d7
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %textureStore_38e8d7
+%compute_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_38e8d7
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.wgsl
index 50a53ca..f87ee3e 100644
--- a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_38e8d7();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/3a52ac.wgsl b/test/intrinsics/gen/textureStore/3a52ac.wgsl
index c815964..30e16f0 100644
--- a/test/intrinsics/gen/textureStore/3a52ac.wgsl
+++ b/test/intrinsics/gen/textureStore/3a52ac.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_3a52ac();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.hlsl
index 1ccbf60..fa6c84b 100644
--- a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 
 void textureStore_3a52ac() {
   arg_0[int3(0, 0, 1)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_3a52ac();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.spvasm
index c033a5b..04f98b5 100644
--- a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_3a52ac "textureStore_3a52ac"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,34 +32,46 @@
           %7 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
       %v4int = OpTypeVector %int 4
-         %20 = OpConstantNull %v4int
+         %24 = OpConstantNull %v4int
+         %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_3a52ac = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %18 %20
+%textureStore_3a52ac = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %22 %24
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %22 = OpLabel
+%tint_symbol_2 = OpFunction %void None %25
+%tint_symbol = OpFunctionParameter %v4float
+         %28 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_3a52ac
+         %32 = OpFunctionCall %void %textureStore_3a52ac
+         %33 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_3a52ac
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_3a52ac
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %textureStore_3a52ac
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_3a52ac
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.wgsl
index 85d39aa..2eadd38 100644
--- a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_3a52ac();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/3bb7a1.wgsl b/test/intrinsics/gen/textureStore/3bb7a1.wgsl
index 3ee4fd6..ce30a0c 100644
--- a/test/intrinsics/gen/textureStore/3bb7a1.wgsl
+++ b/test/intrinsics/gen/textureStore/3bb7a1.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_3bb7a1();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.hlsl
index a8c5ece..1d0803d 100644
--- a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 
 void textureStore_3bb7a1() {
   arg_0[int3(0, 0, 1)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_3bb7a1();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.spvasm
index 312d773..4c4f9d4 100644
--- a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_3bb7a1 "textureStore_3bb7a1"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,35 +31,45 @@
           %7 = OpTypeImage %float 2D 0 1 0 2 R32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
-    %v4float = OpTypeVector %float 4
-         %20 = OpConstantNull %v4float
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_3bb7a1 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %18 %20
+%textureStore_3bb7a1 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %22 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %22 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_3bb7a1
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
          %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_3bb7a1
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %29 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %28 = OpLabel
+               OpStore %tint_pointsize %float_1
          %30 = OpFunctionCall %void %textureStore_3bb7a1
+         %31 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_3bb7a1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_3bb7a1
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.wgsl
index 87ece03..3171def 100644
--- a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_3bb7a1();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/3bec15.wgsl b/test/intrinsics/gen/textureStore/3bec15.wgsl
index aad435e..3493941 100644
--- a/test/intrinsics/gen/textureStore/3bec15.wgsl
+++ b/test/intrinsics/gen/textureStore/3bec15.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_3bec15();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.hlsl
index cfcedd9..9dc0ea8 100644
--- a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_3bec15() {
   arg_0[1] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_3bec15();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.spvasm
index 5a80a9d..fcd3c0c 100644
--- a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_3bec15 "textureStore_3bec15"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,32 +33,44 @@
           %7 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
      %v4uint = OpTypeVector %uint 4
-         %18 = OpConstantNull %v4uint
+         %22 = OpConstantNull %v4uint
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_3bec15 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %18
+%textureStore_3bec15 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_3bec15
+         %30 = OpFunctionCall %void %textureStore_3bec15
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_3bec15
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_3bec15
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_3bec15
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_3bec15
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.wgsl
index 2cadcbe..be5532b 100644
--- a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_3bec15();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/441ba8.wgsl b/test/intrinsics/gen/textureStore/441ba8.wgsl
index 5846c1c..212fdf2 100644
--- a/test/intrinsics/gen/textureStore/441ba8.wgsl
+++ b/test/intrinsics/gen/textureStore/441ba8.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_441ba8();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.hlsl
index c980a0e..9065ca8 100644
--- a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_441ba8() {
   arg_0[int3(0, 0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_441ba8();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.spvasm
index 40cc744..68e35fc 100644
--- a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_441ba8 "textureStore_441ba8"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,45 @@
           %7 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %17 = OpConstantNull %v3int
+         %21 = OpConstantNull %v3int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_441ba8 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_441ba8 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_441ba8
+         %31 = OpFunctionCall %void %textureStore_441ba8
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_441ba8
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_441ba8
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_441ba8
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_441ba8
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.wgsl
index ac7be08..6b61a49 100644
--- a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_441ba8();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/4fc057.wgsl b/test/intrinsics/gen/textureStore/4fc057.wgsl
index cc41511..b7a154f 100644
--- a/test/intrinsics/gen/textureStore/4fc057.wgsl
+++ b/test/intrinsics/gen/textureStore/4fc057.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_4fc057();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.hlsl
index d7021c1..d8ecd13 100644
--- a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 
 void textureStore_4fc057() {
   arg_0[int3(0, 0, 1)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_4fc057();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.spvasm
index 53d44de..bc26ddc 100644
--- a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_4fc057 "textureStore_4fc057"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,35 +31,45 @@
           %7 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
-    %v4float = OpTypeVector %float 4
-         %20 = OpConstantNull %v4float
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_4fc057 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %18 %20
+%textureStore_4fc057 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %22 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %22 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_4fc057
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
          %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_4fc057
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %29 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %28 = OpLabel
+               OpStore %tint_pointsize %float_1
          %30 = OpFunctionCall %void %textureStore_4fc057
+         %31 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_4fc057
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_4fc057
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.wgsl
index 1a909f8..4c0fd68 100644
--- a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_4fc057();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/5a2f8f.wgsl b/test/intrinsics/gen/textureStore/5a2f8f.wgsl
index 063eecc..ae4c491 100644
--- a/test/intrinsics/gen/textureStore/5a2f8f.wgsl
+++ b/test/intrinsics/gen/textureStore/5a2f8f.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_5a2f8f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.hlsl
index 88412b5..498961a 100644
--- a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<int4> arg_0 : register(u0, space1);
 
 void textureStore_5a2f8f() {
   arg_0[1] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_5a2f8f();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.spvasm
index 269e38c..fb58460 100644
--- a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_5a2f8f "textureStore_5a2f8f"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,31 +33,43 @@
           %7 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %int_1 = OpConstant %int 1
       %v4int = OpTypeVector %int 4
-         %17 = OpConstantNull %v4int
+         %21 = OpConstantNull %v4int
+         %22 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_5a2f8f = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %17
+%textureStore_5a2f8f = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %21
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %19 = OpLabel
+%tint_symbol_2 = OpFunction %void None %22
+%tint_symbol = OpFunctionParameter %v4float
+         %25 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
                OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_5a2f8f
+         %29 = OpFunctionCall %void %textureStore_5a2f8f
+         %30 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_5a2f8f
+%fragment_main = OpFunction %void None %13
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_5a2f8f
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_5a2f8f
+%compute_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_5a2f8f
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.wgsl
index 3053085..adeefea 100644
--- a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_5a2f8f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/60975f.wgsl b/test/intrinsics/gen/textureStore/60975f.wgsl
index 5500737..3aec6444 100644
--- a/test/intrinsics/gen/textureStore/60975f.wgsl
+++ b/test/intrinsics/gen/textureStore/60975f.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_60975f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.hlsl
index e26e62a..0dcc532 100644
--- a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 
 void textureStore_60975f() {
   arg_0[int3(0, 0, 1)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_60975f();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.spvasm
index 2336b53..c05e714 100644
--- a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_60975f "textureStore_60975f"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,35 +31,45 @@
           %7 = OpTypeImage %float 2D 0 1 0 2 Rgba8
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
-    %v4float = OpTypeVector %float 4
-         %20 = OpConstantNull %v4float
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_60975f = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %18 %20
+%textureStore_60975f = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %22 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %22 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_60975f
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
          %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_60975f
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %29 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %28 = OpLabel
+               OpStore %tint_pointsize %float_1
          %30 = OpFunctionCall %void %textureStore_60975f
+         %31 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_60975f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_60975f
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.wgsl
index c7689fc..2391366 100644
--- a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_60975f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/682fd6.wgsl b/test/intrinsics/gen/textureStore/682fd6.wgsl
index ec1f1ae..3aae9c4 100644
--- a/test/intrinsics/gen/textureStore/682fd6.wgsl
+++ b/test/intrinsics/gen/textureStore/682fd6.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_682fd6();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.hlsl
index 3a8b9d0..0dced90 100644
--- a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_682fd6() {
   arg_0[int2(0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_682fd6();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.spvasm
index 646031d..6ba0216 100644
--- a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_682fd6 "textureStore_682fd6"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,33 +33,45 @@
           %7 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %17 = OpConstantNull %v2int
+         %21 = OpConstantNull %v2int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_682fd6 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_682fd6 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_682fd6
+         %31 = OpFunctionCall %void %textureStore_682fd6
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_682fd6
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_682fd6
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_682fd6
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_682fd6
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.wgsl
index 0bfa046..7dcc695 100644
--- a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_682fd6();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/6b75c3.wgsl b/test/intrinsics/gen/textureStore/6b75c3.wgsl
index 187bba1..84367ba 100644
--- a/test/intrinsics/gen/textureStore/6b75c3.wgsl
+++ b/test/intrinsics/gen/textureStore/6b75c3.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_6b75c3();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.hlsl
index 677e584..c561e4c 100644
--- a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<float4> arg_0 : register(u0, space1);
 
 void textureStore_6b75c3() {
   arg_0[1] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_6b75c3();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.spvasm
index 51ee16a..d373c99 100644
--- a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_6b75c3 "textureStore_6b75c3"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,42 @@
           %7 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-    %v4float = OpTypeVector %float 4
-         %17 = OpConstantNull %v4float
+         %20 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_6b75c3 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %int_1 %17
+%textureStore_6b75c3 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %int_1 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %19 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_6b75c3
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %20
+%tint_symbol = OpFunctionParameter %v4float
          %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_6b75c3
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %26 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %25 = OpLabel
+               OpStore %tint_pointsize %float_1
          %27 = OpFunctionCall %void %textureStore_6b75c3
+         %28 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_6b75c3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_6b75c3
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.wgsl
index 54e64b0..6ed15c6 100644
--- a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_6b75c3();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/6b80d2.wgsl b/test/intrinsics/gen/textureStore/6b80d2.wgsl
index cfded42..df54e40 100644
--- a/test/intrinsics/gen/textureStore/6b80d2.wgsl
+++ b/test/intrinsics/gen/textureStore/6b80d2.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_6b80d2();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.hlsl
index eac402e..57de36d 100644
--- a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<int4> arg_0 : register(u0, space1);
 
 void textureStore_6b80d2() {
   arg_0[1] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_6b80d2();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.spvasm
index 2ec370c..87ed017 100644
--- a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_6b80d2 "textureStore_6b80d2"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,31 +33,43 @@
           %7 = OpTypeImage %int 1D 0 0 0 2 R32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %int_1 = OpConstant %int 1
       %v4int = OpTypeVector %int 4
-         %17 = OpConstantNull %v4int
+         %21 = OpConstantNull %v4int
+         %22 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_6b80d2 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %17
+%textureStore_6b80d2 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %21
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %19 = OpLabel
+%tint_symbol_2 = OpFunction %void None %22
+%tint_symbol = OpFunctionParameter %v4float
+         %25 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
                OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_6b80d2
+         %29 = OpFunctionCall %void %textureStore_6b80d2
+         %30 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_6b80d2
+%fragment_main = OpFunction %void None %13
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_6b80d2
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_6b80d2
+%compute_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_6b80d2
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.wgsl
index 6ab7b61..6e06e4f 100644
--- a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_6b80d2();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/6cff2e.wgsl b/test/intrinsics/gen/textureStore/6cff2e.wgsl
index 987f5fe..cf3b83a 100644
--- a/test/intrinsics/gen/textureStore/6cff2e.wgsl
+++ b/test/intrinsics/gen/textureStore/6cff2e.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_6cff2e();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.hlsl
index e149a2a..90f7d83 100644
--- a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_6cff2e() {
   arg_0[int2(0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_6cff2e();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.spvasm
index 83a83e7..30fbe9b 100644
--- a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_6cff2e "textureStore_6cff2e"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,45 @@
           %7 = OpTypeImage %uint 2D 0 0 0 2 R32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %17 = OpConstantNull %v2int
+         %21 = OpConstantNull %v2int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_6cff2e = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_6cff2e = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_6cff2e
+         %31 = OpFunctionCall %void %textureStore_6cff2e
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_6cff2e
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_6cff2e
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_6cff2e
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_6cff2e
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.wgsl
index 85ea47f9..900cfea 100644
--- a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_6cff2e();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/6da692.wgsl b/test/intrinsics/gen/textureStore/6da692.wgsl
index e811e01..36f45e7 100644
--- a/test/intrinsics/gen/textureStore/6da692.wgsl
+++ b/test/intrinsics/gen/textureStore/6da692.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_6da692();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.hlsl
index 716225b..19a1b5f 100644
--- a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 
 void textureStore_6da692() {
   arg_0[int3(0, 0, 1)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_6da692();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.spvasm
index 6f6bf71..6fd25b4 100644
--- a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_6da692 "textureStore_6da692"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,35 +32,47 @@
           %7 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %19 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpConstantComposite %v3int %int_0 %int_0 %int_1
      %v4uint = OpTypeVector %uint 4
-         %21 = OpConstantNull %v4uint
+         %25 = OpConstantNull %v4uint
+         %26 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_6da692 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %19 %21
+%textureStore_6da692 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %23 %25
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %23 = OpLabel
+%tint_symbol_2 = OpFunction %void None %26
+%tint_symbol = OpFunctionParameter %v4float
+         %29 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
                OpStore %tint_pointsize %float_1
-         %25 = OpFunctionCall %void %textureStore_6da692
+         %33 = OpFunctionCall %void %textureStore_6da692
+         %34 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_6da692
+%fragment_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_6da692
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %textureStore_6da692
+%compute_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_6da692
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.wgsl
index da17065..eec8577 100644
--- a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_6da692();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/731349.wgsl b/test/intrinsics/gen/textureStore/731349.wgsl
index ad47ce9..1cf802a 100644
--- a/test/intrinsics/gen/textureStore/731349.wgsl
+++ b/test/intrinsics/gen/textureStore/731349.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_731349();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/731349.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/731349.wgsl.expected.hlsl
index c6530ca..3a80494 100644
--- a/test/intrinsics/gen/textureStore/731349.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/731349.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<float4> arg_0 : register(u0, space1);
 
 void textureStore_731349() {
   arg_0[int2(0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_731349();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/731349.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/731349.wgsl.expected.spvasm
index 577af62..58b625f 100644
--- a/test/intrinsics/gen/textureStore/731349.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/731349.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_731349 "textureStore_731349"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 2D 0 0 0 2 Rgba8
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v2int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_731349 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_731349 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_731349
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_731349
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_731349
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_731349
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_731349
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/731349.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/731349.wgsl.expected.wgsl
index 5b527d8..3dc131c 100644
--- a/test/intrinsics/gen/textureStore/731349.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/731349.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_731349();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/752da6.wgsl b/test/intrinsics/gen/textureStore/752da6.wgsl
index 4424bb3..8f50b09 100644
--- a/test/intrinsics/gen/textureStore/752da6.wgsl
+++ b/test/intrinsics/gen/textureStore/752da6.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_752da6();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.hlsl
index 60c15a1..3ab3bcc 100644
--- a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<int4> arg_0 : register(u0, space1);
 
 void textureStore_752da6() {
   arg_0[int2(0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_752da6();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.spvasm
index 4219376..6aa38f4 100644
--- a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_752da6 "textureStore_752da6"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,44 @@
           %7 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
+         %20 = OpConstantNull %v2int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_752da6 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_752da6 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_752da6
+         %30 = OpFunctionCall %void %textureStore_752da6
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_752da6
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_752da6
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_752da6
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_752da6
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.wgsl
index 2348d36..8f5dfb6 100644
--- a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_752da6();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/77c0ae.wgsl b/test/intrinsics/gen/textureStore/77c0ae.wgsl
index bce5f33..ef9f8ed 100644
--- a/test/intrinsics/gen/textureStore/77c0ae.wgsl
+++ b/test/intrinsics/gen/textureStore/77c0ae.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_77c0ae();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.hlsl
index 9705f28..29ed738 100644
--- a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_77c0ae() {
   arg_0[int2(0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_77c0ae();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.spvasm
index 7434c65..22b93d4 100644
--- a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_77c0ae "textureStore_77c0ae"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,45 @@
           %7 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %17 = OpConstantNull %v2int
+         %21 = OpConstantNull %v2int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_77c0ae = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_77c0ae = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_77c0ae
+         %31 = OpFunctionCall %void %textureStore_77c0ae
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_77c0ae
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_77c0ae
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_77c0ae
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_77c0ae
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.wgsl
index 8ff941a..434cae5 100644
--- a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_77c0ae();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/7cec8d.wgsl b/test/intrinsics/gen/textureStore/7cec8d.wgsl
index 7bf0a3b..4399d59 100644
--- a/test/intrinsics/gen/textureStore/7cec8d.wgsl
+++ b/test/intrinsics/gen/textureStore/7cec8d.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_7cec8d();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.hlsl
index 2068667..51ffaac 100644
--- a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 
 void textureStore_7cec8d() {
   arg_0[int3(0, 0, 1)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_7cec8d();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.spvasm
index 359d905..47d10a8 100644
--- a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_7cec8d "textureStore_7cec8d"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,34 +32,46 @@
           %7 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
       %v4int = OpTypeVector %int 4
-         %20 = OpConstantNull %v4int
+         %24 = OpConstantNull %v4int
+         %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_7cec8d = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %18 %20
+%textureStore_7cec8d = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %22 %24
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %22 = OpLabel
+%tint_symbol_2 = OpFunction %void None %25
+%tint_symbol = OpFunctionParameter %v4float
+         %28 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_7cec8d
+         %32 = OpFunctionCall %void %textureStore_7cec8d
+         %33 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_7cec8d
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_7cec8d
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %textureStore_7cec8d
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_7cec8d
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.wgsl
index 3ba2f7f..420fd1c 100644
--- a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_7cec8d();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/7f7fae.wgsl b/test/intrinsics/gen/textureStore/7f7fae.wgsl
index 203a4a5..de0b3e9 100644
--- a/test/intrinsics/gen/textureStore/7f7fae.wgsl
+++ b/test/intrinsics/gen/textureStore/7f7fae.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_7f7fae();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.hlsl
index 0242359..1da528f 100644
--- a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<float4> arg_0 : register(u0, space1);
 
 void textureStore_7f7fae() {
   arg_0[1] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_7f7fae();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.spvasm
index 6adb368..d8b70fe 100644
--- a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_7f7fae "textureStore_7f7fae"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,42 @@
           %7 = OpTypeImage %float 1D 0 0 0 2 Rgba8
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-    %v4float = OpTypeVector %float 4
-         %17 = OpConstantNull %v4float
+         %20 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_7f7fae = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %int_1 %17
+%textureStore_7f7fae = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %int_1 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %19 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_7f7fae
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %20
+%tint_symbol = OpFunctionParameter %v4float
          %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_7f7fae
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %26 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %25 = OpLabel
+               OpStore %tint_pointsize %float_1
          %27 = OpFunctionCall %void %textureStore_7f7fae
+         %28 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_7f7fae
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_7f7fae
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.wgsl
index e8ec3ee..d0bd9f3 100644
--- a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_7f7fae();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/804942.wgsl b/test/intrinsics/gen/textureStore/804942.wgsl
index a27738f..44ae89d 100644
--- a/test/intrinsics/gen/textureStore/804942.wgsl
+++ b/test/intrinsics/gen/textureStore/804942.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_804942();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/804942.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/804942.wgsl.expected.hlsl
index 226ade1..b835e33 100644
--- a/test/intrinsics/gen/textureStore/804942.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/804942.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<int4> arg_0 : register(u0, space1);
 
 void textureStore_804942() {
   arg_0[int2(0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_804942();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/804942.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/804942.wgsl.expected.spvasm
index 2a1b747..f7b77bb 100644
--- a/test/intrinsics/gen/textureStore/804942.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/804942.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_804942 "textureStore_804942"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,44 @@
           %7 = OpTypeImage %int 2D 0 0 0 2 R32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
+         %20 = OpConstantNull %v2int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_804942 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_804942 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_804942
+         %30 = OpFunctionCall %void %textureStore_804942
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_804942
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_804942
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_804942
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_804942
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/804942.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/804942.wgsl.expected.wgsl
index ed39788..3306d47 100644
--- a/test/intrinsics/gen/textureStore/804942.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/804942.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_804942();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/805dae.wgsl b/test/intrinsics/gen/textureStore/805dae.wgsl
index 427a6a2..45c740a 100644
--- a/test/intrinsics/gen/textureStore/805dae.wgsl
+++ b/test/intrinsics/gen/textureStore/805dae.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_805dae();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.hlsl
index 1556ee1..fee8e1b 100644
--- a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<float4> arg_0 : register(u0, space1);
 
 void textureStore_805dae() {
   arg_0[int2(0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_805dae();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.spvasm
index bdb0957..6a2d386 100644
--- a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_805dae "textureStore_805dae"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v2int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_805dae = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_805dae = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_805dae
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_805dae
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_805dae
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_805dae
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_805dae
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.wgsl
index 8fd5751..2e0e003 100644
--- a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_805dae();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/83bcc1.wgsl b/test/intrinsics/gen/textureStore/83bcc1.wgsl
index c951df7..a8951d1 100644
--- a/test/intrinsics/gen/textureStore/83bcc1.wgsl
+++ b/test/intrinsics/gen/textureStore/83bcc1.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_83bcc1();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.hlsl
index c03732f..bb4b8eb 100644
--- a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_83bcc1() {
   arg_0[1] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_83bcc1();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.spvasm
index ddd4726..7165fd8 100644
--- a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.spvasm
@@ -1,20 +1,23 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_83bcc1 "textureStore_83bcc1"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -22,6 +25,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -30,32 +34,44 @@
           %7 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
      %v4uint = OpTypeVector %uint 4
-         %18 = OpConstantNull %v4uint
+         %22 = OpConstantNull %v4uint
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_83bcc1 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %18
+%textureStore_83bcc1 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_83bcc1
+         %30 = OpFunctionCall %void %textureStore_83bcc1
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_83bcc1
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_83bcc1
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_83bcc1
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_83bcc1
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.wgsl
index 6a2ee41..7659600 100644
--- a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_83bcc1();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/872747.wgsl b/test/intrinsics/gen/textureStore/872747.wgsl
index f379316..840b126 100644
--- a/test/intrinsics/gen/textureStore/872747.wgsl
+++ b/test/intrinsics/gen/textureStore/872747.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_872747();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/872747.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/872747.wgsl.expected.hlsl
index 26076b1f..e00dfbd 100644
--- a/test/intrinsics/gen/textureStore/872747.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/872747.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<float4> arg_0 : register(u0, space1);
 
 void textureStore_872747() {
   arg_0[1] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_872747();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/872747.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/872747.wgsl.expected.spvasm
index 1a704f6..a6fa3f3 100644
--- a/test/intrinsics/gen/textureStore/872747.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/872747.wgsl.expected.spvasm
@@ -1,20 +1,23 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_872747 "textureStore_872747"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -22,6 +25,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,32 +33,42 @@
           %7 = OpTypeImage %float 1D 0 0 0 2 Rg32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-    %v4float = OpTypeVector %float 4
-         %17 = OpConstantNull %v4float
+         %20 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_872747 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %int_1 %17
+%textureStore_872747 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %int_1 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %19 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_872747
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %20
+%tint_symbol = OpFunctionParameter %v4float
          %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_872747
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %26 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %25 = OpLabel
+               OpStore %tint_pointsize %float_1
          %27 = OpFunctionCall %void %textureStore_872747
+         %28 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_872747
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_872747
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/872747.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/872747.wgsl.expected.wgsl
index ff7a941..084d473 100644
--- a/test/intrinsics/gen/textureStore/872747.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/872747.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_872747();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/8e0479.wgsl b/test/intrinsics/gen/textureStore/8e0479.wgsl
index 9420a69..75dce21 100644
--- a/test/intrinsics/gen/textureStore/8e0479.wgsl
+++ b/test/intrinsics/gen/textureStore/8e0479.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_8e0479();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.hlsl
index b9dc391..ca6ebdc 100644
--- a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 
 void textureStore_8e0479() {
   arg_0[int3(0, 0, 1)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_8e0479();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.spvasm
index b8b2544..5db1630 100644
--- a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_8e0479 "textureStore_8e0479"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,35 +32,47 @@
           %7 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %19 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpConstantComposite %v3int %int_0 %int_0 %int_1
      %v4uint = OpTypeVector %uint 4
-         %21 = OpConstantNull %v4uint
+         %25 = OpConstantNull %v4uint
+         %26 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_8e0479 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %19 %21
+%textureStore_8e0479 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %23 %25
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %23 = OpLabel
+%tint_symbol_2 = OpFunction %void None %26
+%tint_symbol = OpFunctionParameter %v4float
+         %29 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
                OpStore %tint_pointsize %float_1
-         %25 = OpFunctionCall %void %textureStore_8e0479
+         %33 = OpFunctionCall %void %textureStore_8e0479
+         %34 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_8e0479
+%fragment_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_8e0479
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %textureStore_8e0479
+%compute_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_8e0479
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.wgsl
index 5dcee17..f390e47 100644
--- a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_8e0479();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/8f71a1.wgsl b/test/intrinsics/gen/textureStore/8f71a1.wgsl
index 268f13b..1b56276 100644
--- a/test/intrinsics/gen/textureStore/8f71a1.wgsl
+++ b/test/intrinsics/gen/textureStore/8f71a1.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_8f71a1();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.hlsl
index 1a241c9..614cc38 100644
--- a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<int4> arg_0 : register(u0, space1);
 
 void textureStore_8f71a1() {
   arg_0[int3(0, 0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_8f71a1();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.spvasm
index 1cf5015..4380aac 100644
--- a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_8f71a1 "textureStore_8f71a1"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,44 @@
           %7 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
+         %20 = OpConstantNull %v3int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_8f71a1 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_8f71a1 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_8f71a1
+         %30 = OpFunctionCall %void %textureStore_8f71a1
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_8f71a1
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_8f71a1
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_8f71a1
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_8f71a1
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.wgsl
index 1f64e85..a6df58a 100644
--- a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_8f71a1();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/969534.wgsl b/test/intrinsics/gen/textureStore/969534.wgsl
index f80fdf4..158f0b5 100644
--- a/test/intrinsics/gen/textureStore/969534.wgsl
+++ b/test/intrinsics/gen/textureStore/969534.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_969534();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/969534.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/969534.wgsl.expected.hlsl
index 974bcd9..9b94d3f 100644
--- a/test/intrinsics/gen/textureStore/969534.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/969534.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<int4> arg_0 : register(u0, space1);
 
 void textureStore_969534() {
   arg_0[1] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_969534();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/969534.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/969534.wgsl.expected.spvasm
index 0d2b25b..bd8a1cc 100644
--- a/test/intrinsics/gen/textureStore/969534.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/969534.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_969534 "textureStore_969534"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,31 +33,43 @@
           %7 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %int_1 = OpConstant %int 1
       %v4int = OpTypeVector %int 4
-         %17 = OpConstantNull %v4int
+         %21 = OpConstantNull %v4int
+         %22 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_969534 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %17
+%textureStore_969534 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %21
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %19 = OpLabel
+%tint_symbol_2 = OpFunction %void None %22
+%tint_symbol = OpFunctionParameter %v4float
+         %25 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
                OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_969534
+         %29 = OpFunctionCall %void %textureStore_969534
+         %30 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_969534
+%fragment_main = OpFunction %void None %13
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_969534
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_969534
+%compute_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_969534
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/969534.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/969534.wgsl.expected.wgsl
index 53e571f..bda2165 100644
--- a/test/intrinsics/gen/textureStore/969534.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/969534.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_969534();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/9a3ecc.wgsl b/test/intrinsics/gen/textureStore/9a3ecc.wgsl
index 3ba13a4..0d73175 100644
--- a/test/intrinsics/gen/textureStore/9a3ecc.wgsl
+++ b/test/intrinsics/gen/textureStore/9a3ecc.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_9a3ecc();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.hlsl
index 7252b71..2d6881c 100644
--- a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<int4> arg_0 : register(u0, space1);
 
 void textureStore_9a3ecc() {
   arg_0[int3(0, 0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_9a3ecc();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.spvasm
index 16257e8..65be593 100644
--- a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_9a3ecc "textureStore_9a3ecc"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,44 @@
           %7 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
+         %20 = OpConstantNull %v3int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_9a3ecc = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_9a3ecc = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_9a3ecc
+         %30 = OpFunctionCall %void %textureStore_9a3ecc
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_9a3ecc
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_9a3ecc
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_9a3ecc
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_9a3ecc
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.wgsl
index 727c546..1b3385b 100644
--- a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_9a3ecc();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/9d9cd5.wgsl b/test/intrinsics/gen/textureStore/9d9cd5.wgsl
index 4f2a3f3..02eb723 100644
--- a/test/intrinsics/gen/textureStore/9d9cd5.wgsl
+++ b/test/intrinsics/gen/textureStore/9d9cd5.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_9d9cd5();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.hlsl
index 8c4350d..43971ad 100644
--- a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 
 void textureStore_9d9cd5() {
   arg_0[int3(0, 0, 1)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_9d9cd5();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.spvasm
index a719ffe..52c2c66 100644
--- a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_9d9cd5 "textureStore_9d9cd5"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,35 +31,45 @@
           %7 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
-    %v4float = OpTypeVector %float 4
-         %20 = OpConstantNull %v4float
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_9d9cd5 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %18 %20
+%textureStore_9d9cd5 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %22 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %22 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_9d9cd5
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
          %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_9d9cd5
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %29 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %28 = OpLabel
+               OpStore %tint_pointsize %float_1
          %30 = OpFunctionCall %void %textureStore_9d9cd5
+         %31 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_9d9cd5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_9d9cd5
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.wgsl
index 6152a0c..ca75315 100644
--- a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_9d9cd5();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/9e3ec5.wgsl b/test/intrinsics/gen/textureStore/9e3ec5.wgsl
index 4e4d687..6a69442 100644
--- a/test/intrinsics/gen/textureStore/9e3ec5.wgsl
+++ b/test/intrinsics/gen/textureStore/9e3ec5.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_9e3ec5();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.hlsl
index 99edc0a..310f67b 100644
--- a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<int4> arg_0 : register(u0, space1);
 
 void textureStore_9e3ec5() {
   arg_0[int2(0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_9e3ec5();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.spvasm
index d9595b1..660a80b 100644
--- a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_9e3ec5 "textureStore_9e3ec5"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,44 @@
           %7 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
+         %20 = OpConstantNull %v2int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_9e3ec5 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_9e3ec5 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_9e3ec5
+         %30 = OpFunctionCall %void %textureStore_9e3ec5
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_9e3ec5
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_9e3ec5
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_9e3ec5
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_9e3ec5
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.wgsl
index c098780..97220bf 100644
--- a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_9e3ec5();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/ac67aa.wgsl b/test/intrinsics/gen/textureStore/ac67aa.wgsl
index e0a32bd..5e91609 100644
--- a/test/intrinsics/gen/textureStore/ac67aa.wgsl
+++ b/test/intrinsics/gen/textureStore/ac67aa.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_ac67aa();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.hlsl
index f888070..7185f53 100644
--- a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_ac67aa() {
   arg_0[int3(0, 0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_ac67aa();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.spvasm
index 9df59a8..2df2253 100644
--- a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_ac67aa "textureStore_ac67aa"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,33 +33,45 @@
           %7 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %17 = OpConstantNull %v3int
+         %21 = OpConstantNull %v3int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_ac67aa = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_ac67aa = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_ac67aa
+         %31 = OpFunctionCall %void %textureStore_ac67aa
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_ac67aa
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_ac67aa
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_ac67aa
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_ac67aa
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.wgsl
index ebf8cc5..f649c8b 100644
--- a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_ac67aa();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/b706b1.wgsl b/test/intrinsics/gen/textureStore/b706b1.wgsl
index 59b894f..b95081a 100644
--- a/test/intrinsics/gen/textureStore/b706b1.wgsl
+++ b/test/intrinsics/gen/textureStore/b706b1.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_b706b1();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.hlsl
index 6c9a134..5ec0692 100644
--- a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<int4> arg_0 : register(u0, space1);
 
 void textureStore_b706b1() {
   arg_0[int3(0, 0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_b706b1();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.spvasm
index b46f7cb..e8ce299 100644
--- a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_b706b1 "textureStore_b706b1"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,44 @@
           %7 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
+         %20 = OpConstantNull %v3int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_b706b1 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_b706b1 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_b706b1
+         %30 = OpFunctionCall %void %textureStore_b706b1
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_b706b1
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_b706b1
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_b706b1
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_b706b1
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.wgsl
index 6f717da..d5a48e5 100644
--- a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_b706b1();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/bbcb7f.wgsl b/test/intrinsics/gen/textureStore/bbcb7f.wgsl
index e7b41fb..efad163 100644
--- a/test/intrinsics/gen/textureStore/bbcb7f.wgsl
+++ b/test/intrinsics/gen/textureStore/bbcb7f.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_bbcb7f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.hlsl
index df0868c..95ca423 100644
--- a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<int4> arg_0 : register(u0, space1);
 
 void textureStore_bbcb7f() {
   arg_0[int2(0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_bbcb7f();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.spvasm
index 56000e5..488c2b5 100644
--- a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_bbcb7f "textureStore_bbcb7f"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,44 @@
           %7 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
+         %20 = OpConstantNull %v2int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_bbcb7f = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_bbcb7f = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_bbcb7f
+         %30 = OpFunctionCall %void %textureStore_bbcb7f
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_bbcb7f
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_bbcb7f
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_bbcb7f
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_bbcb7f
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.wgsl
index af697b0..4c83b97 100644
--- a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_bbcb7f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/be6e30.wgsl b/test/intrinsics/gen/textureStore/be6e30.wgsl
index 6e1aeb9..c642eed 100644
--- a/test/intrinsics/gen/textureStore/be6e30.wgsl
+++ b/test/intrinsics/gen/textureStore/be6e30.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_be6e30();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.hlsl
index 4918e06..33fc182 100644
--- a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2D<float4> arg_0 : register(u0, space1);
 
 void textureStore_be6e30() {
   arg_0[int2(0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_be6e30();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.spvasm
index ecf44b0..0ad6a57 100644
--- a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_be6e30 "textureStore_be6e30"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
-         %16 = OpConstantNull %v2int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v2int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_be6e30 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_be6e30 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_be6e30
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_be6e30
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_be6e30
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_be6e30
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_be6e30
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.wgsl
index 1bd8d78..cf60e0d 100644
--- a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_be6e30();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/bf775c.wgsl b/test/intrinsics/gen/textureStore/bf775c.wgsl
index 62c7939..8314743 100644
--- a/test/intrinsics/gen/textureStore/bf775c.wgsl
+++ b/test/intrinsics/gen/textureStore/bf775c.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_bf775c();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.hlsl
index 09c1673..5714afa 100644
--- a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<int4> arg_0 : register(u0, space1);
 
 void textureStore_bf775c() {
   arg_0[1] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_bf775c();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.spvasm
index 8c196e4..ad9491a 100644
--- a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_bf775c "textureStore_bf775c"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,31 +33,43 @@
           %7 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %int_1 = OpConstant %int 1
       %v4int = OpTypeVector %int 4
-         %17 = OpConstantNull %v4int
+         %21 = OpConstantNull %v4int
+         %22 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_bf775c = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %17
+%textureStore_bf775c = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %21
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %19 = OpLabel
+%tint_symbol_2 = OpFunction %void None %22
+%tint_symbol = OpFunctionParameter %v4float
+         %25 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
                OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_bf775c
+         %29 = OpFunctionCall %void %textureStore_bf775c
+         %30 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_bf775c
+%fragment_main = OpFunction %void None %13
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_bf775c
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_bf775c
+%compute_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_bf775c
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.wgsl
index cc479d1..08ff4cb 100644
--- a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_bf775c();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/c5af1e.wgsl b/test/intrinsics/gen/textureStore/c5af1e.wgsl
index 3cb1ba0..53fa500 100644
--- a/test/intrinsics/gen/textureStore/c5af1e.wgsl
+++ b/test/intrinsics/gen/textureStore/c5af1e.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_c5af1e();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.hlsl
index fb29261..2f08e13 100644
--- a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<float4> arg_0 : register(u0, space1);
 
 void textureStore_c5af1e() {
   arg_0[int3(0, 0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_c5af1e();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.spvasm
index fbd7f69..88bfeb1 100644
--- a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_c5af1e "textureStore_c5af1e"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v3int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_c5af1e = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_c5af1e = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_c5af1e
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_c5af1e
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_c5af1e
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_c5af1e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_c5af1e
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.wgsl
index b973b75..671eef0 100644
--- a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_c5af1e();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/c863be.wgsl b/test/intrinsics/gen/textureStore/c863be.wgsl
index e4607bb..2dfd759 100644
--- a/test/intrinsics/gen/textureStore/c863be.wgsl
+++ b/test/intrinsics/gen/textureStore/c863be.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_c863be();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.hlsl
index 1301b87..e330dce 100644
--- a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 
 void textureStore_c863be() {
   arg_0[int3(0, 0, 1)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_c863be();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.spvasm
index 2efc16e..e93580e 100644
--- a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_c863be "textureStore_c863be"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,35 +32,45 @@
           %7 = OpTypeImage %float 2D 0 1 0 2 Rg32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
-    %v4float = OpTypeVector %float 4
-         %20 = OpConstantNull %v4float
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_c863be = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %18 %20
+%textureStore_c863be = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %22 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %22 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_c863be
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
          %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_c863be
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %29 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %28 = OpLabel
+               OpStore %tint_pointsize %float_1
          %30 = OpFunctionCall %void %textureStore_c863be
+         %31 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_c863be
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_c863be
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.wgsl
index 849df74..f5d4ab3 100644
--- a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_c863be();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/d73b5c.wgsl b/test/intrinsics/gen/textureStore/d73b5c.wgsl
index a290200..04f8476 100644
--- a/test/intrinsics/gen/textureStore/d73b5c.wgsl
+++ b/test/intrinsics/gen/textureStore/d73b5c.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_d73b5c();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.hlsl
index a550f78..bddb309 100644
--- a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<int4> arg_0 : register(u0, space1);
 
 void textureStore_d73b5c() {
   arg_0[1] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_d73b5c();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.spvasm
index 9bd7a5c..d9b7315 100644
--- a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.spvasm
@@ -1,20 +1,23 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_d73b5c "textureStore_d73b5c"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -22,6 +25,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -30,31 +34,43 @@
           %7 = OpTypeImage %int 1D 0 0 0 2 Rg32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %int_1 = OpConstant %int 1
       %v4int = OpTypeVector %int 4
-         %17 = OpConstantNull %v4int
+         %21 = OpConstantNull %v4int
+         %22 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_d73b5c = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %17
+%textureStore_d73b5c = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %21
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %19 = OpLabel
+%tint_symbol_2 = OpFunction %void None %22
+%tint_symbol = OpFunctionParameter %v4float
+         %25 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
                OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_d73b5c
+         %29 = OpFunctionCall %void %textureStore_d73b5c
+         %30 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_d73b5c
+%fragment_main = OpFunction %void None %13
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_d73b5c
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_d73b5c
+%compute_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_d73b5c
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.wgsl
index 1966313..13b3190 100644
--- a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_d73b5c();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/dd7d81.wgsl b/test/intrinsics/gen/textureStore/dd7d81.wgsl
index e4ee1e4..4b89356 100644
--- a/test/intrinsics/gen/textureStore/dd7d81.wgsl
+++ b/test/intrinsics/gen/textureStore/dd7d81.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_dd7d81();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.hlsl
index b47a495..bb35e13 100644
--- a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<float4> arg_0 : register(u0, space1);
 
 void textureStore_dd7d81() {
   arg_0[int3(0, 0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_dd7d81();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.spvasm
index c3658e7..7dacd3f 100644
--- a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_dd7d81 "textureStore_dd7d81"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v3int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_dd7d81 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_dd7d81 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_dd7d81
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_dd7d81
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_dd7d81
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_dd7d81
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_dd7d81
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.wgsl
index 7f448d4..487e054 100644
--- a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_dd7d81();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/dde364.wgsl b/test/intrinsics/gen/textureStore/dde364.wgsl
index 39d1eda..2351bf9 100644
--- a/test/intrinsics/gen/textureStore/dde364.wgsl
+++ b/test/intrinsics/gen/textureStore/dde364.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_dde364();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.hlsl
index cd99618..6f41e23 100644
--- a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 
 void textureStore_dde364() {
   arg_0[int3(0, 0, 1)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_dde364();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.spvasm
index 847c8f1..918c322 100644
--- a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_dde364 "textureStore_dde364"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,35 +33,47 @@
           %7 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %19 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %23 = OpConstantComposite %v3int %int_0 %int_0 %int_1
      %v4uint = OpTypeVector %uint 4
-         %21 = OpConstantNull %v4uint
+         %25 = OpConstantNull %v4uint
+         %26 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_dde364 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %19 %21
+%textureStore_dde364 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %23 %25
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %23 = OpLabel
+%tint_symbol_2 = OpFunction %void None %26
+%tint_symbol = OpFunctionParameter %v4float
+         %29 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
                OpStore %tint_pointsize %float_1
-         %25 = OpFunctionCall %void %textureStore_dde364
+         %33 = OpFunctionCall %void %textureStore_dde364
+         %34 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_dde364
+%fragment_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_dde364
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %textureStore_dde364
+%compute_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_dde364
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.wgsl
index d03b488..ed94049 100644
--- a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_dde364();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/e885e8.wgsl b/test/intrinsics/gen/textureStore/e885e8.wgsl
index 013bd3a..333af95 100644
--- a/test/intrinsics/gen/textureStore/e885e8.wgsl
+++ b/test/intrinsics/gen/textureStore/e885e8.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_e885e8();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.hlsl
index 110b1fd..8aa9d4c 100644
--- a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<float4> arg_0 : register(u0, space1);
 
 void textureStore_e885e8() {
   arg_0[1] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_e885e8();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.spvasm
index 0f1837d..db9ea1d 100644
--- a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 28
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_e885e8 "textureStore_e885e8"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,42 @@
           %7 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-    %v4float = OpTypeVector %float 4
-         %17 = OpConstantNull %v4float
+         %20 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_e885e8 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %int_1 %17
+%textureStore_e885e8 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %int_1 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %19 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %21 = OpFunctionCall %void %textureStore_e885e8
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %20
+%tint_symbol = OpFunctionParameter %v4float
          %23 = OpLabel
-         %24 = OpFunctionCall %void %textureStore_e885e8
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %26 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %25 = OpLabel
+               OpStore %tint_pointsize %float_1
          %27 = OpFunctionCall %void %textureStore_e885e8
+         %28 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_e885e8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_e885e8
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.wgsl
index e4feafb..53888d3 100644
--- a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_e885e8();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/eb702f.wgsl b/test/intrinsics/gen/textureStore/eb702f.wgsl
index 040b104..ab19ba0 100644
--- a/test/intrinsics/gen/textureStore/eb702f.wgsl
+++ b/test/intrinsics/gen/textureStore/eb702f.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_eb702f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.hlsl
index f2f1217..a65d22b 100644
--- a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<float4> arg_0 : register(u0, space1);
 
 void textureStore_eb702f() {
   arg_0[int3(0, 0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_eb702f();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.spvasm
index 805163c..a33b490 100644
--- a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_eb702f "textureStore_eb702f"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -27,33 +31,43 @@
           %7 = OpTypeImage %float 3D 0 0 0 2 R32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v3int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_eb702f = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_eb702f = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_eb702f
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_eb702f
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_eb702f
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_eb702f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_eb702f
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.wgsl
index de86b76..5cf2b13 100644
--- a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_eb702f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/eb78b9.wgsl b/test/intrinsics/gen/textureStore/eb78b9.wgsl
index 4aa20046..c19b499 100644
--- a/test/intrinsics/gen/textureStore/eb78b9.wgsl
+++ b/test/intrinsics/gen/textureStore/eb78b9.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_eb78b9();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.hlsl
index 8a2ccfd..859588a 100644
--- a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<int4> arg_0 : register(u0, space1);
 
 void textureStore_eb78b9() {
   arg_0[int3(0, 0, 0)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_eb78b9();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.spvasm
index 2ff5b98..fec7f88 100644
--- a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_eb78b9 "textureStore_eb78b9"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,32 +32,44 @@
           %7 = OpTypeImage %int 3D 0 0 0 2 R32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
+         %20 = OpConstantNull %v3int
       %v4int = OpTypeVector %int 4
-         %18 = OpConstantNull %v4int
+         %22 = OpConstantNull %v4int
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_eb78b9 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %16 %18
+%textureStore_eb78b9 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %20 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_eb78b9
+         %30 = OpFunctionCall %void %textureStore_eb78b9
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_eb78b9
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_eb78b9
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_eb78b9
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_eb78b9
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.wgsl
index eb76666..31287b9 100644
--- a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_eb78b9();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/ee6acc.wgsl b/test/intrinsics/gen/textureStore/ee6acc.wgsl
index a1a7801..223158c 100644
--- a/test/intrinsics/gen/textureStore/ee6acc.wgsl
+++ b/test/intrinsics/gen/textureStore/ee6acc.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_ee6acc();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.hlsl
index a321851..2560aac 100644
--- a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<float4> arg_0 : register(u0, space1);
 
 void textureStore_ee6acc() {
   arg_0[int3(0, 0, 0)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_ee6acc();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.spvasm
index f11aa5c..5a8e520 100644
--- a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_ee6acc "textureStore_ee6acc"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,43 @@
           %7 = OpTypeImage %float 3D 0 0 0 2 Rg32f
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %11 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %11
        %void = OpTypeVoid
-          %8 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %16 = OpConstantNull %v3int
-    %v4float = OpTypeVector %float 4
-         %18 = OpConstantNull %v4float
+         %20 = OpConstantNull %v3int
+         %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_ee6acc = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %7 %arg_0
-               OpImageWrite %13 %16 %18
+%textureStore_ee6acc = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %7 %arg_0
+               OpImageWrite %17 %20 %11
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %8
-         %20 = OpLabel
-               OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_ee6acc
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %8
+%tint_symbol_2 = OpFunction %void None %21
+%tint_symbol = OpFunctionParameter %v4float
          %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_ee6acc
+               OpStore %tint_symbol_1 %tint_symbol
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %8
-         %27 = OpLabel
+%vertex_main = OpFunction %void None %12
+         %26 = OpLabel
+               OpStore %tint_pointsize %float_1
          %28 = OpFunctionCall %void %textureStore_ee6acc
+         %29 = OpFunctionCall %void %tint_symbol_2 %11
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_ee6acc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_ee6acc
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.wgsl
index 3530be4..c68cc91 100644
--- a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_ee6acc();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/ef9f2f.wgsl b/test/intrinsics/gen/textureStore/ef9f2f.wgsl
index 541ee39..e637049 100644
--- a/test/intrinsics/gen/textureStore/ef9f2f.wgsl
+++ b/test/intrinsics/gen/textureStore/ef9f2f.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_ef9f2f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.hlsl
index 18e4e26..68cadd9 100644
--- a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_ef9f2f() {
   arg_0[int3(0, 0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_ef9f2f();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.spvasm
index 3d68722..0d35fe8 100644
--- a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_ef9f2f "textureStore_ef9f2f"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,45 @@
           %7 = OpTypeImage %uint 3D 0 0 0 2 R32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %17 = OpConstantNull %v3int
+         %21 = OpConstantNull %v3int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_ef9f2f = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_ef9f2f = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_ef9f2f
+         %31 = OpFunctionCall %void %textureStore_ef9f2f
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_ef9f2f
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_ef9f2f
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_ef9f2f
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_ef9f2f
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.wgsl
index f2f20c1..e8bf5e0 100644
--- a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_ef9f2f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/f8dead.wgsl b/test/intrinsics/gen/textureStore/f8dead.wgsl
index dd8a4fb..6c316b6 100644
--- a/test/intrinsics/gen/textureStore/f8dead.wgsl
+++ b/test/intrinsics/gen/textureStore/f8dead.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_f8dead();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.hlsl
index e6687d3..dc3b5d8 100644
--- a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_f8dead() {
   arg_0[int3(0, 0, 0)] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_f8dead();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.spvasm
index f421043..382a8c1 100644
--- a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_f8dead "textureStore_f8dead"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,33 +32,45 @@
           %7 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
-         %17 = OpConstantNull %v3int
+         %21 = OpConstantNull %v3int
      %v4uint = OpTypeVector %uint 4
-         %19 = OpConstantNull %v4uint
+         %23 = OpConstantNull %v4uint
+         %24 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_f8dead = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %17 %19
+%textureStore_f8dead = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %21 %23
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %21 = OpLabel
+%tint_symbol_2 = OpFunction %void None %24
+%tint_symbol = OpFunctionParameter %v4float
+         %27 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
                OpStore %tint_pointsize %float_1
-         %23 = OpFunctionCall %void %textureStore_f8dead
+         %31 = OpFunctionCall %void %textureStore_f8dead
+         %32 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %textureStore_f8dead
+%fragment_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_f8dead
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %textureStore_f8dead
+%compute_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_f8dead
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.wgsl
index 184af58..8f23e0c 100644
--- a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_f8dead();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/f9be83.wgsl b/test/intrinsics/gen/textureStore/f9be83.wgsl
index 07e21f9..9ecba96 100644
--- a/test/intrinsics/gen/textureStore/f9be83.wgsl
+++ b/test/intrinsics/gen/textureStore/f9be83.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_f9be83();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.hlsl
index f4b305b..b671f34 100644
--- a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 
 void textureStore_f9be83() {
   arg_0[int3(0, 0, 1)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_f9be83();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.spvasm
index 08795cd..af3adfc 100644
--- a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability StorageImageExtendedFormats
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_f9be83 "textureStore_f9be83"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,34 +33,46 @@
           %7 = OpTypeImage %int 2D 0 1 0 2 Rg32i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
       %v4int = OpTypeVector %int 4
-         %20 = OpConstantNull %v4int
+         %24 = OpConstantNull %v4int
+         %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_f9be83 = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %18 %20
+%textureStore_f9be83 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %22 %24
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %22 = OpLabel
+%tint_symbol_2 = OpFunction %void None %25
+%tint_symbol = OpFunctionParameter %v4float
+         %28 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_f9be83
+         %32 = OpFunctionCall %void %textureStore_f9be83
+         %33 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_f9be83
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_f9be83
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %textureStore_f9be83
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_f9be83
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.wgsl
index bdc6309..efbe0fe 100644
--- a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_f9be83();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/fb9a8f.wgsl b/test/intrinsics/gen/textureStore/fb9a8f.wgsl
index 13a6929..68e71bb 100644
--- a/test/intrinsics/gen/textureStore/fb9a8f.wgsl
+++ b/test/intrinsics/gen/textureStore/fb9a8f.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_fb9a8f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.hlsl
index 605ed73..b2a2834 100644
--- a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 
 void textureStore_fb9a8f() {
   arg_0[1] = uint4(0u, 0u, 0u, 0u);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_fb9a8f();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.spvasm
index 32c9ecb..414eb1c 100644
--- a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.spvasm
@@ -1,19 +1,22 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Image1D
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_fb9a8f "textureStore_fb9a8f"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -21,6 +24,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -29,32 +33,44 @@
           %7 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
      %v4uint = OpTypeVector %uint 4
-         %18 = OpConstantNull %v4uint
+         %22 = OpConstantNull %v4uint
+         %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_fb9a8f = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %int_1 %18
+%textureStore_fb9a8f = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %int_1 %22
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %20 = OpLabel
+%tint_symbol_2 = OpFunction %void None %23
+%tint_symbol = OpFunctionParameter %v4float
+         %26 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %22 = OpFunctionCall %void %textureStore_fb9a8f
+         %30 = OpFunctionCall %void %textureStore_fb9a8f
+         %31 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %textureStore_fb9a8f
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_fb9a8f
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %textureStore_fb9a8f
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_fb9a8f
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.wgsl
index f22a569..78ac35d 100644
--- a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_fb9a8f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/fbf53f.wgsl b/test/intrinsics/gen/textureStore/fbf53f.wgsl
index eac93e4..a5d4ca6 100644
--- a/test/intrinsics/gen/textureStore/fbf53f.wgsl
+++ b/test/intrinsics/gen/textureStore/fbf53f.wgsl
@@ -28,8 +28,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_fbf53f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]
diff --git a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.hlsl b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.hlsl
index 174ca73..32afd0d 100644
--- a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.hlsl
@@ -1,12 +1,17 @@
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 
 void textureStore_fbf53f() {
   arg_0[int3(0, 0, 1)] = int4(0, 0, 0, 0);
 }
 
-void vertex_main() {
+tint_symbol vertex_main() {
   textureStore_fbf53f();
-  return;
+  const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
+  return tint_symbol_1;
 }
 
 void fragment_main() {
diff --git a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.spvasm b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.spvasm
index 7f56ec3..3ac4b4d 100644
--- a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.spvasm
@@ -1,18 +1,21 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize
+               OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1
                OpEntryPoint Fragment %fragment_main "fragment_main"
                OpEntryPoint GLCompute %compute_main "compute_main"
                OpExecutionMode %fragment_main OriginUpperLeft
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %arg_0 "arg_0"
+               OpName %tint_symbol_1 "tint_symbol_1"
                OpName %textureStore_fbf53f "textureStore_fbf53f"
+               OpName %tint_symbol_2 "tint_symbol_2"
+               OpName %tint_symbol "tint_symbol"
                OpName %vertex_main "vertex_main"
                OpName %fragment_main "fragment_main"
                OpName %compute_main "compute_main"
@@ -20,6 +23,7 @@
                OpDecorate %arg_0 NonReadable
                OpDecorate %arg_0 DescriptorSet 1
                OpDecorate %arg_0 Binding 0
+               OpDecorate %tint_symbol_1 BuiltIn Position
       %float = OpTypeFloat 32
 %_ptr_Output_float = OpTypePointer Output %float
           %4 = OpConstantNull %float
@@ -28,34 +32,46 @@
           %7 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
 %_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
       %arg_0 = OpVariable %_ptr_UniformConstant_7 UniformConstant
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+         %12 = OpConstantNull %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %12
        %void = OpTypeVoid
-          %9 = OpTypeFunction %void
+         %13 = OpTypeFunction %void
       %v3int = OpTypeVector %int 3
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
-         %18 = OpConstantComposite %v3int %int_0 %int_0 %int_1
+         %22 = OpConstantComposite %v3int %int_0 %int_0 %int_1
       %v4int = OpTypeVector %int 4
-         %20 = OpConstantNull %v4int
+         %24 = OpConstantNull %v4int
+         %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%textureStore_fbf53f = OpFunction %void None %9
-         %12 = OpLabel
-         %14 = OpLoad %7 %arg_0
-               OpImageWrite %14 %18 %20
+%textureStore_fbf53f = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %7 %arg_0
+               OpImageWrite %18 %22 %24
                OpReturn
                OpFunctionEnd
-%vertex_main = OpFunction %void None %9
-         %22 = OpLabel
+%tint_symbol_2 = OpFunction %void None %25
+%tint_symbol = OpFunctionParameter %v4float
+         %28 = OpLabel
+               OpStore %tint_symbol_1 %tint_symbol
+               OpReturn
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %24 = OpFunctionCall %void %textureStore_fbf53f
+         %32 = OpFunctionCall %void %textureStore_fbf53f
+         %33 = OpFunctionCall %void %tint_symbol_2 %12
                OpReturn
                OpFunctionEnd
-%fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureStore_fbf53f
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_fbf53f
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %textureStore_fbf53f
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_fbf53f
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.wgsl
index b19b0a4..18f0471 100644
--- a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.wgsl
@@ -5,8 +5,9 @@
 }
 
 [[stage(vertex)]]
-fn vertex_main() {
+fn vertex_main() -> [[builtin(position)]] vec4<f32> {
   textureStore_fbf53f();
+  return vec4<f32>();
 }
 
 [[stage(fragment)]]