[tint][ir] Have the Validator use the Disassembly::NameOf()

Instead of getting the name from the module. This means the validator
will use the correct name for things that were given a temporary name in
the disassembly.

Change-Id: I31d306d2b7b200a3ca5db8ba833f2f83f525f574
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/186462
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/core/ir/validator.cc b/src/tint/lang/core/ir/validator.cc
index 2299363..9ffcc2e 100644
--- a/src/tint/lang/core/ir/validator.cc
+++ b/src/tint/lang/core/ir/validator.cc
@@ -140,7 +140,10 @@
     /// @returns success or failure
     Result<SuccessType> Run();
 
-  protected:
+  private:
+    /// @returns the IR disassembly, performing a disassemble if this is the first call.
+    ir::Disassembly& Disassembly();
+
     /// Adds an error for the @p inst and highlights the instruction in the disassembly
     /// @param inst the instruction
     /// @returns the diagnostic
@@ -208,7 +211,7 @@
 
     /// @param v the value to get the name for
     /// @returns the name for the given value
-    std::string Name(const Value* v);
+    StyledText NameOf(const Value* v);
 
     /// Checks the given operand is not null
     /// @param inst the instruction
@@ -338,14 +341,12 @@
   private:
     const Module& mod_;
     Capabilities capabilities_;
-    std::optional<Disassembly> disassembly_;
+    std::optional<ir::Disassembly> disassembly_;  // Use Disassembly()
     diag::List diagnostics_;
     const Block* current_block_ = nullptr;
     Hashset<const Function*, 4> all_functions_;
     Hashset<const Instruction*, 4> visited_instructions_;
     Vector<const ControlInstruction*, 8> control_stack_;
-
-    void DisassembleIfNeeded();
 };
 
 Validator::Validator(const Module& mod, Capabilities capabilities)
@@ -353,10 +354,11 @@
 
 Validator::~Validator() = default;
 
