diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java b/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
index e88ebf3..5d57ddb 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.ir.regalloc;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -22,6 +23,7 @@
 import com.android.tools.r8.ir.analysis.type.TypeElement;
 import com.android.tools.r8.ir.code.BasicBlock;
 import com.android.tools.r8.ir.code.BasicBlockIterator;
+import com.android.tools.r8.ir.code.ConstNumber;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.InitClass;
 import com.android.tools.r8.ir.code.Instruction;
@@ -38,6 +40,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
+import java.util.NoSuchElementException;
 import java.util.Set;
 import java.util.function.Consumer;
 import java.util.function.UnaryOperator;
@@ -583,6 +586,42 @@
     assertEquals(2, scheduler.getUsedTempRegisters());
   }
 
+  @Test
+  public void reproNoSuchElementException() {
+    CollectMovesIterator moves = new CollectMovesIterator();
+    int temp = 53;
+    int args = 1;
+    RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp, args);
+    scheduler.addMove(new RegisterMove(23, 15, TypeElement.getInt()));
+    scheduler.addMove(new RegisterMove(26, 14, TypeElement.getInt()));
+    scheduler.addMove(new RegisterMove(15, 20, TypeElement.getLong()));
+    scheduler.addMove(new RegisterMove(17, 27, TypeElement.getLong()));
+    scheduler.addMove(new RegisterMove(19, 4, TypeElement.getLong()));
+    scheduler.addMove(new RegisterMove(21, 16, TypeElement.getLong()));
+    scheduler.addMove(new RegisterMove(24, 6, TypeElement.getInt()));
+    scheduler.addMove(new RegisterMove(25, 7, TypeElement.getInt()));
+    scheduler.addMove(new RegisterMove(14, 8, TypeElement.getInt()));
+    scheduler.addMove(new RegisterMove(30, 9, TypeElement.getInt()));
+    scheduler.addMove(new RegisterMove(31, 13, TypeElement.getInt()));
+    scheduler.addMove(new RegisterMove(34, 1, TypeElement.getInt()));
+    scheduler.addMove(
+        new RegisterMove(
+            27,
+            TypeElement.getInt(),
+            new ConstNumber(new Value(0, TypeElement.getInt(), null), 3)));
+    scheduler.addMove(
+        new RegisterMove(
+            28,
+            TypeElement.getInt(),
+            new ConstNumber(new Value(1, TypeElement.getInt(), null), 18)));
+    try {
+      scheduler.schedule();
+      fail();
+    } catch (NoSuchElementException e) {
+      // Expected.
+    }
+  }
+
   // Debugging aid.
   private void printMoves(List<Instruction> moves) {
     System.out.println("Generated moves:");
diff --git a/tools/d8.py b/tools/d8.py
index b831849..6c2dbc2 100755
--- a/tools/d8.py
+++ b/tools/d8.py
@@ -17,6 +17,11 @@
                       '--commit_hash',
                       help='Commit hash of D8 to use.',
                       default=None)
+    parser.add_option('--debug-agent',
+                      '--debug_agent',
+                      help='Enable Java debug agent and suspend compilation',
+                      default=False,
+                      action='store_true')
     parser.add_option('--disable-assertions',
                       '--disable_assertions',
                       help='Disable assertions when running',
@@ -45,6 +50,7 @@
     return toolhelper.run('d8',
                           d8_args,
                           build=not options.no_build,
+                          debug_agent=options.debug_agent,
                           disable_assertions=options.disable_assertions,
                           jar=utils.find_r8_jar_from_options(options),
                           main='com.android.tools.r8.D8',
