[ir] Fix Disassembly::EmitOperandList() with count

We need to take start_index into account when determining the end
index.

Change-Id: I0010ef9abb05839ee06ce3c6c7a18d0ab9470870
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/190540
Reviewed-by: dan sinclair <dsinclair@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/lang/core/ir/disassembly.cc b/src/tint/lang/core/ir/disassembly.cc
index bd48191..193b04e 100644
--- a/src/tint/lang/core/ir/disassembly.cc
+++ b/src/tint/lang/core/ir/disassembly.cc
@@ -576,7 +576,7 @@
 }
 
 void Disassembly::EmitOperandList(const Instruction* inst, size_t start_index, size_t count) {
-    size_t n = std::min(count, inst->Operands().Length());
+    size_t n = std::min(start_index + count, inst->Operands().Length());
     for (size_t i = start_index; i < n; i++) {
         if (i != start_index) {
             out_ << ", ";
diff --git a/src/tint/lang/core/ir/validator_test.cc b/src/tint/lang/core/ir/validator_test.cc
index 0ef9fb9..870d345 100644
--- a/src/tint/lang/core/ir/validator_test.cc
+++ b/src/tint/lang/core/ir/validator_test.cc
@@ -3319,8 +3319,8 @@
     ASSERT_NE(res, Success);
     EXPECT_EQ(res.Failure().reason.Str(),
               R"(:8:9 error: break_if: provides 2 values but 'loop' block $B2 expects 0 values
-        break_if true next_iteration: [ 1i ]  # -> [t: exit_loop loop_1, f: $B2]
-        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+        break_if true next_iteration: [ 1i, 2i ]  # -> [t: exit_loop loop_1, f: $B2]
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 :7:7 note: in block
       $B3: {  # continuing
@@ -3338,7 +3338,7 @@
         continue  # -> $B3
       }
       $B3: {  # continuing
-        break_if true next_iteration: [ 1i ]  # -> [t: exit_loop loop_1, f: $B2]
+        break_if true next_iteration: [ 1i, 2i ]  # -> [t: exit_loop loop_1, f: $B2]
       }
     }
     ret
@@ -3412,7 +3412,7 @@
     EXPECT_EQ(
         res.Failure().reason.Str(),
         R"(:11:45 error: break_if: operand with type 'i32' does not match 'loop' block $B3 target type 'f32'
-        break_if true next_iteration: [ 1i, 2i, 3.0f ]  # -> [t: exit_loop loop_1, f: $B3]
+        break_if true next_iteration: [ 1i, 2i, 3.0f, false ]  # -> [t: exit_loop loop_1, f: $B3]
                                             ^^
 
 :10:7 note: in block
@@ -3424,7 +3424,7 @@
                    ^^
 
 :11:49 error: break_if: operand with type 'f32' does not match 'loop' block $B3 target type 'u32'
-        break_if true next_iteration: [ 1i, 2i, 3.0f ]  # -> [t: exit_loop loop_1, f: $B3]
+        break_if true next_iteration: [ 1i, 2i, 3.0f, false ]  # -> [t: exit_loop loop_1, f: $B3]
                                                 ^^^^
 
 :10:7 note: in block
@@ -3446,7 +3446,7 @@
         continue  # -> $B4
       }
       $B4: {  # continuing
-        break_if true next_iteration: [ 1i, 2i, 3.0f ]  # -> [t: exit_loop loop_1, f: $B3]
+        break_if true next_iteration: [ 1i, 2i, 3.0f, false ]  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     ret