-void Validator::DisassembleIfNeeded() {
+ir::Disassembly& Validator::Disassembly() {
     if (!disassembly_) {
         disassembly_.emplace(Disassemble(mod_));
     }
+    return *disassembly_;
 }
 
 Result<SuccessType> Validator::Run() {
@@ -364,7 +366,7 @@
 
     for (auto& func : mod_.functions) {
         if (!all_functions_.Add(func.Get())) {
-            AddError(func) << "function " << style::Function(Name(func.Get()))
+            AddError(func) << "function " << NameOf(func.Get())
                            << " added to module multiple times";
         }
     }
@@ -383,17 +385,15 @@
     }
 
     if (diagnostics_.ContainsErrors()) {
-        DisassembleIfNeeded();
         diagnostics_.AddNote(tint::diag::System::IR, Source{}) << "# Disassembly\n"
-                                                               << disassembly_->Text();
+                                                               << Disassembly().Text();
         return Failure{std::move(diagnostics_)};
     }
     return Success;
 }
 
 diag::Diagnostic& Validator::AddError(const Instruction* inst) {
-    DisassembleIfNeeded();
-    auto src = disassembly_->InstructionSource(inst);
+    auto src = Disassembly().InstructionSource(inst);
     auto& diag = AddError(src) << inst->FriendlyName() << ": ";
 
     if (current_block_) {
@@ -403,9 +403,8 @@
 }
 
 diag::Diagnostic& Validator::AddError(const Instruction* inst, size_t idx) {
-    DisassembleIfNeeded();
     auto src =
-        disassembly_->OperandSource(Disassembly::IndexedValue{inst, static_cast<uint32_t>(idx)});
+        Disassembly().OperandSource(Disassembly::IndexedValue{inst, static_cast<uint32_t>(idx)});
     auto& diag = AddError(src) << inst->FriendlyName() << ": ";
 
     if (current_block_) {
@@ -416,9 +415,8 @@
 }
 
 diag::Diagnostic& Validator::AddResultError(const Instruction* inst, size_t idx) {
-    DisassembleIfNeeded();
     auto src =
-        disassembly_->ResultSource(Disassembly::IndexedValue{inst, static_cast<uint32_t>(idx)});
+        Disassembly().ResultSource(Disassembly::IndexedValue{inst, static_cast<uint32_t>(idx)});
     auto& diag = AddError(src) << inst->FriendlyName() << ": ";
 
     if (current_block_) {
@@ -428,60 +426,51 @@
 }
 
 diag::Diagnostic& Validator::AddError(const Block* blk) {
-    DisassembleIfNeeded();
-    auto src = disassembly_->BlockSource(blk);
+    auto src = Disassembly().BlockSource(blk);
     return AddError(src);
 }
 
 diag::Diagnostic& Validator::AddError(const BlockParam* param) {
-    DisassembleIfNeeded();
-    auto src = disassembly_->BlockParamSource(param);
+    auto src = Disassembly().BlockParamSource(param);
     return AddError(src);
 }
 
 diag::Diagnostic& Validator::AddError(const Function* func) {
-    DisassembleIfNeeded();
-    auto src = disassembly_->FunctionSource(func);
+    auto src = Disassembly().FunctionSource(func);
     return AddError(src);
 }
 
 diag::Diagnostic& Validator::AddError(const FunctionParam* param) {
-    DisassembleIfNeeded();
-    auto src = disassembly_->FunctionParamSource(param);
+    auto src = Disassembly().FunctionParamSource(param);
     return AddError(src);
 }
 
 diag::Diagnostic& Validator::AddNote(const Instruction* inst) {
-    DisassembleIfNeeded();
-    auto src = disassembly_->InstructionSource(inst);
+    auto src = Disassembly().InstructionSource(inst);
     return AddNote(src);
 }
 
 diag::Diagnostic& Validator::AddNote(const Function* func) {
-    DisassembleIfNeeded();
-    auto src = disassembly_->FunctionSource(func);
+    auto src = Disassembly().FunctionSource(func);
     return AddNote(src);
 }
 
 diag::Diagnostic& Validator::AddNote(const Instruction* inst, size_t idx) {
-    DisassembleIfNeeded();
     auto src =
-        disassembly_->OperandSource(Disassembly::IndexedValue{inst, static_cast<uint32_t>(idx)});
+        Disassembly().OperandSource(Disassembly::IndexedValue{inst, static_cast<uint32_t>(idx)});
     return AddNote(src);
 }
 
 diag::Diagnostic& Validator::AddNote(const Block* blk) {
-    DisassembleIfNeeded();
-    auto src = disassembly_->BlockSource(blk);
+    auto src = Disassembly().BlockSource(blk);
     return AddNote(src);
 }
 
 diag::Diagnostic& Validator::AddError(Source src) {
     auto& diag = diagnostics_.AddError(tint::diag::System::IR, src);
     if (src.range != Source::Range{{}}) {
-        DisassembleIfNeeded();
-        diag.source.file = disassembly_->File().get();
-        diag.owned_file = disassembly_->File();
+        diag.source.file = Disassembly().File().get();
+        diag.owned_file = Disassembly().File();
     }
     return diag;
 }
@@ -489,15 +478,14 @@
 diag::Diagnostic& Validator::AddNote(Source src) {
     auto& diag = diagnostics_.AddNote(tint::diag::System::IR, src);
     if (src.range != Source::Range{{}}) {
-        DisassembleIfNeeded();
-        diag.source.file = disassembly_->File().get();
-        diag.owned_file = disassembly_->File();
+        diag.source.file = Disassembly().File().get();
+        diag.owned_file = Disassembly().File();
     }
     return diag;
 }
 
-std::string Validator::Name(const Value* v) {
-    return mod_.NameOf(v).Name();
+StyledText Validator::NameOf(const Value* value) {
+    return Disassembly().NameOf(value);
 }
 
 void Validator::CheckOperandNotNull(const Instruction* inst, const ir::Value* operand, size_t idx) {
diff --git a/src/tint/lang/core/ir/validator_test.cc b/src/tint/lang/core/ir/validator_test.cc
index 6a05c0f..762fe7d 100644
--- a/src/tint/lang/core/ir/validator_test.cc
+++ b/src/tint/lang/core/ir/validator_test.cc
@@ -139,7 +139,7 @@
     auto res = ir::Validate(mod);
     ASSERT_NE(res, Success);
     EXPECT_EQ(res.Failure().reason.Str(),
-              R"(:1:1 error: function 'my_func' added to module multiple times
+              R"(:1:1 error: function %my_func added to module multiple times
 %my_func = func(%2:i32, %3:f32):void {
 ^^^^^^^^