diff --git a/src/ast/identifier_expression.h b/src/ast/identifier_expression.h
index b30c4cc..82ffca0 100644
--- a/src/ast/identifier_expression.h
+++ b/src/ast/identifier_expression.h
@@ -42,8 +42,6 @@
 
   /// @returns the symbol for the identifier
   Symbol symbol() const { return sym_; }
-  /// @returns the name part of the identifier
-  std::string name() const { return name_; }
 
   /// Sets the intrinsic for this identifier
   /// @param i the intrinsic to set
diff --git a/src/ast/identifier_expression_test.cc b/src/ast/identifier_expression_test.cc
index 959cbb2..1059af2 100644
--- a/src/ast/identifier_expression_test.cc
+++ b/src/ast/identifier_expression_test.cc
@@ -25,13 +25,11 @@
 TEST_F(IdentifierExpressionTest, Creation) {
   auto* i = Expr("ident");
   EXPECT_EQ(i->symbol(), Symbol(1));
-  EXPECT_EQ(i->name(), "ident");
 }
 
 TEST_F(IdentifierExpressionTest, Creation_WithSource) {
   auto* i = Expr(Source{Source::Location{20, 2}}, "ident");
   EXPECT_EQ(i->symbol(), Symbol(1));
-  EXPECT_EQ(i->name(), "ident");
 
   auto src = i->source();
   EXPECT_EQ(src.range.begin.line, 20u);
diff --git a/src/reader/wgsl/parser_impl_additive_expression_test.cc b/src/reader/wgsl/parser_impl_additive_expression_test.cc
index 6776ad2..69b5623 100644
--- a/src/reader/wgsl/parser_impl_additive_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_additive_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
@@ -62,7 +62,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_and_expression_test.cc b/src/reader/wgsl/parser_impl_and_expression_test.cc
index 881d9ff..e50c345 100644
--- a/src/reader/wgsl/parser_impl_and_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_and_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
index 69387ba..a770895 100644
--- a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
@@ -42,7 +42,7 @@
 
   ASSERT_TRUE(e->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = e->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(e->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(e->rhs()->Is<ast::ScalarConstructorExpression>());
@@ -77,7 +77,7 @@
 
   ASSERT_TRUE(mem->member()->Is<ast::IdentifierExpression>());
   auto* ident = mem->member()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "d");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("d"));
 
   ASSERT_TRUE(mem->structure()->Is<ast::ArrayAccessorExpression>());
   auto* ary = mem->structure()->As<ast::ArrayAccessorExpression>();
@@ -93,18 +93,18 @@
   mem = ary->array()->As<ast::MemberAccessorExpression>();
   ASSERT_TRUE(mem->member()->Is<ast::IdentifierExpression>());
   ident = mem->member()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "c");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("c"));
 
   ASSERT_TRUE(mem->structure()->Is<ast::MemberAccessorExpression>());
   mem = mem->structure()->As<ast::MemberAccessorExpression>();
 
   ASSERT_TRUE(mem->structure()->Is<ast::IdentifierExpression>());
   ident = mem->structure()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(mem->member()->Is<ast::IdentifierExpression>());
   ident = mem->member()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "b");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("b"));
 }
 
 TEST_F(ParserImplTest, AssignmentStmt_MissingEqual) {
diff --git a/src/reader/wgsl/parser_impl_call_stmt_test.cc b/src/reader/wgsl/parser_impl_call_stmt_test.cc
index 158f7fc..1fd8f77 100644
--- a/src/reader/wgsl/parser_impl_call_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_call_stmt_test.cc
@@ -37,8 +37,8 @@
   auto* c = e->As<ast::CallStatement>()->expr();
 
   ASSERT_TRUE(c->func()->Is<ast::IdentifierExpression>());
-  auto* func = c->func()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(func->name(), "a");
+  auto* ident = c->func()->As<ast::IdentifierExpression>();
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   EXPECT_EQ(c->params().size(), 0u);
 }
@@ -55,8 +55,8 @@
   auto* c = e->As<ast::CallStatement>()->expr();
 
   ASSERT_TRUE(c->func()->Is<ast::IdentifierExpression>());
