diff --git a/docs/origin-trial-changes.md b/docs/origin-trial-changes.md
index 253c961..6da54e0 100644
--- a/docs/origin-trial-changes.md
+++ b/docs/origin-trial-changes.md
@@ -9,4 +9,5 @@
 ### Fixes
 * Hex floats: issue an error when the magnitude is non-zero, and the exponent would cause
     overflow. https://crbug.com/tint/1150 https://crbug.com/tint/1166
+* Reject identifiers beginning with an underscore.  https://crbug.com/tint/1179
 
diff --git a/src/reader/wgsl/lexer.cc b/src/reader/wgsl/lexer.cc
index 832fd08..4bcba2f 100644
--- a/src/reader/wgsl/lexer.cc
+++ b/src/reader/wgsl/lexer.cc
@@ -119,15 +119,15 @@
 }
 
 bool Lexer::is_alpha(char ch) const {
-  return std::isalpha(ch) || ch == '_';
+  return std::isalpha(ch);
 }
 
 bool Lexer::is_digit(char ch) const {
   return std::isdigit(ch);
 }
 
-bool Lexer::is_alphanum(char ch) const {
-  return is_alpha(ch) || is_digit(ch);
+bool Lexer::is_alphanum_underscore(char ch) const {
+  return is_alpha(ch) || is_digit(ch) || ch == '_';
 }
 
 bool Lexer::is_hex(char ch) const {
@@ -660,7 +660,7 @@
 }
 
 Token Lexer::try_ident() {
-  // Must begin with an a-zA-Z_
+  // Must begin with an a-zA-Z
   if (!is_alpha(content_->data[pos_])) {
     return {};
   }
@@ -668,7 +668,7 @@
   auto source = begin_source();
 
   auto s = pos_;
-  while (!is_eof() && is_alphanum(content_->data[pos_])) {
+  while (!is_eof() && is_alphanum_underscore(content_->data[pos_])) {
     pos_++;
     location_.column++;
   }
diff --git a/src/reader/wgsl/lexer.h b/src/reader/wgsl/lexer.h
index 9c96bb5..c40ad7e 100644
--- a/src/reader/wgsl/lexer.h
+++ b/src/reader/wgsl/lexer.h
@@ -56,10 +56,19 @@
   void end_source(Source&) const;
 
   bool is_eof() const;
+  /// @param ch a character
+  /// @returns true if 'ch' is an alphabetic character
   bool is_alpha(char ch) const;
+  /// @param ch a character
+  /// @returns true if 'ch' is a decimal digit
   bool is_digit(char ch) const;
+  /// @param ch a character
+  /// @returns true if 'ch' is a hexadecimal digit
   bool is_hex(char ch) const;
-  bool is_alphanum(char ch) const;
+  /// @param ch a character
+  /// @returns true if 'ch' is a digit, an alphabetic character,
+  /// or an underscore.
+  bool is_alphanum_underscore(char ch) const;
   bool matches(size_t pos, const std::string& substr);
 
   /// The source file path
diff --git a/src/reader/wgsl/lexer_test.cc b/src/reader/wgsl/lexer_test.cc
index 2bc0765..24c5298 100644
--- a/src/reader/wgsl/lexer_test.cc
+++ b/src/reader/wgsl/lexer_test.cc
@@ -186,10 +186,26 @@
   EXPECT_EQ(t.source().range.end.column, 1u + strlen(GetParam()));
   EXPECT_EQ(t.to_str(), GetParam());
 }
-INSTANTIATE_TEST_SUITE_P(
-    LexerTest,
-    IdentifierTest,
-    testing::Values("test01", "_test_", "test_", "_test", "_01", "_test01"));
+INSTANTIATE_TEST_SUITE_P(LexerTest,
+                         IdentifierTest,
+                         testing::Values("a",
+                                         "test",
+                                         "test01",
+                                         "test_",
+                                         "test_01",
+                                         "ALLCAPS",
+                                         "MiXeD_CaSe",
+                                         "abcdefghijklmnopqrstuvwxyz",
+                                         "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+                                         "alldigits_0123456789"));
+
+TEST_F(LexerTest, IdentifierTest_DoesNotStartWithUnderscore) {
+  Source::FileContent content("_test");
+  Lexer l("test.wgsl", &content);
+
+  auto t = l.next();
+  EXPECT_FALSE(t.IsIdentifier());
+}
 
 TEST_F(LexerTest, IdentifierTest_DoesNotStartWithNumber) {
   Source::FileContent content("01test");
diff --git a/test/bug/tint/922.wgsl b/test/bug/tint/922.wgsl
index 52bc8e3..09d3876 100644
--- a/test/bug/tint/922.wgsl
+++ b/test/bug/tint/922.wgsl
@@ -57,40 +57,40 @@
     var m1: Mat4x3_;
 
     m1 = m;
-    let _e2: Mat4x3_ = m1;
-    let _e5: Mat4x3_ = m1;
-    let _e8: Mat4x3_ = m1;
-    return vec3<f32>(_e2.mx.x, _e5.my.x, _e8.mz.x);
+    let x_e2: Mat4x3_ = m1;
+    let x_e5: Mat4x3_ = m1;
+    let x_e8: Mat4x3_ = m1;
+    return vec3<f32>(x_e2.mx.x, x_e5.my.x, x_e8.mz.x);
 }
 
 fn Mat4x3GetCol1_(m2: Mat4x3_) -> vec3<f32> {
     var m3: Mat4x3_;
 
     m3 = m2;
-    let _e2: Mat4x3_ = m3;
-    let _e5: Mat4x3_ = m3;
-    let _e8: Mat4x3_ = m3;
-    return vec3<f32>(_e2.mx.y, _e5.my.y, _e8.mz.y);
+    let x_e2: Mat4x3_ = m3;
+    let x_e5: Mat4x3_ = m3;
+    let x_e8: Mat4x3_ = m3;
+    return vec3<f32>(x_e2.mx.y, x_e5.my.y, x_e8.mz.y);
 }
 
 fn Mat4x3GetCol2_(m4: Mat4x3_) -> vec3<f32> {
     var m5: Mat4x3_;
 
     m5 = m4;
-    let _e2: Mat4x3_ = m5;
-    let _e5: Mat4x3_ = m5;
-    let _e8: Mat4x3_ = m5;
-    return vec3<f32>(_e2.mx.z, _e5.my.z, _e8.mz.z);
+    let x_e2: Mat4x3_ = m5;
+    let x_e5: Mat4x3_ = m5;
+    let x_e8: Mat4x3_ = m5;
+    return vec3<f32>(x_e2.mx.z, x_e5.my.z, x_e8.mz.z);
 }
 
 fn Mat4x3GetCol3_(m6: Mat4x3_) -> vec3<f32> {
     var m7: Mat4x3_;
 
     m7 = m6;
-    let _e2: Mat4x3_ = m7;
-    let _e5: Mat4x3_ = m7;
-    let _e8: Mat4x3_ = m7;
-    return vec3<f32>(_e2.mx.w, _e5.my.w, _e8.mz.w);
+    let x_e2: Mat4x3_ = m7;
+    let x_e5: Mat4x3_ = m7;
+    let x_e8: Mat4x3_ = m7;
+    return vec3<f32>(x_e2.mx.w, x_e5.my.w, x_e8.mz.w);
 }
 
 fn Mul(m8: Mat4x4_, v: vec4<f32>) -> vec4<f32> {
@@ -99,15 +99,15 @@
 
     m9 = m8;
     v1 = v;
-    let _e4: Mat4x4_ = m9;
-    let _e6: vec4<f32> = v1;
-    let _e8: Mat4x4_ = m9;
-    let _e10: vec4<f32> = v1;
-    let _e12: Mat4x4_ = m9;
-    let _e14: vec4<f32> = v1;
-    let _e16: Mat4x4_ = m9;
-    let _e18: vec4<f32> = v1;
-    return vec4<f32>(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14), dot(_e16.mw, _e18));
+    let x_e4: Mat4x4_ = m9;
+    let x_e6: vec4<f32> = v1;
+    let x_e8: Mat4x4_ = m9;
+    let x_e10: vec4<f32> = v1;
+    let x_e12: Mat4x4_ = m9;
+    let x_e14: vec4<f32> = v1;
+    let x_e16: Mat4x4_ = m9;
+    let x_e18: vec4<f32> = v1;
+    return vec4<f32>(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18));
 }
 
 fn Mul1(m10: Mat4x3_, v2: vec4<f32>) -> vec3<f32> {
@@ -116,13 +116,13 @@
 
     m11 = m10;
     v3 = v2;
-    let _e4: Mat4x3_ = m11;
-    let _e6: vec4<f32> = v3;
-    let _e8: Mat4x3_ = m11;
-    let _e10: vec4<f32> = v3;
-    let _e12: Mat4x3_ = m11;
-    let _e14: vec4<f32> = v3;
-    return vec3<f32>(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14));
+    let x_e4: Mat4x3_ = m11;
+    let x_e6: vec4<f32> = v3;
+    let x_e8: Mat4x3_ = m11;
+    let x_e10: vec4<f32> = v3;
+    let x_e12: Mat4x3_ = m11;
+    let x_e14: vec4<f32> = v3;
+    return vec3<f32>(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14));
 }
 
 fn Mul2(m12: Mat4x2_, v4: vec4<f32>) -> vec2<f32> {
@@ -131,11 +131,11 @@
 
     m13 = m12;
     v5 = v4;
-    let _e4: Mat4x2_ = m13;
-    let _e6: vec4<f32> = v5;
-    let _e8: Mat4x2_ = m13;
-    let _e10: vec4<f32> = v5;
-    return vec2<f32>(dot(_e4.mx, _e6), dot(_e8.my, _e10));
+    let x_e4: Mat4x2_ = m13;
+    let x_e6: vec4<f32> = v5;
+    let x_e8: Mat4x2_ = m13;
+    let x_e10: vec4<f32> = v5;
+    return vec2<f32>(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10));
 }
 
 fn Mul3(v6: vec3<f32>, m14: Mat4x3_) -> vec4<f32> {
@@ -144,143 +144,143 @@
 
     v7 = v6;
     m15 = m14;
-    let _e5: Mat4x3_ = m15;
-    let _e6: vec3<f32> = Mat4x3GetCol0_(_e5);
-    let _e7: vec3<f32> = v7;
-    let _e10: Mat4x3_ = m15;
-    let _e11: vec3<f32> = Mat4x3GetCol1_(_e10);
-    let _e12: vec3<f32> = v7;
-    let _e15: Mat4x3_ = m15;
-    let _e16: vec3<f32> = Mat4x3GetCol2_(_e15);
-    let _e17: vec3<f32> = v7;
-    let _e20: Mat4x3_ = m15;
-    let _e21: vec3<f32> = Mat4x3GetCol3_(_e20);
-    let _e22: vec3<f32> = v7;
-    return vec4<f32>(dot(_e6, _e7), dot(_e11, _e12), dot(_e16, _e17), dot(_e21, _e22));
+    let x_e5: Mat4x3_ = m15;
+    let x_e6: vec3<f32> = Mat4x3GetCol0_(x_e5);
+    let x_e7: vec3<f32> = v7;
+    let x_e10: Mat4x3_ = m15;
+    let x_e11: vec3<f32> = Mat4x3GetCol1_(x_e10);
+    let x_e12: vec3<f32> = v7;
+    let x_e15: Mat4x3_ = m15;
+    let x_e16: vec3<f32> = Mat4x3GetCol2_(x_e15);
+    let x_e17: vec3<f32> = v7;
+    let x_e20: Mat4x3_ = m15;
+    let x_e21: vec3<f32> = Mat4x3GetCol3_(x_e20);
+    let x_e22: vec3<f32> = v7;
+    return vec4<f32>(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, x_e22));
 }
 
