diff --git a/src/transform/transform.cc b/src/transform/transform.cc
index 955f16e..20cfb83 100644
--- a/src/transform/transform.cc
+++ b/src/transform/transform.cc
@@ -67,6 +67,9 @@
                                        const char* names[],
                                        size_t count) {
   ctx->ReplaceAll([=](Symbol in) {
+    if (!ctx->src->Symbols().HasName(in)) {
+      return ctx->dst->Symbols().New();
+    }
     auto name_in = ctx->src->Symbols().NameFor(in);
     if (!std::binary_search(names, names + count, name_in)) {
       return ctx->dst->Symbols().Register(name_in);
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc
index 525ce1f..a12663f 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -119,15 +119,15 @@
   GeneratorImpl& gen = SanitizeAndBuild();
 
   ASSERT_TRUE(gen.Generate(out)) << gen.error();
-  EXPECT_EQ(result(), R"(struct tint_symbol_1 {
+  EXPECT_EQ(result(), R"(struct tint_symbol_5 {
   float foo : TEXCOORD0;
 };
 struct tint_symbol_2 {
   float value : SV_Target1;
 };
 
-tint_symbol_2 frag_main(tint_symbol_1 tint_symbol_6) {
-  const float foo = tint_symbol_6.foo;
+tint_symbol_2 frag_main(tint_symbol_5 tint_symbol_7) {
+  const float foo = tint_symbol_7.foo;
   const tint_symbol_2 tint_symbol_1 = {foo};
   return tint_symbol_1;
 }
@@ -153,15 +153,15 @@
   GeneratorImpl& gen = SanitizeAndBuild();
 
   ASSERT_TRUE(gen.Generate(out)) << gen.error();
-  EXPECT_EQ(result(), R"(struct tint_symbol_1 {
+  EXPECT_EQ(result(), R"(struct tint_symbol_6 {
   float4 coord : SV_Position;
 };
 struct tint_symbol_2 {
   float value : SV_Depth;
 };
 
-tint_symbol_2 frag_main(tint_symbol_1 tint_symbol_6) {
-  const float4 coord = tint_symbol_6.coord;
+tint_symbol_2 frag_main(tint_symbol_6 tint_symbol_8) {
+  const float4 coord = tint_symbol_8.coord;
   const tint_symbol_2 tint_symbol_1 = {coord.x};
   return tint_symbol_1;
 }
@@ -214,7 +214,7 @@
   float col1 : TEXCOORD1;
   float col2 : TEXCOORD2;
 };
-struct tint_symbol_7 {
+struct tint_symbol_8 {
   float col1 : TEXCOORD1;
   float col2 : TEXCOORD2;
 };
@@ -225,8 +225,8 @@
   return tint_symbol_1;
 }
 
-void frag_main(tint_symbol_7 tint_symbol_9) {
-  const Interface colors = {tint_symbol_9.col1, tint_symbol_9.col2};
+void frag_main(tint_symbol_8 tint_symbol_10) {
+  const Interface colors = {tint_symbol_10.col1, tint_symbol_10.col2};
   const float r = colors.col1;
   const float g = colors.col2;
   return;
diff --git a/src/writer/hlsl/generator_impl_sanitizer_test.cc b/src/writer/hlsl/generator_impl_sanitizer_test.cc
index 48fbb06..229931d 100644
--- a/src/writer/hlsl/generator_impl_sanitizer_test.cc
+++ b/src/writer/hlsl/generator_impl_sanitizer_test.cc
@@ -62,10 +62,10 @@
 ByteAddressBuffer sb : register(t0, space1);
 
 void main() {
-  uint tint_symbol_7 = 0u;
-  sb.GetDimensions(tint_symbol_7);
-  const uint tint_symbol_9 = ((tint_symbol_7 - 16u) / 16u);
-  uint len = tint_symbol_9;
+  uint tint_symbol_9 = 0u;
+  sb.GetDimensions(tint_symbol_9);
+  const uint tint_symbol_10 = ((tint_symbol_9 - 16u) / 16u);
+  uint len = tint_symbol_10;
   return;
 }
 
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index a766061..6b1f2d8 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -108,15 +108,15 @@
   EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
 
 using namespace metal;
-struct tint_symbol_3 {
+struct tint_symbol_1 {
   float foo [[user(locn0)]];
 };
-struct tint_symbol_5 {
+struct tint_symbol_3 {
   float value [[color(1)]];
 };
 
-fragment tint_symbol_5 frag_main(tint_symbol_3 tint_symbol_1 [[stage_in]]) {
-  const float foo = tint_symbol_1.foo;
+fragment tint_symbol_3 frag_main(tint_symbol_1 tint_symbol_6 [[stage_in]]) {
+  const float foo = tint_symbol_6.foo;
   return {foo};
 }
 
@@ -141,15 +141,15 @@
   EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
 
 using namespace metal;
-struct tint_symbol_3 {
+struct tint_symbol_1 {
   float4 coord [[position]];
 };
-struct tint_symbol_5 {
+struct tint_symbol_3 {
   float value [[depth(any)]];
 };
 
-fragment tint_symbol_5 frag_main(tint_symbol_3 tint_symbol_1 [[stage_in]]) {
-  const float4 coord = tint_symbol_1.coord;
+fragment tint_symbol_3 frag_main(tint_symbol_1 tint_symbol_6 [[stage_in]]) {
+  const float4 coord = tint_symbol_6.coord;
   return {coord.x};
 }
 
@@ -202,18 +202,18 @@
   float col1 [[user(locn1)]];
   float col2 [[user(locn2)]];
 };
-struct tint_symbol_9 {
+struct tint_symbol_7 {
   float col1 [[user(locn1)]];
   float col2 [[user(locn2)]];
 };
 
 vertex tint_symbol_4 vert_main() {
-  const Interface tint_symbol_5 = {0.5f, 0.25f};
-  return {tint_symbol_5.col1, tint_symbol_5.col2};
+  const Interface tint_symbol_6 = {0.5f, 0.25f};
+  return {tint_symbol_6.col1, tint_symbol_6.col2};
 }
 
-fragment void frag_main(tint_symbol_9 tint_symbol_7 [[stage_in]]) {
-  const Interface colors = {tint_symbol_7.col1, tint_symbol_7.col2};
+fragment void frag_main(tint_symbol_7 tint_symbol_9 [[stage_in]]) {
+  const Interface colors = {tint_symbol_9.col1, tint_symbol_9.col2};
   const float r = colors.col1;
   const float g = colors.col2;
   return;
@@ -266,10 +266,10 @@
 struct VertexOutput {
   float4 pos;
 };
-struct tint_symbol_3 {
+struct tint_symbol_5 {
   float4 pos [[position]];
 };
-struct tint_symbol_7 {
+struct tint_symbol_8 {
   float4 pos [[position]];
 };
 
@@ -277,14 +277,14 @@
   return {float4(x, x, x, 1.0f)};
 }
 
-vertex tint_symbol_3 vert_main1() {
-  const VertexOutput tint_symbol_5 = {foo(0.5f)};
-  return {tint_symbol_5.pos};
+vertex tint_symbol_5 vert_main1() {
+  const VertexOutput tint_symbol_7 = {foo(0.5f)};
+  return {tint_symbol_7.pos};
 }
 
-vertex tint_symbol_7 vert_main2() {
-  const VertexOutput tint_symbol_8 = {foo(0.25f)};
-  return {tint_symbol_8.pos};
+vertex tint_symbol_8 vert_main2() {
+  const VertexOutput tint_symbol_10 = {foo(0.25f)};
+  return {tint_symbol_10.pos};
 }
 
 )");