-  auto* func = c->func()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(func->name(), "a");
+  auto* ident = c->func()->As<ast::IdentifierExpression>();
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   EXPECT_EQ(c->params().size(), 3u);
   EXPECT_TRUE(c->params()[0]->Is<ast::ConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_equality_expression_test.cc b/src/reader/wgsl/parser_impl_equality_expression_test.cc
index cb99ff9..fffec25 100644
--- a/src/reader/wgsl/parser_impl_equality_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_equality_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
@@ -62,7 +62,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc b/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
index 8fbcbb0..d50a6fa 100644
--- a/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc b/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
index 12b1ddb..6612866 100644
--- a/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_logical_and_expression_test.cc b/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
index e961e9e..7218c70 100644
--- a/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_logical_or_expression_test.cc b/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
index d4ee1b6..67f5674 100644
--- a/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc b/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
index 3f1595b..8cc5101 100644
--- a/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
@@ -62,7 +62,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
@@ -85,7 +85,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_postfix_expression_test.cc b/src/reader/wgsl/parser_impl_postfix_expression_test.cc
index e20955f..afe83ea 100644
--- a/src/reader/wgsl/parser_impl_postfix_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_postfix_expression_test.cc
@@ -42,7 +42,7 @@
 
   ASSERT_TRUE(ary->array()->Is<ast::IdentifierExpression>());
   auto* ident = ary->array()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
@@ -64,7 +64,7 @@
 
   ASSERT_TRUE(ary->array()->Is<ast::IdentifierExpression>());
   auto* ident = ary->array()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(ary->idx_expr()->Is<ast::BinaryExpression>());
 }
@@ -112,7 +112,7 @@
 
   ASSERT_TRUE(c->func()->Is<ast::IdentifierExpression>());
   auto* func = c->func()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(func->name(), "a");
+  EXPECT_EQ(func->symbol(), p->get_module().RegisterSymbol("a"));
 
   EXPECT_EQ(c->params().size(), 0u);
 }
@@ -130,7 +130,7 @@
 
   ASSERT_TRUE(c->func()->Is<ast::IdentifierExpression>());
   auto* func = c->func()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(func->name(), "test");
+  EXPECT_EQ(func->symbol(), p->get_module().RegisterSymbol("test"));
 
   EXPECT_EQ(c->params().size(), 3u);
   EXPECT_TRUE(c->params()[0]->Is<ast::ConstructorExpression>());
@@ -179,10 +179,12 @@
 
   auto* m = e->As<ast::MemberAccessorExpression>();
   ASSERT_TRUE(m->structure()->Is<ast::IdentifierExpression>());