-fn _Mat4x4_(n: f32) -> Mat4x4_ {
+fn x_Mat4x4_(n: f32) -> Mat4x4_ {
     var n1: f32;
     var o: Mat4x4_;
 
     n1 = n;
-    let _e4: f32 = n1;
-    o.mx = vec4<f32>(_e4, 0.0, 0.0, 0.0);
-    let _e11: f32 = n1;
-    o.my = vec4<f32>(0.0, _e11, 0.0, 0.0);
-    let _e18: f32 = n1;
-    o.mz = vec4<f32>(0.0, 0.0, _e18, 0.0);
-    let _e25: f32 = n1;
-    o.mw = vec4<f32>(0.0, 0.0, 0.0, _e25);
-    let _e27: Mat4x4_ = o;
-    return _e27;
+    let x_e4: f32 = n1;
+    o.mx = vec4<f32>(x_e4, 0.0, 0.0, 0.0);
+    let x_e11: f32 = n1;
+    o.my = vec4<f32>(0.0, x_e11, 0.0, 0.0);
+    let x_e18: f32 = n1;
+    o.mz = vec4<f32>(0.0, 0.0, x_e18, 0.0);
+    let x_e25: f32 = n1;
+    o.mw = vec4<f32>(0.0, 0.0, 0.0, x_e25);
+    let x_e27: Mat4x4_ = o;
+    return x_e27;
 }
 
-fn _Mat4x4_1(m16: Mat4x3_) -> Mat4x4_ {
+fn x_Mat4x4_1(m16: Mat4x3_) -> Mat4x4_ {
     var m17: Mat4x3_;
     var o1: Mat4x4_;
 
     m17 = m16;
-    let _e4: Mat4x4_ = _Mat4x4_(1.0);
-    o1 = _e4;
-    let _e7: Mat4x3_ = m17;
-    o1.mx = _e7.mx;
-    let _e10: Mat4x3_ = m17;
-    o1.my = _e10.my;
-    let _e13: Mat4x3_ = m17;
-    o1.mz = _e13.mz;
-    let _e15: Mat4x4_ = o1;
-    return _e15;
+    let x_e4: Mat4x4_ = x_Mat4x4_(1.0);
+    o1 = x_e4;
+    let x_e7: Mat4x3_ = m17;
+    o1.mx = x_e7.mx;
+    let x_e10: Mat4x3_ = m17;
+    o1.my = x_e10.my;
+    let x_e13: Mat4x3_ = m17;
+    o1.mz = x_e13.mz;
+    let x_e15: Mat4x4_ = o1;
+    return x_e15;
 }
 
-fn _Mat4x4_2(m18: Mat4x2_) -> Mat4x4_ {
+fn x_Mat4x4_2(m18: Mat4x2_) -> Mat4x4_ {
     var m19: Mat4x2_;
     var o2: Mat4x4_;
 
     m19 = m18;
-    let _e4: Mat4x4_ = _Mat4x4_(1.0);
-    o2 = _e4;
-    let _e7: Mat4x2_ = m19;
-    o2.mx = _e7.mx;
-    let _e10: Mat4x2_ = m19;
-    o2.my = _e10.my;
-    let _e12: Mat4x4_ = o2;
-    return _e12;
+    let x_e4: Mat4x4_ = x_Mat4x4_(1.0);
+    o2 = x_e4;
+    let x_e7: Mat4x2_ = m19;
+    o2.mx = x_e7.mx;
+    let x_e10: Mat4x2_ = m19;
+    o2.my = x_e10.my;
+    let x_e12: Mat4x4_ = o2;
+    return x_e12;
 }
 
-fn _Mat4x3_(n2: f32) -> Mat4x3_ {
+fn x_Mat4x3_(n2: f32) -> Mat4x3_ {
     var n3: f32;
     var o3: Mat4x3_;
 
     n3 = n2;
-    let _e4: f32 = n3;
-    o3.mx = vec4<f32>(_e4, 0.0, 0.0, 0.0);
-    let _e11: f32 = n3;
-    o3.my = vec4<f32>(0.0, _e11, 0.0, 0.0);
-    let _e18: f32 = n3;
-    o3.mz = vec4<f32>(0.0, 0.0, _e18, 0.0);
-    let _e21: Mat4x3_ = o3;
-    return _e21;
+    let x_e4: f32 = n3;
+    o3.mx = vec4<f32>(x_e4, 0.0, 0.0, 0.0);
+    let x_e11: f32 = n3;
+    o3.my = vec4<f32>(0.0, x_e11, 0.0, 0.0);
+    let x_e18: f32 = n3;
+    o3.mz = vec4<f32>(0.0, 0.0, x_e18, 0.0);
+    let x_e21: Mat4x3_ = o3;
+    return x_e21;
 }
 
-fn _Mat4x3_1(m20: Mat4x4_) -> Mat4x3_ {
+fn x_Mat4x3_1(m20: Mat4x4_) -> Mat4x3_ {
     var m21: Mat4x4_;
     var o4: Mat4x3_;
 
     m21 = m20;
-    let _e4: Mat4x4_ = m21;
-    o4.mx = _e4.mx;
-    let _e7: Mat4x4_ = m21;
-    o4.my = _e7.my;
-    let _e10: Mat4x4_ = m21;
-    o4.mz = _e10.mz;
-    let _e12: Mat4x3_ = o4;
-    return _e12;
+    let x_e4: Mat4x4_ = m21;
+    o4.mx = x_e4.mx;
+    let x_e7: Mat4x4_ = m21;
+    o4.my = x_e7.my;
+    let x_e10: Mat4x4_ = m21;
+    o4.mz = x_e10.mz;
+    let x_e12: Mat4x3_ = o4;
+    return x_e12;
 }
 
 fn main1() {
     var t_PosMtx: Mat4x3_;
     var t_TexSpaceCoord: vec2<f32>;
 
-    let _e15: f32 = a_PosMtxIdx1;
-    let _e18: Mat4x3_ = global2.u_PosMtx[i32(_e15)];
-    t_PosMtx = _e18;
-    let _e23: Mat4x3_ = t_PosMtx;
-    let _e24: Mat4x4_ = _Mat4x4_1(_e23);
-    let _e25: vec3<f32> = a_Position1;
-    let _e29: Mat4x3_ = t_PosMtx;
-    let _e30: Mat4x4_ = _Mat4x4_1(_e29);
-    let _e31: vec3<f32> = a_Position1;
-    let _e34: vec4<f32> = Mul(_e30, vec4<f32>(_e31, 1.0));
-    let _e35: Mat4x4_ = global.u_Projection;
-    let _e37: Mat4x3_ = t_PosMtx;
-    let _e38: Mat4x4_ = _Mat4x4_1(_e37);
-    let _e39: vec3<f32> = a_Position1;
-    let _e43: Mat4x3_ = t_PosMtx;
-    let _e44: Mat4x4_ = _Mat4x4_1(_e43);
-    let _e45: vec3<f32> = a_Position1;
-    let _e48: vec4<f32> = Mul(_e44, vec4<f32>(_e45, 1.0));
-    let _e49: vec4<f32> = Mul(_e35, _e48);
-    gl_Position = _e49;
-    let _e50: vec4<f32> = a_Color1;
-    v_Color = _e50;
-    let _e52: vec4<f32> = global1.u_Misc0_;
-    if ((_e52.x == 2.0)) {
+    let x_e15: f32 = a_PosMtxIdx1;
+    let x_e18: Mat4x3_ = global2.u_PosMtx[i32(x_e15)];
+    t_PosMtx = x_e18;
+    let x_e23: Mat4x3_ = t_PosMtx;
+    let x_e24: Mat4x4_ = x_Mat4x4_1(x_e23);
+    let x_e25: vec3<f32> = a_Position1;
+    let x_e29: Mat4x3_ = t_PosMtx;
+    let x_e30: Mat4x4_ = x_Mat4x4_1(x_e29);
+    let x_e31: vec3<f32> = a_Position1;
+    let x_e34: vec4<f32> = Mul(x_e30, vec4<f32>(x_e31, 1.0));
+    let x_e35: Mat4x4_ = global.u_Projection;
+    let x_e37: Mat4x3_ = t_PosMtx;
+    let x_e38: Mat4x4_ = x_Mat4x4_1(x_e37);
+    let x_e39: vec3<f32> = a_Position1;
+    let x_e43: Mat4x3_ = t_PosMtx;
+    let x_e44: Mat4x4_ = x_Mat4x4_1(x_e43);
+    let x_e45: vec3<f32> = a_Position1;
+    let x_e48: vec4<f32> = Mul(x_e44, vec4<f32>(x_e45, 1.0));
+    let x_e49: vec4<f32> = Mul(x_e35, x_e48);
+    gl_Position = x_e49;
+    let x_e50: vec4<f32> = a_Color1;
+    v_Color = x_e50;
+    let x_e52: vec4<f32> = global1.u_Misc0_;
+    if ((x_e52.x == 2.0)) {
         {
-            let _e59: vec3<f32> = a_Normal1;
-            let _e64: Mat4x2_ = global1.u_TexMtx[0];
-            let _e65: vec3<f32> = a_Normal1;
-            let _e68: vec2<f32> = Mul2(_e64, vec4<f32>(_e65, 1.0));
-            v_TexCoord = _e68.xy;
+            let x_e59: vec3<f32> = a_Normal1;
+            let x_e64: Mat4x2_ = global1.u_TexMtx[0];
+            let x_e65: vec3<f32> = a_Normal1;
+            let x_e68: vec2<f32> = Mul2(x_e64, vec4<f32>(x_e65, 1.0));
+            v_TexCoord = x_e68.xy;
             return;
         }
     } else {
         {
-            let _e73: vec2<f32> = a_UV1;
-            let _e79: Mat4x2_ = global1.u_TexMtx[0];
-            let _e80: vec2<f32> = a_UV1;
-            let _e84: vec2<f32> = Mul2(_e79, vec4<f32>(_e80, 1.0, 1.0));
-            v_TexCoord = _e84.xy;
+            let x_e73: vec2<f32> = a_UV1;
+            let x_e79: Mat4x2_ = global1.u_TexMtx[0];
+            let x_e80: vec2<f32> = a_UV1;
+            let x_e84: vec2<f32> = Mul2(x_e79, vec4<f32>(x_e80, 1.0, 1.0));
+            v_TexCoord = x_e84.xy;
             return;
         }
     }
@@ -294,8 +294,8 @@
     a_Normal1 = a_Normal;
     a_PosMtxIdx1 = a_PosMtxIdx;
     main1();
-    let _e11: vec4<f32> = v_Color;
-    let _e13: vec2<f32> = v_TexCoord;
-    let _e15: vec4<f32> = gl_Position;
-    return VertexOutput(_e11, _e13, _e15);
-}
\ No newline at end of file
+    let x_e11: vec4<f32> = v_Color;
+    let x_e13: vec2<f32> = v_TexCoord;
+    let x_e15: vec4<f32> = gl_Position;
+    return VertexOutput(x_e11, x_e13, x_e15);
+}
diff --git a/test/bug/tint/922.wgsl.expected.hlsl b/test/bug/tint/922.wgsl.expected.hlsl
index ebd6476..7043767 100644
--- a/test/bug/tint/922.wgsl.expected.hlsl
+++ b/test/bug/tint/922.wgsl.expected.hlsl
@@ -90,17 +90,17 @@
   Mat4x3_ m15 = (Mat4x3_)0;
   v7 = v6;
   m15 = m14;
-  const float3 _e6 = Mat4x3GetCol0_(m15);
-  const float3 _e7 = v7;
-  const float3 _e11 = Mat4x3GetCol1_(m15);
-  const float3 _e12 = v7;
-  const float3 _e16 = Mat4x3GetCol2_(m15);
-  const float3 _e17 = v7;
-  const float3 _e21 = Mat4x3GetCol3_(m15);
-  return float4(dot(_e6, _e7), dot(_e11, _e12), dot(_e16, _e17), dot(_e21, v7));
+  const float3 x_e6 = Mat4x3GetCol0_(m15);
+  const float3 x_e7 = v7;
+  const float3 x_e11 = Mat4x3GetCol1_(m15);
+  const float3 x_e12 = v7;
+  const float3 x_e16 = Mat4x3GetCol2_(m15);
+  const float3 x_e17 = v7;
+  const float3 x_e21 = Mat4x3GetCol3_(m15);
+  return float4(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, v7));
 }
 
-Mat4x4_ _Mat4x4_(float n) {
+Mat4x4_ x_Mat4x4_(float n) {
   float n1 = 0.0f;
   Mat4x4_ o = (Mat4x4_)0;
   n1 = n;
@@ -111,30 +111,30 @@
   return o;
 }
 
-Mat4x4_ _Mat4x4_1(Mat4x3_ m16) {
+Mat4x4_ x_Mat4x4_1(Mat4x3_ m16) {
   Mat4x3_ m17 = (Mat4x3_)0;
   Mat4x4_ o1 = (Mat4x4_)0;
   m17 = m16;
-  const Mat4x4_ _e4 = _Mat4x4_(1.0f);
-  o1 = _e4;
+  const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
+  o1 = x_e4;
   o1.mx = m17.mx;
   o1.my = m17.my;
   o1.mz = m17.mz;
   return o1;
 }
 
-Mat4x4_ _Mat4x4_2(Mat4x2_ m18) {
+Mat4x4_ x_Mat4x4_2(Mat4x2_ m18) {
   Mat4x2_ m19 = (Mat4x2_)0;
   Mat4x4_ o2 = (Mat4x4_)0;
   m19 = m18;
-  const Mat4x4_ _e4 = _Mat4x4_(1.0f);
-  o2 = _e4;
+  const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
+  o2 = x_e4;
   o2.mx = m19.mx;
   o2.my = m19.my;
   return o2;
 }
 
-Mat4x3_ _Mat4x3_(float n2) {
+Mat4x3_ x_Mat4x3_(float n2) {
   float n3 = 0.0f;
   Mat4x3_ o3 = (Mat4x3_)0;
   n3 = n2;
@@ -144,7 +144,7 @@
   return o3;
 }
 
-Mat4x3_ _Mat4x3_1(Mat4x4_ m20) {
+Mat4x3_ x_Mat4x3_1(Mat4x4_ m20) {
   Mat4x4_ m21 = (Mat4x4_)0;
   Mat4x3_ o4 = (Mat4x3_)0;
   m21 = m20;
@@ -181,35 +181,35 @@
 void main1() {
   Mat4x3_ t_PosMtx = (Mat4x3_)0;
   float2 t_TexSpaceCoord = float2(0.0f, 0.0f);
-  const Mat4x3_ _e18 = tint_symbol_3(global2, (48u * uint(int(a_PosMtxIdx1))));
-  t_PosMtx = _e18;
-  const Mat4x4_ _e24 = _Mat4x4_1(t_PosMtx);
-  const float3 _e25 = a_Position1;
-  const Mat4x4_ _e30 = _Mat4x4_1(t_PosMtx);
-  const float4 _e34 = Mul(_e30, float4(a_Position1, 1.0f));
-  const Mat4x4_ _e35 = tint_symbol_5(global, 0u);
-  const Mat4x4_ _e38 = _Mat4x4_1(t_PosMtx);
-  const float3 _e39 = a_Position1;
-  const Mat4x4_ _e44 = _Mat4x4_1(t_PosMtx);
-  const float4 _e48 = Mul(_e44, float4(a_Position1, 1.0f));
-  const float4 _e49 = Mul(_e35, _e48);
-  gl_Position = _e49;
+  const Mat4x3_ x_e18 = tint_symbol_3(global2, (48u * uint(int(a_PosMtxIdx1))));
+  t_PosMtx = x_e18;
+  const Mat4x4_ x_e24 = x_Mat4x4_1(t_PosMtx);
+  const float3 x_e25 = a_Position1;
+  const Mat4x4_ x_e30 = x_Mat4x4_1(t_PosMtx);
+  const float4 x_e34 = Mul(x_e30, float4(a_Position1, 1.0f));
+  const Mat4x4_ x_e35 = tint_symbol_5(global, 0u);
+  const Mat4x4_ x_e38 = x_Mat4x4_1(t_PosMtx);
+  const float3 x_e39 = a_Position1;
+  const Mat4x4_ x_e44 = x_Mat4x4_1(t_PosMtx);
+  const float4 x_e48 = Mul(x_e44, float4(a_Position1, 1.0f));
+  const float4 x_e49 = Mul(x_e35, x_e48);
+  gl_Position = x_e49;
   v_Color = a_Color1;
-  const float4 _e52 = asfloat(global1[2]);
-  if ((_e52.x == 2.0f)) {
+  const float4 x_e52 = asfloat(global1[2]);
+  if ((x_e52.x == 2.0f)) {
     {
-      const float3 _e59 = a_Normal1;
-      const Mat4x2_ _e64 = tint_symbol_8(global1, (32u * uint(0)));
-      const float2 _e68 = Mul2(_e64, float4(a_Normal1, 1.0f));
-      v_TexCoord = _e68.xy;
+      const float3 x_e59 = a_Normal1;
+      const Mat4x2_ x_e64 = tint_symbol_8(global1, (32u * uint(0)));
+      const float2 x_e68 = Mul2(x_e64, float4(a_Normal1, 1.0f));
+      v_TexCoord = x_e68.xy;
       return;
     }
   } else {
     {
-      const float2 _e73 = a_UV1;
-      const Mat4x2_ _e79 = tint_symbol_8(global1, (32u * uint(0)));
-      const float2 _e84 = Mul2(_e79, float4(a_UV1, 1.0f, 1.0f));
-      v_TexCoord = _e84.xy;
+      const float2 x_e73 = a_UV1;
+      const Mat4x2_ x_e79 = tint_symbol_8(global1, (32u * uint(0)));
+      const float2 x_e84 = Mul2(x_e79, float4(a_UV1, 1.0f, 1.0f));
+      v_TexCoord = x_e84.xy;
       return;
     }
   }
diff --git a/test/bug/tint/922.wgsl.expected.msl b/test/bug/tint/922.wgsl.expected.msl
index 58763e8..e9b7764 100644
--- a/test/bug/tint/922.wgsl.expected.msl
+++ b/test/bug/tint/922.wgsl.expected.msl
@@ -53,37 +53,37 @@
 float3 Mat4x3GetCol0_(Mat4x3_ m) {
   Mat4x3_ m1 = {};
   m1 = m;
-  Mat4x3_ const _e2 = m1;
-  Mat4x3_ const _e5 = m1;
-  Mat4x3_ const _e8 = m1;
-  return float3(_e2.mx.x, _e5.my.x, _e8.mz.x);
+  Mat4x3_ const x_e2 = m1;
+  Mat4x3_ const x_e5 = m1;
+  Mat4x3_ const x_e8 = m1;
+  return float3(x_e2.mx.x, x_e5.my.x, x_e8.mz.x);
 }
 
 float3 Mat4x3GetCol1_(Mat4x3_ m2) {
   Mat4x3_ m3 = {};
   m3 = m2;
-  Mat4x3_ const _e2 = m3;
-  Mat4x3_ const _e5 = m3;
-  Mat4x3_ const _e8 = m3;
-  return float3(_e2.mx.y, _e5.my.y, _e8.mz.y);
+  Mat4x3_ const x_e2 = m3;
+  Mat4x3_ const x_e5 = m3;
+  Mat4x3_ const x_e8 = m3;
+  return float3(x_e2.mx.y, x_e5.my.y, x_e8.mz.y);
 }
 
 float3 Mat4x3GetCol2_(Mat4x3_ m4) {
   Mat4x3_ m5 = {};
   m5 = m4;
-  Mat4x3_ const _e2 = m5;
-  Mat4x3_ const _e5 = m5;
-  Mat4x3_ const _e8 = m5;
-  return float3(_e2.mx.z, _e5.my.z, _e8.mz.z);
+  Mat4x3_ const x_e2 = m5;
+  Mat4x3_ const x_e5 = m5;
+  Mat4x3_ const x_e8 = m5;
+  return float3(x_e2.mx.z, x_e5.my.z, x_e8.mz.z);
 }
 
 float3 Mat4x3GetCol3_(Mat4x3_ m6) {
   Mat4x3_ m7 = {};
   m7 = m6;
-  Mat4x3_ const _e2 = m7;
-  Mat4x3_ const _e5 = m7;
-  Mat4x3_ const _e8 = m7;
-  return float3(_e2.mx.w, _e5.my.w, _e8.mz.w);
+  Mat4x3_ const x_e2 = m7;
+  Mat4x3_ const x_e5 = m7;
+  Mat4x3_ const x_e8 = m7;
+  return float3(x_e2.mx.w, x_e5.my.w, x_e8.mz.w);
 }
 
 float4 Mul(Mat4x4_ m8, float4 v) {
@@ -91,15 +91,15 @@
   float4 v1 = 0.0f;
   m9 = m8;
   v1 = v;
-  Mat4x4_ const _e4 = m9;
-  float4 const _e6 = v1;
-  Mat4x4_ const _e8 = m9;
-  float4 const _e10 = v1;
-  Mat4x4_ const _e12 = m9;
-  float4 const _e14 = v1;
-  Mat4x4_ const _e16 = m9;
-  float4 const _e18 = v1;
-  return float4(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14), dot(_e16.mw, _e18));
+  Mat4x4_ const x_e4 = m9;
+  float4 const x_e6 = v1;
+  Mat4x4_ const x_e8 = m9;
+  float4 const x_e10 = v1;
+  Mat4x4_ const x_e12 = m9;
+  float4 const x_e14 = v1;
+  Mat4x4_ const x_e16 = m9;
+  float4 const x_e18 = v1;
+  return float4(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18));
 }
 
 float3 Mul1(Mat4x3_ m10, float4 v2) {
@@ -107,13 +107,13 @@
   float4 v3 = 0.0f;
   m11 = m10;
   v3 = v2;
-  Mat4x3_ const _e4 = m11;
-  float4 const _e6 = v3;
-  Mat4x3_ const _e8 = m11;
-  float4 const _e10 = v3;
-  Mat4x3_ const _e12 = m11;
-  float4 const _e14 = v3;
-  return float3(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14));
+  Mat4x3_ const x_e4 = m11;
+  float4 const x_e6 = v3;
+  Mat4x3_ const x_e8 = m11;
+  float4 const x_e10 = v3;
+  Mat4x3_ const x_e12 = m11;
+  float4 const x_e14 = v3;
+  return float3(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14));
 }
 
 float2 Mul2(Mat4x2_ m12, float4 v4) {
@@ -121,11 +121,11 @@
   float4 v5 = 0.0f;
   m13 = m12;
   v5 = v4;
-  Mat4x2_ const _e4 = m13;
-  float4 const _e6 = v5;
-  Mat4x2_ const _e8 = m13;
-  float4 const _e10 = v5;
-  return float2(dot(_e4.mx, _e6), dot(_e8.my, _e10));
+  Mat4x2_ const x_e4 = m13;
+  float4 const x_e6 = v5;
+  Mat4x2_ const x_e8 = m13;
+  float4 const x_e10 = v5;
+  return float2(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10));
 }
 
 float4 Mul3(float3 v6, Mat4x3_ m14) {
@@ -133,137 +133,137 @@
   Mat4x3_ m15 = {};
   v7 = v6;
   m15 = m14;
-  Mat4x3_ const _e5 = m15;
-  float3 const _e6 = Mat4x3GetCol0_(_e5);
-  float3 const _e7 = v7;
-  Mat4x3_ const _e10 = m15;
-  float3 const _e11 = Mat4x3GetCol1_(_e10);
-  float3 const _e12 = v7;
-  Mat4x3_ const _e15 = m15;
-  float3 const _e16 = Mat4x3GetCol2_(_e15);
-  float3 const _e17 = v7;
-  Mat4x3_ const _e20 = m15;
-  float3 const _e21 = Mat4x3GetCol3_(_e20);
-  float3 const _e22 = v7;
-  return float4(dot(_e6, _e7), dot(_e11, _e12), dot(_e16, _e17), dot(_e21, _e22));
+  Mat4x3_ const x_e5 = m15;
+  float3 const x_e6 = Mat4x3GetCol0_(x_e5);
+  float3 const x_e7 = v7;
+  Mat4x3_ const x_e10 = m15;
+  float3 const x_e11 = Mat4x3GetCol1_(x_e10);
+  float3 const x_e12 = v7;
+  Mat4x3_ const x_e15 = m15;
+  float3 const x_e16 = Mat4x3GetCol2_(x_e15);
+  float3 const x_e17 = v7;
+  Mat4x3_ const x_e20 = m15;
+  float3 const x_e21 = Mat4x3GetCol3_(x_e20);
+  float3 const x_e22 = v7;
+  return float4(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, x_e22));
 }
 
-Mat4x4_ _Mat4x4_(float n) {
+Mat4x4_ x_Mat4x4_(float n) {
   float n1 = 0.0f;
   Mat4x4_ o = {};
   n1 = n;
-  float const _e4 = n1;
-  o.mx = float4(_e4, 0.0f, 0.0f, 0.0f);
-  float const _e11 = n1;
-  o.my = float4(0.0f, _e11, 0.0f, 0.0f);
-  float const _e18 = n1;
-  o.mz = float4(0.0f, 0.0f, _e18, 0.0f);
-  float const _e25 = n1;
-  o.mw = float4(0.0f, 0.0f, 0.0f, _e25);
-  Mat4x4_ const _e27 = o;
-  return _e27;
+  float const x_e4 = n1;
+  o.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
+  float const x_e11 = n1;
+  o.my = float4(0.0f, x_e11, 0.0f, 0.0f);
+  float const x_e18 = n1;
+  o.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
+  float const x_e25 = n1;
+  o.mw = float4(0.0f, 0.0f, 0.0f, x_e25);
+  Mat4x4_ const x_e27 = o;
+  return x_e27;
 }
 
-Mat4x4_ _Mat4x4_1(Mat4x3_ m16) {
+Mat4x4_ x_Mat4x4_1(Mat4x3_ m16) {
   Mat4x3_ m17 = {};
   Mat4x4_ o1 = {};
   m17 = m16;
-  Mat4x4_ const _e4 = _Mat4x4_(1.0f);
-  o1 = _e4;
-  Mat4x3_ const _e7 = m17;
-  o1.mx = _e7.mx;
-  Mat4x3_ const _e10 = m17;
-  o1.my = _e10.my;
-  Mat4x3_ const _e13 = m17;
-  o1.mz = _e13.mz;
-  Mat4x4_ const _e15 = o1;
-  return _e15;
+  Mat4x4_ const x_e4 = x_Mat4x4_(1.0f);
+  o1 = x_e4;
+  Mat4x3_ const x_e7 = m17;
+  o1.mx = x_e7.mx;
+  Mat4x3_ const x_e10 = m17;
+  o1.my = x_e10.my;
+  Mat4x3_ const x_e13 = m17;
+  o1.mz = x_e13.mz;
+  Mat4x4_ const x_e15 = o1;
+  return x_e15;
 }
 
-Mat4x4_ _Mat4x4_2(Mat4x2_ m18) {
+Mat4x4_ x_Mat4x4_2(Mat4x2_ m18) {
   Mat4x2_ m19 = {};
   Mat4x4_ o2 = {};
   m19 = m18;
-  Mat4x4_ const _e4 = _Mat4x4_(1.0f);
-  o2 = _e4;
-  Mat4x2_ const _e7 = m19;
-  o2.mx = _e7.mx;
-  Mat4x2_ const _e10 = m19;
-  o2.my = _e10.my;
-  Mat4x4_ const _e12 = o2;
-  return _e12;
+  Mat4x4_ const x_e4 = x_Mat4x4_(1.0f);
+  o2 = x_e4;
+  Mat4x2_ const x_e7 = m19;
+  o2.mx = x_e7.mx;
+  Mat4x2_ const x_e10 = m19;
+  o2.my = x_e10.my;
+  Mat4x4_ const x_e12 = o2;
+  return x_e12;
 }
 
-Mat4x3_ _Mat4x3_(float n2) {
+Mat4x3_ x_Mat4x3_(float n2) {
   float n3 = 0.0f;
   Mat4x3_ o3 = {};
   n3 = n2;
-  float const _e4 = n3;
-  o3.mx = float4(_e4, 0.0f, 0.0f, 0.0f);
-  float const _e11 = n3;
-  o3.my = float4(0.0f, _e11, 0.0f, 0.0f);
-  float const _e18 = n3;
-  o3.mz = float4(0.0f, 0.0f, _e18, 0.0f);
-  Mat4x3_ const _e21 = o3;
-  return _e21;
+  float const x_e4 = n3;
+  o3.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
+  float const x_e11 = n3;
+  o3.my = float4(0.0f, x_e11, 0.0f, 0.0f);
+  float const x_e18 = n3;
+  o3.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
+  Mat4x3_ const x_e21 = o3;
+  return x_e21;
 }
 
-Mat4x3_ _Mat4x3_1(Mat4x4_ m20) {
+Mat4x3_ x_Mat4x3_1(Mat4x4_ m20) {
   Mat4x4_ m21 = {};
   Mat4x3_ o4 = {};
   m21 = m20;
-  Mat4x4_ const _e4 = m21;
-  o4.mx = _e4.mx;
-  Mat4x4_ const _e7 = m21;
-  o4.my = _e7.my;
-  Mat4x4_ const _e10 = m21;
-  o4.mz = _e10.mz;
-  Mat4x3_ const _e12 = o4;
-  return _e12;
+  Mat4x4_ const x_e4 = m21;
+  o4.mx = x_e4.mx;
+  Mat4x4_ const x_e7 = m21;
+  o4.my = x_e7.my;
+  Mat4x4_ const x_e10 = m21;
+  o4.mz = x_e10.mz;
+  Mat4x3_ const x_e12 = o4;
+  return x_e12;
 }
 
 void main1(constant ub_PacketParams& global2, constant ub_SceneParams& global, constant ub_MaterialParams& global1, thread float* const tint_symbol_5, thread float3* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread float3* const tint_symbol_10, thread float2* const tint_symbol_11, thread float2* const tint_symbol_12) {
   Mat4x3_ t_PosMtx = {};
   float2 t_TexSpaceCoord = 0.0f;
-  float const _e15 = *(tint_symbol_5);
-  Mat4x3_ const _e18 = global2.u_PosMtx.arr[int(_e15)];
-  t_PosMtx = _e18;
-  Mat4x3_ const _e23 = t_PosMtx;
-  Mat4x4_ const _e24 = _Mat4x4_1(_e23);
-  float3 const _e25 = *(tint_symbol_6);
-  Mat4x3_ const _e29 = t_PosMtx;
-  Mat4x4_ const _e30 = _Mat4x4_1(_e29);
-  float3 const _e31 = *(tint_symbol_6);
-  float4 const _e34 = Mul(_e30, float4(_e31, 1.0f));
-  Mat4x4_ const _e35 = global.u_Projection;
-  Mat4x3_ const _e37 = t_PosMtx;
-  Mat4x4_ const _e38 = _Mat4x4_1(_e37);
-  float3 const _e39 = *(tint_symbol_6);
-  Mat4x3_ const _e43 = t_PosMtx;
-  Mat4x4_ const _e44 = _Mat4x4_1(_e43);
-  float3 const _e45 = *(tint_symbol_6);
-  float4 const _e48 = Mul(_e44, float4(_e45, 1.0f));
-  float4 const _e49 = Mul(_e35, _e48);
-  *(tint_symbol_7) = _e49;
-  float4 const _e50 = *(tint_symbol_8);
-  *(tint_symbol_9) = _e50;
-  float4 const _e52 = global1.u_Misc0_;
-  if ((_e52.x == 2.0f)) {
+  float const x_e15 = *(tint_symbol_5);
+  Mat4x3_ const x_e18 = global2.u_PosMtx.arr[int(x_e15)];
+  t_PosMtx = x_e18;
+  Mat4x3_ const x_e23 = t_PosMtx;
+  Mat4x4_ const x_e24 = x_Mat4x4_1(x_e23);
+  float3 const x_e25 = *(tint_symbol_6);
+  Mat4x3_ const x_e29 = t_PosMtx;
+  Mat4x4_ const x_e30 = x_Mat4x4_1(x_e29);
+  float3 const x_e31 = *(tint_symbol_6);
+  float4 const x_e34 = Mul(x_e30, float4(x_e31, 1.0f));
+  Mat4x4_ const x_e35 = global.u_Projection;
+  Mat4x3_ const x_e37 = t_PosMtx;
+  Mat4x4_ const x_e38 = x_Mat4x4_1(x_e37);
+  float3 const x_e39 = *(tint_symbol_6);
+  Mat4x3_ const x_e43 = t_PosMtx;
+  Mat4x4_ const x_e44 = x_Mat4x4_1(x_e43);
+  float3 const x_e45 = *(tint_symbol_6);
+  float4 const x_e48 = Mul(x_e44, float4(x_e45, 1.0f));
+  float4 const x_e49 = Mul(x_e35, x_e48);
+  *(tint_symbol_7) = x_e49;
+  float4 const x_e50 = *(tint_symbol_8);
+  *(tint_symbol_9) = x_e50;
+  float4 const x_e52 = global1.u_Misc0_;
+  if ((x_e52.x == 2.0f)) {
     {
-      float3 const _e59 = *(tint_symbol_10);
-      Mat4x2_ const _e64 = global1.u_TexMtx.arr[0];
-      float3 const _e65 = *(tint_symbol_10);
-      float2 const _e68 = Mul2(_e64, float4(_e65, 1.0f));
-      *(tint_symbol_11) = _e68.xy;
+      float3 const x_e59 = *(tint_symbol_10);
+      Mat4x2_ const x_e64 = global1.u_TexMtx.arr[0];
+      float3 const x_e65 = *(tint_symbol_10);
+      float2 const x_e68 = Mul2(x_e64, float4(x_e65, 1.0f));
+      *(tint_symbol_11) = x_e68.xy;
       return;
     }
   } else {
     {
-      float2 const _e73 = *(tint_symbol_12);
-      Mat4x2_ const _e79 = global1.u_TexMtx.arr[0];
-      float2 const _e80 = *(tint_symbol_12);
-      float2 const _e84 = Mul2(_e79, float4(_e80, 1.0f, 1.0f));
-      *(tint_symbol_11) = _e84.xy;
+      float2 const x_e73 = *(tint_symbol_12);
+      Mat4x2_ const x_e79 = global1.u_TexMtx.arr[0];
+      float2 const x_e80 = *(tint_symbol_12);
+      float2 const x_e84 = Mul2(x_e79, float4(x_e80, 1.0f, 1.0f));
+      *(tint_symbol_11) = x_e84.xy;
       return;
     }
   }
@@ -276,10 +276,10 @@
   *(tint_symbol_16) = a_Normal;
   *(tint_symbol_17) = a_PosMtxIdx;
   main1(global2, global, global1, tint_symbol_17, tint_symbol_13, tint_symbol_18, tint_symbol_15, tint_symbol_19, tint_symbol_16, tint_symbol_20, tint_symbol_14);
-  float4 const _e11 = *(tint_symbol_19);
-  float2 const _e13 = *(tint_symbol_20);
-  float4 const _e15 = *(tint_symbol_18);
-  VertexOutput const tint_symbol_4 = {.v_Color=_e11, .v_TexCoord=_e13, .member=_e15};
+  float4 const x_e11 = *(tint_symbol_19);
+  float2 const x_e13 = *(tint_symbol_20);
+  float4 const x_e15 = *(tint_symbol_18);
+  VertexOutput const tint_symbol_4 = {.v_Color=x_e11, .v_TexCoord=x_e13, .member=x_e15};
   return tint_symbol_4;
 }
 
diff --git a/test/bug/tint/922.wgsl.expected.spvasm b/test/bug/tint/922.wgsl.expected.spvasm
index f81704a..bc29396 100644
--- a/test/bug/tint/922.wgsl.expected.spvasm
+++ b/test/bug/tint/922.wgsl.expected.spvasm
@@ -77,23 +77,23 @@
                OpName %m14 "m14"
                OpName %v7 "v7"
                OpName %m15 "m15"
-               OpName %_Mat4x4_ "_Mat4x4_"
+               OpName %x_Mat4x4_ "x_Mat4x4_"
                OpName %n "n"
                OpName %n1 "n1"
                OpName %o "o"
-               OpName %_Mat4x4_1 "_Mat4x4_1"
+               OpName %x_Mat4x4_1 "x_Mat4x4_1"
                OpName %m16 "m16"
                OpName %m17 "m17"
                OpName %o1 "o1"
-               OpName %_Mat4x4_2 "_Mat4x4_2"
+               OpName %x_Mat4x4_2 "x_Mat4x4_2"
                OpName %m18 "m18"
                OpName %m19 "m19"
                OpName %o2 "o2"
-               OpName %_Mat4x3_ "_Mat4x3_"
+               OpName %x_Mat4x3_ "x_Mat4x3_"
                OpName %n2 "n2"
                OpName %n3 "n3"
                OpName %o3 "o3"
-               OpName %_Mat4x3_1 "_Mat4x3_1"
+               OpName %x_Mat4x3_1 "x_Mat4x3_1"
                OpName %m20 "m20"
                OpName %m21 "m21"
                OpName %o4 "o4"
@@ -404,7 +404,7 @@
         %202 = OpCompositeConstruct %v4float %198 %199 %200 %201
                OpReturnValue %202
                OpFunctionEnd
-   %_Mat4x4_ = OpFunction %Mat4x4_ None %203
+  %x_Mat4x4_ = OpFunction %Mat4x4_ None %203
           %n = OpFunctionParameter %float
         %206 = OpLabel
          %n1 = OpVariable %_ptr_Function_float Function %23
@@ -429,13 +429,13 @@
         %226 = OpLoad %Mat4x4_ %o
                OpReturnValue %226
                OpFunctionEnd
-  %_Mat4x4_1 = OpFunction %Mat4x4_ None %227
+ %x_Mat4x4_1 = OpFunction %Mat4x4_ None %227
         %m16 = OpFunctionParameter %Mat4x3_
         %230 = OpLabel
         %m17 = OpVariable %_ptr_Function_Mat4x3_ Function %60
          %o1 = OpVariable %_ptr_Function_Mat4x4_ Function %120
                OpStore %m17 %m16
-        %233 = OpFunctionCall %Mat4x4_ %_Mat4x4_ %float_1
+        %233 = OpFunctionCall %Mat4x4_ %x_Mat4x4_ %float_1
                OpStore %o1 %233
         %235 = OpLoad %Mat4x3_ %m17
         %236 = OpAccessChain %_ptr_Function_v4float %o1 %uint_0
@@ -452,13 +452,13 @@
         %244 = OpLoad %Mat4x4_ %o1
                OpReturnValue %244
                OpFunctionEnd
-  %_Mat4x4_2 = OpFunction %Mat4x4_ None %245
+ %x_Mat4x4_2 = OpFunction %Mat4x4_ None %245
         %m18 = OpFunctionParameter %Mat4x2_
         %248 = OpLabel
         %m19 = OpVariable %_ptr_Function_Mat4x2_ Function %167
          %o2 = OpVariable %_ptr_Function_Mat4x4_ Function %120
                OpStore %m19 %m18
-        %251 = OpFunctionCall %Mat4x4_ %_Mat4x4_ %float_1
+        %251 = OpFunctionCall %Mat4x4_ %x_Mat4x4_ %float_1
                OpStore %o2 %251
         %252 = OpLoad %Mat4x2_ %m19
         %253 = OpAccessChain %_ptr_Function_v4float %o2 %uint_0
@@ -471,7 +471,7 @@
         %258 = OpLoad %Mat4x4_ %o2
                OpReturnValue %258
                OpFunctionEnd
-   %_Mat4x3_ = OpFunction %Mat4x3_ None %259
+  %x_Mat4x3_ = OpFunction %Mat4x3_ None %259
          %n2 = OpFunctionParameter %float
         %262 = OpLabel
          %n3 = OpVariable %_ptr_Function_float Function %23
@@ -492,7 +492,7 @@
         %274 = OpLoad %Mat4x3_ %o3
                OpReturnValue %274
                OpFunctionEnd
-  %_Mat4x3_1 = OpFunction %Mat4x3_ None %275
+ %x_Mat4x3_1 = OpFunction %Mat4x3_ None %275
         %m20 = OpFunctionParameter %Mat4x4_
         %278 = OpLabel
         %m21 = OpVariable %_ptr_Function_Mat4x4_ Function %120
@@ -523,10 +523,10 @@
         %303 = OpLoad %Mat4x3_ %302
                OpStore %t_PosMtx %303
         %304 = OpLoad %Mat4x3_ %t_PosMtx
-        %305 = OpFunctionCall %Mat4x4_ %_Mat4x4_1 %304
+        %305 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %304
         %306 = OpLoad %v3float %a_Position1
         %307 = OpLoad %Mat4x3_ %t_PosMtx
-        %308 = OpFunctionCall %Mat4x4_ %_Mat4x4_1 %307
+        %308 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %307
         %309 = OpLoad %v3float %a_Position1
         %311 = OpCompositeExtract %float %309 0
         %312 = OpCompositeExtract %float %309 1
@@ -536,10 +536,10 @@
         %316 = OpAccessChain %_ptr_Uniform_Mat4x4_ %global %uint_0
         %317 = OpLoad %Mat4x4_ %316
         %318 = OpLoad %Mat4x3_ %t_PosMtx
-        %319 = OpFunctionCall %Mat4x4_ %_Mat4x4_1 %318
+        %319 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %318
         %320 = OpLoad %v3float %a_Position1
         %321 = OpLoad %Mat4x3_ %t_PosMtx
-        %322 = OpFunctionCall %Mat4x4_ %_Mat4x4_1 %321
+        %322 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %321
         %323 = OpLoad %v3float %a_Position1
         %325 = OpCompositeExtract %float %323 0
         %326 = OpCompositeExtract %float %323 1
diff --git a/test/bug/tint/922.wgsl.expected.wgsl b/test/bug/tint/922.wgsl.expected.wgsl
index c9178c1..aa20cc7 100644
--- a/test/bug/tint/922.wgsl.expected.wgsl
+++ b/test/bug/tint/922.wgsl.expected.wgsl
@@ -66,37 +66,37 @@
 fn Mat4x3GetCol0_(m : Mat4x3_) -> vec3<f32> {
   var m1 : Mat4x3_;
   m1 = m;
-  let _e2 : Mat4x3_ = m1;
-  let _e5 : Mat4x3_ = m1;
-  let _e8 : Mat4x3_ = m1;
-  return vec3<f32>(_e2.mx.x, _e5.my.x, _e8.mz.x);
+  let x_e2 : Mat4x3_ = m1;
+  let x_e5 : Mat4x3_ = m1;
+  let x_e8 : Mat4x3_ = m1;
+  return vec3<f32>(x_e2.mx.x, x_e5.my.x, x_e8.mz.x);
 }
 
 fn Mat4x3GetCol1_(m2 : Mat4x3_) -> vec3<f32> {
   var m3 : Mat4x3_;
   m3 = m2;
-  let _e2 : Mat4x3_ = m3;
-  let _e5 : Mat4x3_ = m3;
-  let _e8 : Mat4x3_ = m3;
-  return vec3<f32>(_e2.mx.y, _e5.my.y, _e8.mz.y);
+  let x_e2 : Mat4x3_ = m3;
+  let x_e5 : Mat4x3_ = m3;
+  let x_e8 : Mat4x3_ = m3;
+  return vec3<f32>(x_e2.mx.y, x_e5.my.y, x_e8.mz.y);
 }
 
 fn Mat4x3GetCol2_(m4 : Mat4x3_) -> vec3<f32> {
   var m5 : Mat4x3_;
   m5 = m4;
-  let _e2 : Mat4x3_ = m5;
-  let _e5 : Mat4x3_ = m5;
-  let _e8 : Mat4x3_ = m5;
-  return vec3<f32>(_e2.mx.z, _e5.my.z, _e8.mz.z);
+  let x_e2 : Mat4x3_ = m5;
+  let x_e5 : Mat4x3_ = m5;
+  let x_e8 : Mat4x3_ = m5;
+  return vec3<f32>(x_e2.mx.z, x_e5.my.z, x_e8.mz.z);
 }
 
 fn Mat4x3GetCol3_(m6 : Mat4x3_) -> vec3<f32> {
   var m7 : Mat4x3_;
   m7 = m6;
-  let _e2 : Mat4x3_ = m7;
-  let _e5 : Mat4x3_ = m7;
-  let _e8 : Mat4x3_ = m7;
-  return vec3<f32>(_e2.mx.w, _e5.my.w, _e8.mz.w);
+  let x_e2 : Mat4x3_ = m7;
+  let x_e5 : Mat4x3_ = m7;
+  let x_e8 : Mat4x3_ = m7;
+  return vec3<f32>(x_e2.mx.w, x_e5.my.w, x_e8.mz.w);
 }
 
 fn Mul(m8 : Mat4x4_, v : vec4<f32>) -> vec4<f32> {
@@ -104,15 +104,15 @@
   var v1 : vec4<f32>;
   m9 = m8;
   v1 = v;
-  let _e4 : Mat4x4_ = m9;
-  let _e6 : vec4<f32> = v1;
-  let _e8 : Mat4x4_ = m9;
-  let _e10 : vec4<f32> = v1;
-  let _e12 : Mat4x4_ = m9;
-  let _e14 : vec4<f32> = v1;
-  let _e16 : Mat4x4_ = m9;
-  let _e18 : vec4<f32> = v1;
-  return vec4<f32>(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14), dot(_e16.mw, _e18));
+  let x_e4 : Mat4x4_ = m9;
+  let x_e6 : vec4<f32> = v1;
+  let x_e8 : Mat4x4_ = m9;
+  let x_e10 : vec4<f32> = v1;
+  let x_e12 : Mat4x4_ = m9;
+  let x_e14 : vec4<f32> = v1;
+  let x_e16 : Mat4x4_ = m9;
+  let x_e18 : vec4<f32> = v1;
+  return vec4<f32>(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18));
 }
 
 fn Mul1(m10 : Mat4x3_, v2 : vec4<f32>) -> vec3<f32> {
@@ -120,13 +120,13 @@
   var v3 : vec4<f32>;
   m11 = m10;
   v3 = v2;
-  let _e4 : Mat4x3_ = m11;
-  let _e6 : vec4<f32> = v3;
-  let _e8 : Mat4x3_ = m11;
-  let _e10 : vec4<f32> = v3;
-  let _e12 : Mat4x3_ = m11;
-  let _e14 : vec4<f32> = v3;
-  return vec3<f32>(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14));
+  let x_e4 : Mat4x3_ = m11;
+  let x_e6 : vec4<f32> = v3;
+  let x_e8 : Mat4x3_ = m11;
+  let x_e10 : vec4<f32> = v3;
+  let x_e12 : Mat4x3_ = m11;
+  let x_e14 : vec4<f32> = v3;
+  return vec3<f32>(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14));
 }
 
 fn Mul2(m12 : Mat4x2_, v4 : vec4<f32>) -> vec2<f32> {
@@ -134,11 +134,11 @@
   var v5 : vec4<f32>;
   m13 = m12;
   v5 = v4;
-  let _e4 : Mat4x2_ = m13;
-  let _e6 : vec4<f32> = v5;
-  let _e8 : Mat4x2_ = m13;
-  let _e10 : vec4<f32> = v5;
-  return vec2<f32>(dot(_e4.mx, _e6), dot(_e8.my, _e10));
+  let x_e4 : Mat4x2_ = m13;
+  let x_e6 : vec4<f32> = v5;
+  let x_e8 : Mat4x2_ = m13;
+  let x_e10 : vec4<f32> = v5;
+  return vec2<f32>(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10));
 }
 
 fn Mul3(v6 : vec3<f32>, m14 : Mat4x3_) -> vec4<f32> {
@@ -146,137 +146,137 @@
   var m15 : Mat4x3_;
   v7 = v6;
   m15 = m14;
-  let _e5 : Mat4x3_ = m15;
-  let _e6 : vec3<f32> = Mat4x3GetCol0_(_e5);
-  let _e7 : vec3<f32> = v7;
-  let _e10 : Mat4x3_ = m15;
-  let _e11 : vec3<f32> = Mat4x3GetCol1_(_e10);
-  let _e12 : vec3<f32> = v7;
-  let _e15 : Mat4x3_ = m15;
-  let _e16 : vec3<f32> = Mat4x3GetCol2_(_e15);
-  let _e17 : vec3<f32> = v7;
-  let _e20 : Mat4x3_ = m15;
-  let _e21 : vec3<f32> = Mat4x3GetCol3_(_e20);
-  let _e22 : vec3<f32> = v7;
-  return vec4<f32>(dot(_e6, _e7), dot(_e11, _e12), dot(_e16, _e17), dot(_e21, _e22));
+  let x_e5 : Mat4x3_ = m15;
+  let x_e6 : vec3<f32> = Mat4x3GetCol0_(x_e5);
+  let x_e7 : vec3<f32> = v7;
+  let x_e10 : Mat4x3_ = m15;
+  let x_e11 : vec3<f32> = Mat4x3GetCol1_(x_e10);
+  let x_e12 : vec3<f32> = v7;
+  let x_e15 : Mat4x3_ = m15;
+  let x_e16 : vec3<f32> = Mat4x3GetCol2_(x_e15);
+  let x_e17 : vec3<f32> = v7;
+  let x_e20 : Mat4x3_ = m15;
+  let x_e21 : vec3<f32> = Mat4x3GetCol3_(x_e20);
+  let x_e22 : vec3<f32> = v7;
+  return vec4<f32>(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, x_e22));
 }
 
-fn _Mat4x4_(n : f32) -> Mat4x4_ {
+fn x_Mat4x4_(n : f32) -> Mat4x4_ {
   var n1 : f32;
   var o : Mat4x4_;
   n1 = n;
-  let _e4 : f32 = n1;
-  o.mx = vec4<f32>(_e4, 0.0, 0.0, 0.0);
-  let _e11 : f32 = n1;
-  o.my = vec4<f32>(0.0, _e11, 0.0, 0.0);
-  let _e18 : f32 = n1;
-  o.mz = vec4<f32>(0.0, 0.0, _e18, 0.0);
-  let _e25 : f32 = n1;
-  o.mw = vec4<f32>(0.0, 0.0, 0.0, _e25);
-  let _e27 : Mat4x4_ = o;
-  return _e27;
+  let x_e4 : f32 = n1;
+  o.mx = vec4<f32>(x_e4, 0.0, 0.0, 0.0);
+  let x_e11 : f32 = n1;
+  o.my = vec4<f32>(0.0, x_e11, 0.0, 0.0);
+  let x_e18 : f32 = n1;
+  o.mz = vec4<f32>(0.0, 0.0, x_e18, 0.0);
+  let x_e25 : f32 = n1;
+  o.mw = vec4<f32>(0.0, 0.0, 0.0, x_e25);
+  let x_e27 : Mat4x4_ = o;
+  return x_e27;
 }
 
-fn _Mat4x4_1(m16 : Mat4x3_) -> Mat4x4_ {
+fn x_Mat4x4_1(m16 : Mat4x3_) -> Mat4x4_ {
   var m17 : Mat4x3_;
   var o1 : Mat4x4_;
   m17 = m16;
-  let _e4 : Mat4x4_ = _Mat4x4_(1.0);
-  o1 = _e4;
-  let _e7 : Mat4x3_ = m17;
-  o1.mx = _e7.mx;
-  let _e10 : Mat4x3_ = m17;
-  o1.my = _e10.my;
-  let _e13 : Mat4x3_ = m17;
-  o1.mz = _e13.mz;
-  let _e15 : Mat4x4_ = o1;
-  return _e15;
+  let x_e4 : Mat4x4_ = x_Mat4x4_(1.0);
+  o1 = x_e4;
+  let x_e7 : Mat4x3_ = m17;
+  o1.mx = x_e7.mx;
+  let x_e10 : Mat4x3_ = m17;
+  o1.my = x_e10.my;
+  let x_e13 : Mat4x3_ = m17;
+  o1.mz = x_e13.mz;
+  let x_e15 : Mat4x4_ = o1;
+  return x_e15;
 }
 
-fn _Mat4x4_2(m18 : Mat4x2_) -> Mat4x4_ {
+fn x_Mat4x4_2(m18 : Mat4x2_) -> Mat4x4_ {
   var m19 : Mat4x2_;
   var o2 : Mat4x4_;
   m19 = m18;
-  let _e4 : Mat4x4_ = _Mat4x4_(1.0);
-  o2 = _e4;
-  let _e7 : Mat4x2_ = m19;
-  o2.mx = _e7.mx;
-  let _e10 : Mat4x2_ = m19;
-  o2.my = _e10.my;
-  let _e12 : Mat4x4_ = o2;
-  return _e12;
+  let x_e4 : Mat4x4_ = x_Mat4x4_(1.0);
+  o2 = x_e4;
+  let x_e7 : Mat4x2_ = m19;
+  o2.mx = x_e7.mx;
+  let x_e10 : Mat4x2_ = m19;
+  o2.my = x_e10.my;
+  let x_e12 : Mat4x4_ = o2;
+  return x_e12;
 }
 
-fn _Mat4x3_(n2 : f32) -> Mat4x3_ {
+fn x_Mat4x3_(n2 : f32) -> Mat4x3_ {
   var n3 : f32;
   var o3 : Mat4x3_;
   n3 = n2;
-  let _e4 : f32 = n3;
-  o3.mx = vec4<f32>(_e4, 0.0, 0.0, 0.0);
-  let _e11 : f32 = n3;
-  o3.my = vec4<f32>(0.0, _e11, 0.0, 0.0);
-  let _e18 : f32 = n3;
-  o3.mz = vec4<f32>(0.0, 0.0, _e18, 0.0);
-  let _e21 : Mat4x3_ = o3;
-  return _e21;
+  let x_e4 : f32 = n3;
+  o3.mx = vec4<f32>(x_e4, 0.0, 0.0, 0.0);
+  let x_e11 : f32 = n3;
+  o3.my = vec4<f32>(0.0, x_e11, 0.0, 0.0);
+  let x_e18 : f32 = n3;
+  o3.mz = vec4<f32>(0.0, 0.0, x_e18, 0.0);
+  let x_e21 : Mat4x3_ = o3;
+  return x_e21;
 }
 
-fn _Mat4x3_1(m20 : Mat4x4_) -> Mat4x3_ {
+fn x_Mat4x3_1(m20 : Mat4x4_) -> Mat4x3_ {
   var m21 : Mat4x4_;
   var o4 : Mat4x3_;
   m21 = m20;
-  let _e4 : Mat4x4_ = m21;
-  o4.mx = _e4.mx;
-  let _e7 : Mat4x4_ = m21;
-  o4.my = _e7.my;
-  let _e10 : Mat4x4_ = m21;
-  o4.mz = _e10.mz;
-  let _e12 : Mat4x3_ = o4;
-  return _e12;
+  let x_e4 : Mat4x4_ = m21;
+  o4.mx = x_e4.mx;
+  let x_e7 : Mat4x4_ = m21;
+  o4.my = x_e7.my;
+  let x_e10 : Mat4x4_ = m21;
+  o4.mz = x_e10.mz;
+  let x_e12 : Mat4x3_ = o4;
+  return x_e12;
 }
 
 fn main1() {
   var t_PosMtx : Mat4x3_;
   var t_TexSpaceCoord : vec2<f32>;
-  let _e15 : f32 = a_PosMtxIdx1;
-  let _e18 : Mat4x3_ = global2.u_PosMtx[i32(_e15)];
-  t_PosMtx = _e18;
-  let _e23 : Mat4x3_ = t_PosMtx;
-  let _e24 : Mat4x4_ = _Mat4x4_1(_e23);
-  let _e25 : vec3<f32> = a_Position1;
-  let _e29 : Mat4x3_ = t_PosMtx;
-  let _e30 : Mat4x4_ = _Mat4x4_1(_e29);
-  let _e31 : vec3<f32> = a_Position1;
-  let _e34 : vec4<f32> = Mul(_e30, vec4<f32>(_e31, 1.0));
-  let _e35 : Mat4x4_ = global.u_Projection;
-  let _e37 : Mat4x3_ = t_PosMtx;
-  let _e38 : Mat4x4_ = _Mat4x4_1(_e37);
-  let _e39 : vec3<f32> = a_Position1;
-  let _e43 : Mat4x3_ = t_PosMtx;
-  let _e44 : Mat4x4_ = _Mat4x4_1(_e43);
-  let _e45 : vec3<f32> = a_Position1;
-  let _e48 : vec4<f32> = Mul(_e44, vec4<f32>(_e45, 1.0));
-  let _e49 : vec4<f32> = Mul(_e35, _e48);
-  gl_Position = _e49;
-  let _e50 : vec4<f32> = a_Color1;
-  v_Color = _e50;
-  let _e52 : vec4<f32> = global1.u_Misc0_;
-  if ((_e52.x == 2.0)) {
+  let x_e15 : f32 = a_PosMtxIdx1;
+  let x_e18 : Mat4x3_ = global2.u_PosMtx[i32(x_e15)];
+  t_PosMtx = x_e18;
+  let x_e23 : Mat4x3_ = t_PosMtx;
+  let x_e24 : Mat4x4_ = x_Mat4x4_1(x_e23);
+  let x_e25 : vec3<f32> = a_Position1;
+  let x_e29 : Mat4x3_ = t_PosMtx;
+  let x_e30 : Mat4x4_ = x_Mat4x4_1(x_e29);
+  let x_e31 : vec3<f32> = a_Position1;
+  let x_e34 : vec4<f32> = Mul(x_e30, vec4<f32>(x_e31, 1.0));
+  let x_e35 : Mat4x4_ = global.u_Projection;
+  let x_e37 : Mat4x3_ = t_PosMtx;
+  let x_e38 : Mat4x4_ = x_Mat4x4_1(x_e37);
+  let x_e39 : vec3<f32> = a_Position1;
+  let x_e43 : Mat4x3_ = t_PosMtx;
+  let x_e44 : Mat4x4_ = x_Mat4x4_1(x_e43);
+  let x_e45 : vec3<f32> = a_Position1;
+  let x_e48 : vec4<f32> = Mul(x_e44, vec4<f32>(x_e45, 1.0));
+  let x_e49 : vec4<f32> = Mul(x_e35, x_e48);
+  gl_Position = x_e49;
+  let x_e50 : vec4<f32> = a_Color1;
+  v_Color = x_e50;
+  let x_e52 : vec4<f32> = global1.u_Misc0_;
+  if ((x_e52.x == 2.0)) {
     {
-      let _e59 : vec3<f32> = a_Normal1;
-      let _e64 : Mat4x2_ = global1.u_TexMtx[0];
-      let _e65 : vec3<f32> = a_Normal1;
-      let _e68 : vec2<f32> = Mul2(_e64, vec4<f32>(_e65, 1.0));
-      v_TexCoord = _e68.xy;
+      let x_e59 : vec3<f32> = a_Normal1;
+      let x_e64 : Mat4x2_ = global1.u_TexMtx[0];
+      let x_e65 : vec3<f32> = a_Normal1;
+      let x_e68 : vec2<f32> = Mul2(x_e64, vec4<f32>(x_e65, 1.0));
+      v_TexCoord = x_e68.xy;
       return;
     }
   } else {
     {
-      let _e73 : vec2<f32> = a_UV1;
-      let _e79 : Mat4x2_ = global1.u_TexMtx[0];
-      let _e80 : vec2<f32> = a_UV1;
-      let _e84 : vec2<f32> = Mul2(_e79, vec4<f32>(_e80, 1.0, 1.0));
-      v_TexCoord = _e84.xy;
+      let x_e73 : vec2<f32> = a_UV1;
+      let x_e79 : Mat4x2_ = global1.u_TexMtx[0];
+      let x_e80 : vec2<f32> = a_UV1;
+      let x_e84 : vec2<f32> = Mul2(x_e79, vec4<f32>(x_e80, 1.0, 1.0));
+      v_TexCoord = x_e84.xy;
       return;
     }
   }
@@ -290,8 +290,8 @@
   a_Normal1 = a_Normal;
   a_PosMtxIdx1 = a_PosMtxIdx;
   main1();
-  let _e11 : vec4<f32> = v_Color;
-  let _e13 : vec2<f32> = v_TexCoord;
-  let _e15 : vec4<f32> = gl_Position;
-  return VertexOutput(_e11, _e13, _e15);
+  let x_e11 : vec4<f32> = v_Color;
+  let x_e13 : vec2<f32> = v_TexCoord;
+  let x_e15 : vec4<f32> = gl_Position;
+  return VertexOutput(x_e11, x_e13, x_e15);
 }
