Consider trivial loops in workaround code.

Bug: 129901036
Change-Id: I972460d74cbb0e8df2383313e958251f55ff30f3
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index 52284d1..e47b1b9 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -3976,7 +3976,8 @@
           // header. If we ever end up computing exact loop headers, use that here instead.
           // The loop is conditional if it has at least two normal successors.
           BasicBlock target = handler.endOfGotoChain();
-          if (target.getPredecessors().size() > 2
+          if (target != null
+              && target.getPredecessors().size() > 2
               && target.getNormalPredecessors().size() > 1
               && target.getNormalSuccessors().size() > 1) {
             Instruction fixit = new AlwaysMaterializingNop();
diff --git a/src/test/java/com/android/tools/r8/debuginfo/Regress129901036Test.java b/src/test/java/com/android/tools/r8/debuginfo/Regress129901036Test.java
new file mode 100644
index 0000000..294662c
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/debuginfo/Regress129901036Test.java
@@ -0,0 +1,35 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.debuginfo;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+// Copy of Regress111337896Test.java modified to hit the trivial loop issue.
+public class Regress129901036Test {
+
+  public static void regress129901036() {
+    Iterator it = Arrays.asList(new Object()).iterator();
+    while (it.hasNext()) { // Loop must be a conditional to hit the issue.
+      it.next();
+      try {
+        noThrow();
+        noThrow();
+        noThrow();
+        // Workaround failed to handle a trivial loop when searching for a possible loop header.
+      } catch (Exception e) { while (true); }
+      // The normal successor may differ from the exceptional one and still cause the issue.
+      it.hasNext();
+    }
+  }
+
+  public static void noThrow() throws Exception {
+    // Intentionally empty.
+  }
+
+  public static void main(String[] args) {
+    regress129901036();
+    System.out.print("aok");
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/debuginfo/Regress129901036TestRunner.java b/src/test/java/com/android/tools/r8/debuginfo/Regress129901036TestRunner.java
new file mode 100644
index 0000000..bb00399
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/debuginfo/Regress129901036TestRunner.java
@@ -0,0 +1,39 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.debuginfo;
+
+import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class Regress129901036TestRunner extends TestBase {
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withDexRuntime(Version.V5_1_1).build();
+  }
+
+  private final TestParameters parameters;
+
+  public Regress129901036TestRunner(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void test() throws Exception {
+    testForD8()
+        .addProgramClasses(Regress129901036Test.class)
+        .setMode(CompilationMode.RELEASE)
+        .setMinApi(parameters.getRuntime().asDex().getMinApiLevel())
+        .run(parameters.getRuntime(), Regress129901036Test.class)
+        .assertSuccessWithOutput("aok");
+  }
+}