-  EXPECT_EQ(m->structure()->As<ast::IdentifierExpression>()->name(), "a");
+  EXPECT_EQ(m->structure()->As<ast::IdentifierExpression>()->symbol(),
+            p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(m->member()->Is<ast::IdentifierExpression>());
-  EXPECT_EQ(m->member()->As<ast::IdentifierExpression>()->name(), "b");
+  EXPECT_EQ(m->member()->As<ast::IdentifierExpression>()->symbol(),
+            p->get_module().RegisterSymbol("b"));
 }
 
 TEST_F(ParserImplTest, PostfixExpression_MemberAccesssor_InvalidIdent) {
diff --git a/src/reader/wgsl/parser_impl_primary_expression_test.cc b/src/reader/wgsl/parser_impl_primary_expression_test.cc
index 8a566af..a6bdb1b 100644
--- a/src/reader/wgsl/parser_impl_primary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_primary_expression_test.cc
@@ -41,7 +41,7 @@
   ASSERT_NE(e.value, nullptr);
   ASSERT_TRUE(e->Is<ast::IdentifierExpression>());
   auto* ident = e->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_TypeDecl) {
diff --git a/src/reader/wgsl/parser_impl_relational_expression_test.cc b/src/reader/wgsl/parser_impl_relational_expression_test.cc
index 3fe6196..b17292e 100644
--- a/src/reader/wgsl/parser_impl_relational_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_relational_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
@@ -62,7 +62,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
@@ -85,7 +85,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
@@ -108,7 +108,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_shift_expression_test.cc b/src/reader/wgsl/parser_impl_shift_expression_test.cc
index b3f2319..41cee53 100644
--- a/src/reader/wgsl/parser_impl_shift_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_shift_expression_test.cc
@@ -39,7 +39,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
@@ -62,7 +62,7 @@
 
   ASSERT_TRUE(rel->lhs()->Is<ast::IdentifierExpression>());
   auto* ident = rel->lhs()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/reader/wgsl/parser_impl_unary_expression_test.cc b/src/reader/wgsl/parser_impl_unary_expression_test.cc
index e41e3ae..70a1098 100644
--- a/src/reader/wgsl/parser_impl_unary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_unary_expression_test.cc
@@ -38,7 +38,7 @@
   auto* ary = e->As<ast::ArrayAccessorExpression>();
   ASSERT_TRUE(ary->array()->Is<ast::IdentifierExpression>());
   auto* ident = ary->array()->As<ast::IdentifierExpression>();
-  EXPECT_EQ(ident->name(), "a");
+  EXPECT_EQ(ident->symbol(), p->get_module().RegisterSymbol("a"));
 
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
diff --git a/src/type_determiner.cc b/src/type_determiner.cc
index d6a94be..8459b8a 100644
--- a/src/type_determiner.cc
+++ b/src/type_determiner.cc
@@ -504,8 +504,8 @@
                                         ast::CallExpression* expr) {
   if (ast::intrinsic::IsDerivative(ident->intrinsic())) {
     if (expr->params().size() != 1) {
-      set_error(expr->source(),
-                "incorrect number of parameters for " + ident->name());
+      set_error(expr->source(), "incorrect number of parameters for " +
+                                    mod_->SymbolToName(ident->symbol()));
       return false;
     }
 
@@ -525,8 +525,8 @@
   }
   if (ast::intrinsic::IsFloatClassificationIntrinsic(ident->intrinsic())) {
     if (expr->params().size() != 1) {
-      set_error(expr->source(),
-                "incorrect number of parameters for " + ident->name());
+      set_error(expr->source(), "incorrect number of parameters for " +
+                                    mod_->SymbolToName(ident->symbol()));
       return false;
     }
 
@@ -548,7 +548,8 @@
     if (!texture_param->result_type()
              ->UnwrapPtrIfNeeded()
              ->Is<ast::type::Texture>()) {
-      set_error(expr->source(), "invalid first argument for " + ident->name());
+      set_error(expr->source(), "invalid first argument for " +
+                                    mod_->SymbolToName(ident->symbol()));
       return false;
     }
     ast::type::Texture* texture = texture_param->result_type()
@@ -658,9 +659,10 @@
 
     if (expr->params().size() != param.count) {
       set_error(expr->source(),
-                "incorrect number of parameters for " + ident->name() +
-                    ", got " + std::to_string(expr->params().size()) +
-                    " and expected " + std::to_string(param.count));
+                "incorrect number of parameters for " +
+                    mod_->SymbolToName(ident->symbol()) + ", got " +
+                    std::to_string(expr->params().size()) + " and expected " +
+                    std::to_string(param.count));
       return false;
     }
 
@@ -701,8 +703,8 @@
   }
   if (ident->intrinsic() == ast::Intrinsic::kOuterProduct) {
     if (expr->params().size() != 2) {
-      set_error(expr->source(),
-                "incorrect number of parameters for " + ident->name());
+      set_error(expr->source(), "incorrect number of parameters for " +
+                                    mod_->SymbolToName(ident->symbol()));
       return false;
     }
 
@@ -710,7 +712,8 @@
     auto* param1_type = expr->params()[1]->result_type()->UnwrapPtrIfNeeded();
     if (!param0_type->Is<ast::type::Vector>() ||
         !param1_type->Is<ast::type::Vector>()) {
-      set_error(expr->source(), "invalid parameter type for " + ident->name());
+      set_error(expr->source(), "invalid parameter type for " +
+                                    mod_->SymbolToName(ident->symbol()));
       return false;
     }
 
@@ -723,7 +726,8 @@
   if (ident->intrinsic() == ast::Intrinsic::kSelect) {
     if (expr->params().size() != 3) {
       set_error(expr->source(), "incorrect number of parameters for " +
-                                    ident->name() + " expected 3 got " +
+                                    mod_->SymbolToName(ident->symbol()) +
+                                    " expected 3 got " +
                                     std::to_string(expr->params().size()));
       return false;
     }
@@ -742,13 +746,14 @@
     }
   }
   if (data == nullptr) {
-    error_ = "unable to find intrinsic " + ident->name();
+    error_ = "unable to find intrinsic " + mod_->SymbolToName(ident->symbol());
     return false;
   }
 
   if (expr->params().size() != data->param_count) {
     set_error(expr->source(), "incorrect number of parameters for " +
-                                  ident->name() + ". Expected " +
+                                  mod_->SymbolToName(ident->symbol()) +
+                                  ". Expected " +
                                   std::to_string(data->param_count) + " got " +
                                   std::to_string(expr->params().size()));
     return false;
@@ -764,7 +769,8 @@
         if (!result_types.back()->is_float_scalar_or_vector() &&
             !result_types.back()->is_integer_scalar_or_vector()) {
           set_error(expr->source(),
-                    "incorrect type for " + ident->name() + ". " +
+                    "incorrect type for " +
+                        mod_->SymbolToName(ident->symbol()) + ". " +
                         "Requires float or int, scalar or vector values");
           return false;
         }
@@ -772,7 +778,8 @@
       case IntrinsicDataType::kFloatScalarOrVector:
         if (!result_types.back()->is_float_scalar_or_vector()) {
           set_error(expr->source(),
-                    "incorrect type for " + ident->name() + ". " +
+                    "incorrect type for " +
+                        mod_->SymbolToName(ident->symbol()) + ". " +
                         "Requires float scalar or float vector values");
           return false;
         }
@@ -781,14 +788,16 @@
       case IntrinsicDataType::kIntScalarOrVector:
         if (!result_types.back()->is_integer_scalar_or_vector()) {
           set_error(expr->source(),
-                    "incorrect type for " + ident->name() + ". " +
+                    "incorrect type for " +
+                        mod_->SymbolToName(ident->symbol()) + ". " +
                         "Requires integer scalar or integer vector values");
           return false;
         }
         break;
       case IntrinsicDataType::kFloatVector:
         if (!result_types.back()->is_float_vector()) {
-          set_error(expr->source(), "incorrect type for " + ident->name() +
+          set_error(expr->source(), "incorrect type for " +
+                                        mod_->SymbolToName(ident->symbol()) +
                                         ". " + "Requires float vector values");
           return false;
         }
@@ -796,7 +805,8 @@
             result_types.back()->As<ast::type::Vector>()->size() !=
                 data->vector_size) {
           set_error(expr->source(), "incorrect vector size for " +
-                                        ident->name() + ". " + "Requires " +
+                                        mod_->SymbolToName(ident->symbol()) +
+                                        ". " + "Requires " +
                                         std::to_string(data->vector_size) +
                                         " elements");
           return false;
@@ -804,7 +814,8 @@
         break;
       case IntrinsicDataType::kMatrix:
         if (!result_types.back()->Is<ast::type::Matrix>()) {
-          set_error(expr->source(), "incorrect type for " + ident->name() +
+          set_error(expr->source(), "incorrect type for " +
+                                        mod_->SymbolToName(ident->symbol()) +
                                         ". Requires matrix value");
           return false;
         }
@@ -815,8 +826,8 @@
   // Verify all the parameter types match
   for (size_t i = 1; i < data->param_count; ++i) {
     if (result_types[0] != result_types[i]) {
-      set_error(expr->source(),
-                "mismatched parameter types for " + ident->name());
+      set_error(expr->source(), "mismatched parameter types for " +
+                                    mod_->SymbolToName(ident->symbol()));
       return false;
     }
   }
@@ -891,143 +902,144 @@
 }
 
 bool TypeDeterminer::SetIntrinsicIfNeeded(ast::IdentifierExpression* ident) {
-  if (ident->name() == "abs") {
+  auto name = mod_->SymbolToName(ident->symbol());
+  if (name == "abs") {
     ident->set_intrinsic(ast::Intrinsic::kAbs);
-  } else if (ident->name() == "acos") {
+  } else if (name == "acos") {
     ident->set_intrinsic(ast::Intrinsic::kAcos);
-  } else if (ident->name() == "all") {
+  } else if (name == "all") {
     ident->set_intrinsic(ast::Intrinsic::kAll);
-  } else if (ident->name() == "any") {
+  } else if (name == "any") {
     ident->set_intrinsic(ast::Intrinsic::kAny);
-  } else if (ident->name() == "arrayLength") {
+  } else if (name == "arrayLength") {
     ident->set_intrinsic(ast::Intrinsic::kArrayLength);
-  } else if (ident->name() == "asin") {
+  } else if (name == "asin") {
     ident->set_intrinsic(ast::Intrinsic::kAsin);
-  } else if (ident->name() == "atan") {
+  } else if (name == "atan") {
     ident->set_intrinsic(ast::Intrinsic::kAtan);
-  } else if (ident->name() == "atan2") {
+  } else if (name == "atan2") {
     ident->set_intrinsic(ast::Intrinsic::kAtan2);
-  } else if (ident->name() == "ceil") {
+  } else if (name == "ceil") {
     ident->set_intrinsic(ast::Intrinsic::kCeil);
-  } else if (ident->name() == "clamp") {
+  } else if (name == "clamp") {
     ident->set_intrinsic(ast::Intrinsic::kClamp);
-  } else if (ident->name() == "cos") {
+  } else if (name == "cos") {
     ident->set_intrinsic(ast::Intrinsic::kCos);
-  } else if (ident->name() == "cosh") {
+  } else if (name == "cosh") {
     ident->set_intrinsic(ast::Intrinsic::kCosh);
-  } else if (ident->name() == "countOneBits") {
+  } else if (name == "countOneBits") {
     ident->set_intrinsic(ast::Intrinsic::kCountOneBits);
-  } else if (ident->name() == "cross") {
+  } else if (name == "cross") {
     ident->set_intrinsic(ast::Intrinsic::kCross);
-  } else if (ident->name() == "determinant") {
+  } else if (name == "determinant") {
     ident->set_intrinsic(ast::Intrinsic::kDeterminant);
-  } else if (ident->name() == "distance") {
+  } else if (name == "distance") {
     ident->set_intrinsic(ast::Intrinsic::kDistance);
-  } else if (ident->name() == "dot") {
+  } else if (name == "dot") {
     ident->set_intrinsic(ast::Intrinsic::kDot);
-  } else if (ident->name() == "dpdx") {
+  } else if (name == "dpdx") {
     ident->set_intrinsic(ast::Intrinsic::kDpdx);
-  } else if (ident->name() == "dpdxCoarse") {
+  } else if (name == "dpdxCoarse") {
     ident->set_intrinsic(ast::Intrinsic::kDpdxCoarse);
-  } else if (ident->name() == "dpdxFine") {
+  } else if (name == "dpdxFine") {
     ident->set_intrinsic(ast::Intrinsic::kDpdxFine);
-  } else if (ident->name() == "dpdy") {
+  } else if (name == "dpdy") {
     ident->set_intrinsic(ast::Intrinsic::kDpdy);
-  } else if (ident->name() == "dpdyCoarse") {
+  } else if (name == "dpdyCoarse") {
     ident->set_intrinsic(ast::Intrinsic::kDpdyCoarse);
-  } else if (ident->name() == "dpdyFine") {
+  } else if (name == "dpdyFine") {
     ident->set_intrinsic(ast::Intrinsic::kDpdyFine);
-  } else if (ident->name() == "exp") {
+  } else if (name == "exp") {
     ident->set_intrinsic(ast::Intrinsic::kExp);
-  } else if (ident->name() == "exp2") {
+  } else if (name == "exp2") {
     ident->set_intrinsic(ast::Intrinsic::kExp2);
-  } else if (ident->name() == "faceForward") {
+  } else if (name == "faceForward") {
     ident->set_intrinsic(ast::Intrinsic::kFaceForward);
-  } else if (ident->name() == "floor") {
+  } else if (name == "floor") {
     ident->set_intrinsic(ast::Intrinsic::kFloor);
-  } else if (ident->name() == "fma") {
+  } else if (name == "fma") {
     ident->set_intrinsic(ast::Intrinsic::kFma);
-  } else if (ident->name() == "fract") {
+  } else if (name == "fract") {
     ident->set_intrinsic(ast::Intrinsic::kFract);
-  } else if (ident->name() == "frexp") {
+  } else if (name == "frexp") {
     ident->set_intrinsic(ast::Intrinsic::kFrexp);
-  } else if (ident->name() == "fwidth") {
+  } else if (name == "fwidth") {
     ident->set_intrinsic(ast::Intrinsic::kFwidth);
-  } else if (ident->name() == "fwidthCoarse") {
+  } else if (name == "fwidthCoarse") {
     ident->set_intrinsic(ast::Intrinsic::kFwidthCoarse);
-  } else if (ident->name() == "fwidthFine") {
+  } else if (name == "fwidthFine") {
     ident->set_intrinsic(ast::Intrinsic::kFwidthFine);
-  } else if (ident->name() == "inverseSqrt") {
+  } else if (name == "inverseSqrt") {
     ident->set_intrinsic(ast::Intrinsic::kInverseSqrt);
-  } else if (ident->name() == "isFinite") {
+  } else if (name == "isFinite") {
     ident->set_intrinsic(ast::Intrinsic::kIsFinite);
-  } else if (ident->name() == "isInf") {
+  } else if (name == "isInf") {
     ident->set_intrinsic(ast::Intrinsic::kIsInf);
-  } else if (ident->name() == "isNan") {
+  } else if (name == "isNan") {
     ident->set_intrinsic(ast::Intrinsic::kIsNan);
-  } else if (ident->name() == "isNormal") {
+  } else if (name == "isNormal") {
     ident->set_intrinsic(ast::Intrinsic::kIsNormal);
-  } else if (ident->name() == "ldexp") {
+  } else if (name == "ldexp") {
     ident->set_intrinsic(ast::Intrinsic::kLdexp);
-  } else if (ident->name() == "length") {
+  } else if (name == "length") {
     ident->set_intrinsic(ast::Intrinsic::kLength);
-  } else if (ident->name() == "log") {
+  } else if (name == "log") {
     ident->set_intrinsic(ast::Intrinsic::kLog);
-  } else if (ident->name() == "log2") {
+  } else if (name == "log2") {
     ident->set_intrinsic(ast::Intrinsic::kLog2);
-  } else if (ident->name() == "max") {
+  } else if (name == "max") {
     ident->set_intrinsic(ast::Intrinsic::kMax);
-  } else if (ident->name() == "min") {
+  } else if (name == "min") {
     ident->set_intrinsic(ast::Intrinsic::kMin);
-  } else if (ident->name() == "mix") {
+  } else if (name == "mix") {
     ident->set_intrinsic(ast::Intrinsic::kMix);
-  } else if (ident->name() == "modf") {
+  } else if (name == "modf") {
     ident->set_intrinsic(ast::Intrinsic::kModf);
-  } else if (ident->name() == "normalize") {
+  } else if (name == "normalize") {
     ident->set_intrinsic(ast::Intrinsic::kNormalize);
-  } else if (ident->name() == "outerProduct") {
+  } else if (name == "outerProduct") {
     ident->set_intrinsic(ast::Intrinsic::kOuterProduct);
-  } else if (ident->name() == "pow") {
+  } else if (name == "pow") {
     ident->set_intrinsic(ast::Intrinsic::kPow);
-  } else if (ident->name() == "reflect") {
+  } else if (name == "reflect") {
     ident->set_intrinsic(ast::Intrinsic::kReflect);
-  } else if (ident->name() == "reverseBits") {
+  } else if (name == "reverseBits") {
     ident->set_intrinsic(ast::Intrinsic::kReverseBits);
-  } else if (ident->name() == "round") {
+  } else if (name == "round") {
     ident->set_intrinsic(ast::Intrinsic::kRound);
-  } else if (ident->name() == "select") {
+  } else if (name == "select") {
     ident->set_intrinsic(ast::Intrinsic::kSelect);
-  } else if (ident->name() == "sign") {
+  } else if (name == "sign") {
     ident->set_intrinsic(ast::Intrinsic::kSign);
-  } else if (ident->name() == "sin") {
+  } else if (name == "sin") {
     ident->set_intrinsic(ast::Intrinsic::kSin);
-  } else if (ident->name() == "sinh") {
+  } else if (name == "sinh") {
     ident->set_intrinsic(ast::Intrinsic::kSinh);
-  } else if (ident->name() == "smoothStep") {
+  } else if (name == "smoothStep") {
     ident->set_intrinsic(ast::Intrinsic::kSmoothStep);
-  } else if (ident->name() == "sqrt") {
+  } else if (name == "sqrt") {
     ident->set_intrinsic(ast::Intrinsic::kSqrt);
-  } else if (ident->name() == "step") {
+  } else if (name == "step") {
     ident->set_intrinsic(ast::Intrinsic::kStep);
-  } else if (ident->name() == "tan") {
+  } else if (name == "tan") {
     ident->set_intrinsic(ast::Intrinsic::kTan);
-  } else if (ident->name() == "tanh") {
+  } else if (name == "tanh") {
     ident->set_intrinsic(ast::Intrinsic::kTanh);
-  } else if (ident->name() == "textureLoad") {
+  } else if (name == "textureLoad") {
     ident->set_intrinsic(ast::Intrinsic::kTextureLoad);
-  } else if (ident->name() == "textureStore") {
+  } else if (name == "textureStore") {
     ident->set_intrinsic(ast::Intrinsic::kTextureStore);
-  } else if (ident->name() == "textureSample") {
+  } else if (name == "textureSample") {
     ident->set_intrinsic(ast::Intrinsic::kTextureSample);
-  } else if (ident->name() == "textureSampleBias") {
+  } else if (name == "textureSampleBias") {
     ident->set_intrinsic(ast::Intrinsic::kTextureSampleBias);
-  } else if (ident->name() == "textureSampleCompare") {
+  } else if (name == "textureSampleCompare") {
     ident->set_intrinsic(ast::Intrinsic::kTextureSampleCompare);
-  } else if (ident->name() == "textureSampleGrad") {
+  } else if (name == "textureSampleGrad") {
     ident->set_intrinsic(ast::Intrinsic::kTextureSampleGrad);
-  } else if (ident->name() == "textureSampleLevel") {
+  } else if (name == "textureSampleLevel") {
     ident->set_intrinsic(ast::Intrinsic::kTextureSampleLevel);
-  } else if (ident->name() == "trunc") {
+  } else if (name == "trunc") {
     ident->set_intrinsic(ast::Intrinsic::kTrunc);
   } else {
     return false;
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index b631141..1da0158 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -81,21 +81,6 @@
          stmts->last()->Is<ast::FallthroughStatement>();
 }
 
-std::string get_buffer_name(ast::Expression* expr) {
-  for (;;) {
-    if (auto* ident = expr->As<ast::IdentifierExpression>()) {
-      return ident->name();
-    } else if (auto* member = expr->As<ast::MemberAccessorExpression>()) {
-      expr = member->structure();
-    } else if (auto* array = expr->As<ast::ArrayAccessorExpression>()) {
-      expr = array->array();
-    } else {
-      break;
-    }
-  }
-  return "";
-}
-
 uint32_t convert_swizzle_to_index(const std::string& swizzle) {
   if (swizzle == "r" || swizzle == "x") {
     return 0;
@@ -684,17 +669,18 @@
     return true;
   }
 
-  auto name = ident->name();
-  auto caller_sym = module_->GetSymbol(name);
+  auto name = namer_->NameFor(ident->symbol());
+  auto caller_sym = ident->symbol();
   auto it = ep_func_name_remapped_.find(current_ep_sym_.to_str() + "_" +
                                         caller_sym.to_str());
   if (it != ep_func_name_remapped_.end()) {
     name = it->second;
   }
 
-  auto* func = module_->FindFunctionBySymbol(module_->GetSymbol(ident->name()));
+  auto* func = module_->FindFunctionBySymbol(ident->symbol());
   if (func == nullptr) {
-    error_ = "Unable to find function: " + name;
+    error_ =
+        "Unable to find function: " + module_->SymbolToName(ident->symbol());
     return false;
   }
 
@@ -782,7 +768,7 @@
       break;
     default:
       error_ = "Internal compiler error: Unhandled texture intrinsic '" +
-               ident->name() + "'";
+               module_->SymbolToName(ident->symbol()) + "'";
       return false;
   }
 
@@ -885,7 +871,7 @@
     case ast::Intrinsic::kMax:
     case ast::Intrinsic::kMin:
     case ast::Intrinsic::kClamp:
-      out = ident->name();
+      out = module_->SymbolToName(ident->symbol());
       break;
     case ast::Intrinsic::kFaceForward:
       out = "faceforward";
@@ -900,7 +886,8 @@
       out = "smoothstep";
       break;
     default:
-      error_ = "Unknown builtin method: " + ident->name();
+      error_ =
+          "Unknown builtin method: " + module_->SymbolToName(ident->symbol());
       return "";
   }
 
@@ -1948,9 +1935,12 @@
     ast::MemberAccessorExpression* expr) {
   auto* structure = expr->structure();
   auto* data_type = structure->result_type()->UnwrapAll();
+  // TODO(dsinclair): Swizzle
+  //
   // If the data is a multi-element swizzle then we will not load the swizzle
   // portion through the Load command.
-  if (data_type->Is<ast::type::Vector>() && expr->member()->name().size() > 1) {
+  if (data_type->Is<ast::type::Vector>() &&
+      module_->SymbolToName(expr->member()->symbol()).size() > 1) {
     return false;
   }
 
@@ -2364,6 +2354,21 @@
   return true;
 }
 
+std::string GeneratorImpl::get_buffer_name(ast::Expression* expr) {
+  for (;;) {
+    if (auto* ident = expr->As<ast::IdentifierExpression>()) {
+      return namer_->NameFor(ident->symbol());
+    } else if (auto* member = expr->As<ast::MemberAccessorExpression>()) {
+      expr = member->structure();
+    } else if (auto* array = expr->As<ast::ArrayAccessorExpression>()) {
+      expr = array->array();
+    } else {
+      break;
+    }
+  }
+  return "";
+}
+
 }  // namespace hlsl
 }  // namespace writer
 }  // namespace tint
diff --git a/src/writer/hlsl/generator_impl.h b/src/writer/hlsl/generator_impl.h
index 9c1a113..a8ac5d8 100644
--- a/src/writer/hlsl/generator_impl.h
+++ b/src/writer/hlsl/generator_impl.h
@@ -387,6 +387,7 @@
   };
 
   std::string current_ep_var_name(VarType type);
+  std::string get_buffer_name(ast::Expression* expr);
 
   std::string error_;
   size_t indent_ = 0;
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index 31f0364..7d920ac 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -563,17 +563,18 @@
     return true;
   }
 
-  auto name = ident->name();
-  auto caller_sym = module_->GetSymbol(name);
+  auto name = namer_->NameFor(ident->symbol());
+  auto caller_sym = ident->symbol();
   auto it = ep_func_name_remapped_.find(current_ep_sym_.to_str() + "_" +
                                         caller_sym.to_str());
   if (it != ep_func_name_remapped_.end()) {
     name = it->second;
   }
 
-  auto* func = module_->FindFunctionBySymbol(module_->GetSymbol(ident->name()));
+  auto* func = module_->FindFunctionBySymbol(ident->symbol());
   if (func == nullptr) {
-    error_ = "Unable to find function: " + name;
+    error_ =
+        "Unable to find function: " + module_->SymbolToName(ident->symbol());
     return false;
   }
 
@@ -678,7 +679,7 @@
       break;
     default:
       error_ = "Internal compiler error: Unhandled texture intrinsic '" +
-               ident->name() + "'";
+               module_->SymbolToName(ident->symbol()) + "'";
       return false;
   }
 
@@ -805,7 +806,7 @@
     case ast::Intrinsic::kTrunc:
     case ast::Intrinsic::kSign:
     case ast::Intrinsic::kClamp:
-      out += ident->name();
+      out += module_->SymbolToName(ident->symbol());
       break;
     case ast::Intrinsic::kAbs:
       if (ident->result_type()->Is<ast::type::F32>()) {
@@ -841,7 +842,8 @@
       out += "rsqrt";
       break;
     default:
-      error_ = "Unknown import method: " + ident->name();
+      error_ =
+          "Unknown import method: " + module_->SymbolToName(ident->symbol());
       return "";
   }
   return out;
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 37093fe..071ceab 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -441,12 +441,6 @@
     return false;
   }
 
-  // TODO(dsinclair): This should be using the namer to update the entry point
-  // name to a non-user provided string. Disable for now until we can update
-  // the inspector and land the same change in MSL / HLSL to all roll into Dawn
-  // at the same time.
-  // OperandList operands = {Operand::Int(stage), Operand::Int(id),
-  //                         Operand::String(func->name())};
   OperandList operands = {Operand::Int(stage), Operand::Int(id),
                           Operand::String(namer_->NameFor(func->symbol()))};
 
@@ -1119,7 +1113,8 @@
     return val;
   }
 
-  error_ = "unable to find variable with identifier: " + expr->name();
+  error_ = "unable to find variable with identifier: " +
+           mod_->SymbolToName(expr->symbol());
   return 0;
 }
 
@@ -1821,7 +1816,8 @@
 
   auto func_id = func_symbol_to_id_[ident->symbol().value()];
   if (func_id == 0) {
-    error_ = "unable to find called function: " + ident->name();
+    error_ = "unable to find called function: " +
+             mod_->SymbolToName(ident->symbol());
     return 0;
   }
   ops.push_back(Operand::Int(func_id));
@@ -1951,7 +1947,7 @@
     auto inst_id =
         intrinsic_to_glsl_method(ident->result_type(), ident->intrinsic());
     if (inst_id == 0) {
-      error_ = "unknown method " + ident->name();
+      error_ = "unknown method " + mod_->SymbolToName(ident->symbol());
       return 0;
     }
 
@@ -1962,7 +1958,8 @@
   }
 
   if (op == spv::Op::OpNop) {
-    error_ = "unable to determine operator for: " + ident->name();
+    error_ = "unable to determine operator for: " +
+             mod_->SymbolToName(ident->symbol());
     return 0;
   }
 
@@ -2173,7 +2170,8 @@
   }
 
   if (op == spv::Op::OpNop) {
-    error_ = "unable to determine operator for: " + ident->name();
+    error_ = "unable to determine operator for: " +
+             mod_->SymbolToName(ident->symbol());
     return false;
   }
 
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index bf70039..bbcc22d 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -338,7 +338,7 @@
 
 bool GeneratorImpl::EmitIdentifier(ast::IdentifierExpression* expr) {
   auto* ident = expr->As<ast::IdentifierExpression>();
-  out_ << ident->name();
+  out_ << module_.SymbolToName(ident->symbol());
   return true;
 }
 
