Merge commit 'ec41914f24541a9400c8beb987cf4e36fc991d6c' into dev-release
diff --git a/src/main/java/com/android/tools/r8/retrace/Retrace.java b/src/main/java/com/android/tools/r8/retrace/Retrace.java
index 5bb9ca1..2b01885 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -16,18 +16,18 @@
 import com.android.tools.r8.retrace.internal.RetraceAbortException;
 import com.android.tools.r8.retrace.internal.RetracerImpl;
 import com.android.tools.r8.retrace.internal.StackTraceRegularExpressionParser;
+import com.android.tools.r8.utils.Box;
 import com.android.tools.r8.utils.ExceptionDiagnostic;
 import com.android.tools.r8.utils.ListUtils;
 import com.android.tools.r8.utils.OptionsParsing;
 import com.android.tools.r8.utils.OptionsParsing.ParseContext;
+import com.android.tools.r8.utils.Pair;
 import com.android.tools.r8.utils.StringDiagnostic;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.Timing;
 import com.google.common.base.Charsets;
 import com.google.common.base.Equivalence;
 import com.google.common.base.Equivalence.Wrapper;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterators;
 import com.google.common.io.CharStreams;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -39,17 +39,14 @@
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Scanner;
 import java.util.Set;
-import java.util.TreeMap;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -178,7 +175,7 @@
    * @param stackTrace the stack trace to be retrace
    * @return list of potentially ambiguous stack traces.
    */
-  public List<Iterator<T>> retraceStackTrace(List<T> stackTrace) {
+  public List<List<List<T>>> retraceStackTrace(List<T> stackTrace) {
     ListUtils.forEachWithIndex(
         stackTrace,
         (line, lineNumber) -> {
@@ -190,37 +187,43 @@
         });
     RetraceStackTraceElementProxyEquivalence<T, ST> equivalence =
         new RetraceStackTraceElementProxyEquivalence<>(isVerbose);
-    RetracedNodeState<T, ST> root = RetracedNodeState.initial(equivalence);
-    List<RetracedNodeState<T, ST>> allLeaves =
-        ListUtils.fold(
-            stackTrace,
-            (List<RetracedNodeState<T, ST>>) ImmutableList.of(root),
-            (acc, stackTraceLine) -> {
-              ST parsedLine = stackTraceLineParser.parse(stackTraceLine);
-              List<RetracedNodeState<T, ST>> newLeaves = new ArrayList<>();
-              for (RetracedNodeState<T, ST> previousNode : acc) {
-                RetraceStackTraceElementProxyResult<T, ST> result =
-                    proxyRetracer.retrace(parsedLine, previousNode.context);
-                result.stream()
-                    .forEach(
-                        retracedElement -> {
-                          if (retracedElement.isTopFrame() || !retracedElement.hasRetracedClass()) {
-                            previousNode.addChild(retracedElement, retracedElement.getContext());
-                          }
-                          previousNode.addFrameToCurrentChild(
-                              parsedLine.toRetracedItem(retracedElement, isVerbose));
-                        });
-                if (!previousNode.hasChildren()) {
-                  // This happens when there is nothing to retrace. Add the node to newLeaves to
-                  // ensure we keep retracing this path.
-                  previousNode.addChild(null, result.getResultContext());
-                }
-                newLeaves.addAll(previousNode.getChildren());
-              }
-              return newLeaves;
-            });
-    assert !allLeaves.isEmpty();
-    return ListUtils.map(allLeaves, RetracedNodeState::iterator);
+    List<List<List<T>>> finalResult = new ArrayList<>();
+    ListUtils.fold(
+        stackTrace,
+        RetraceStackTraceContext.empty(),
+        (context, stackTraceLine) -> {
+          ST parsedLine = stackTraceLineParser.parse(stackTraceLine);
+          List<Pair<RetraceStackTraceElementProxy<T, ST>, List<T>>> resultsForLine =
+              new ArrayList<>();
+          Box<List<T>> currentList = new Box<>();
+          Set<Wrapper<RetraceStackTraceElementProxy<T, ST>>> seen = new HashSet<>();
+          List<RetraceStackTraceContext> contexts = new ArrayList<>();
+          RetraceStackTraceElementProxyResult<T, ST> retraceResult =
+              proxyRetracer.retrace(parsedLine, context);
+          retraceResult.stream()
+              .forEach(
+                  retracedElement -> {
+                    if (retracedElement.isTopFrame() || !retracedElement.hasRetracedClass()) {
+                      if (seen.add(equivalence.wrap(retracedElement))) {
+                        currentList.set(new ArrayList<>());
+                        resultsForLine.add(Pair.create(retracedElement, currentList.get()));
+                        contexts.add(retracedElement.getContext());
+                      } else {
+                        currentList.empty();
+                      }
+                    }
+                    if (currentList.isSet()) {
+                      currentList.get().add(parsedLine.toRetracedItem(retracedElement, isVerbose));
+                    }
+                  });
+          resultsForLine.sort(Comparator.comparing(Pair::getFirst));
+          finalResult.add(ListUtils.map(resultsForLine, Pair::getSecond));
+          if (contexts.isEmpty()) {
+            return retraceResult.getResultContext();
+          }
+          return contexts.size() == 1 ? contexts.get(0) : RetraceStackTraceContext.empty();
+        });
+    return finalResult;
   }
 
   /**
@@ -598,63 +601,4 @@
       return new RetraceStackTraceElementProxyEquivalence<>(isVerbose);
     }
   }
-
-  private static class RetracedNodeState<T, ST extends StackTraceElementProxy<T, ST>>
-      implements Iterable<T> {
-
-    private final RetracedNodeState<T, ST> parent;
-    private final Set<Wrapper<RetraceStackTraceElementProxy<T, ST>>> seenSet = new HashSet<>();
-    private final Map<RetraceStackTraceElementProxy<T, ST>, RetracedNodeState<T, ST>> children =
-        new TreeMap<>(Comparator.nullsFirst(Comparator.naturalOrder()));
-    private RetracedNodeState<T, ST> currentChild;
-    private final RetraceStackTraceContext context;
-    private final List<T> frames = new ArrayList<>();
-    private final RetraceStackTraceElementProxyEquivalence<T, ST> equivalence;
-
-    private RetracedNodeState(
-        RetracedNodeState<T, ST> parent,
-        RetraceStackTraceContext context,
-        RetraceStackTraceElementProxyEquivalence<T, ST> equivalence) {
-      this.parent = parent;
-      this.context = context;
-      this.equivalence = equivalence;
-    }
-
-    private void addFrameToCurrentChild(T frame) {
-      if (currentChild != null) {
-        currentChild.frames.add(frame);
-      }
-    }
-
-    private void addChild(
-        RetraceStackTraceElementProxy<T, ST> element, RetraceStackTraceContext context) {
-      if (seenSet.add(equivalence.wrap(element))) {
-        RetracedNodeState<T, ST> newChild = new RetracedNodeState<>(this, context, equivalence);
-        this.currentChild = newChild;
-        children.put(element, newChild);
-      } else {
-        this.currentChild = null;
-      }
-    }
-
-    private static <T, ST extends StackTraceElementProxy<T, ST>> RetracedNodeState<T, ST> initial(
-        RetraceStackTraceElementProxyEquivalence<T, ST> equivalence) {
-      return new RetracedNodeState<>(null, RetraceStackTraceContext.empty(), equivalence);
-    }
-
-    @Override
-    public Iterator<T> iterator() {
-      return parent != null
-          ? Iterators.concat(parent.iterator(), frames.iterator())
-          : frames.iterator();
-    }
-
-    public boolean hasChildren() {
-      return !children.isEmpty();
-    }
-
-    public Collection<? extends RetracedNodeState<T, ST>> getChildren() {
-      return children.values();
-    }
-  }
 }
diff --git a/src/main/java/com/android/tools/r8/retrace/StringRetrace.java b/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
index e68c6f6..29ee4d2 100644
--- a/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
@@ -9,12 +9,10 @@
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.Keep;
 import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy;
-import com.android.tools.r8.utils.BooleanBox;
 import com.android.tools.r8.utils.ListUtils;
 import com.android.tools.r8.utils.StringUtils;
 import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Consumer;
@@ -79,31 +77,28 @@
    */
   public List<String> retrace(List<String> stackTrace) {
     List<String> retracedStrings = new ArrayList<>();
-    List<Iterator<String>> retracedStackTraces = retraceStackTrace(stackTrace);
-    if (retracedStackTraces.size() > 1 && isVerbose) {
-      retracedStrings.add("There are " + retracedStackTraces.size() + " ambiguous stack traces.");
-    }
-    for (int i = 0; i < retracedStackTraces.size(); i++) {
-      Iterator<String> result = retracedStackTraces.get(i);
-      BooleanBox insertOr = new BooleanBox(i > 0);
-      result.forEachRemaining(
-          stackTraceLine -> {
-            if (insertOr.get()) {
-              // We are reporting an ambiguous frame. To support retracing tools that retrace line
-              // by line we have to emit <OR> at the point of the first ' at ' if we can find it.
-              int indexToInsertOr = stackTraceLine.indexOf(" at ");
-              boolean hasSpace = indexToInsertOr >= 0;
-              if (indexToInsertOr < 0) {
-                indexToInsertOr =
-                    Math.max(StringUtils.firstNonWhitespaceCharacter(stackTraceLine), 0);
+    List<List<List<String>>> lists = retraceStackTrace(stackTrace);
+    for (List<List<String>> newLines : lists) {
+      ListUtils.forEachWithIndex(
+          newLines,
+          (inlineFrames, ambiguousIndex) -> {
+            for (int i = 0; i < inlineFrames.size(); i++) {
+              String stackTraceLine = inlineFrames.get(i);
+              if (i == 0 && ambiguousIndex > 0) {
+                // We are reporting an ambiguous frame. To support retracing tools that retrace line
+                // by line we have to emit <OR> at the point of the first 'at ' if we can find it.
+                int indexToInsertOr = stackTraceLine.indexOf("at ");
+                if (indexToInsertOr < 0) {
+                  indexToInsertOr =
+                      Math.max(StringUtils.firstNonWhitespaceCharacter(stackTraceLine), 0);
+                }
+                retracedStrings.add(
+                    stackTraceLine.substring(0, indexToInsertOr)
+                        + "<OR> "
+                        + stackTraceLine.substring(indexToInsertOr));
+              } else {
+                retracedStrings.add(stackTraceLine);
               }
-              retracedStrings.add(
-                  stackTraceLine.substring(0, indexToInsertOr)
-                      + (hasSpace ? "<OR>" : "<OR> ")
-                      + stackTraceLine.substring(indexToInsertOr));
-              insertOr.set(false);
-            } else {
-              retracedStrings.add(stackTraceLine);
             }
           });
     }
diff --git a/src/main/java/com/android/tools/r8/utils/Box.java b/src/main/java/com/android/tools/r8/utils/Box.java
index de67cf6..2e6f17c 100644
--- a/src/main/java/com/android/tools/r8/utils/Box.java
+++ b/src/main/java/com/android/tools/r8/utils/Box.java
@@ -62,4 +62,8 @@
   public int hashCode() {
     return Objects.hashCode(value);
   }
+
+  public void empty() {
+    value = null;
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 39b8239..9a95fa7 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -201,24 +201,6 @@
           .put(
               "145-alloc-tracking-stress",
               TestCondition.match(TestCondition.runtimes(DexVm.Version.V12_0_0)))
-          // Art in 12.0.0 beta4 will hang on this test when running on dx input.
-          // D8 will never generate the code introducing this (goto32 0)
-          // See: b/200660605
-          .put(
-              "083-compiler-regressions",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.DX),
-                  TestCondition.compilers(CompilerUnderTest.D8),
-                  TestCondition.runtimes(DexVm.Version.V12_0_0)))
-          // Art in 12.0.0 beta4 will hang on this test when running on dx input.
-          // D8 will never generate the code introducing this (goto32 0)
-          // See: b/200660605
-          .put(
-              "121-simple-suspend-check",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.DX),
-                  TestCondition.compilers(CompilerUnderTest.D8),
-                  TestCondition.runtimes(DexVm.Version.V12_0_0)))
           .build();
 
   // Tests that are flaky with the Art version we currently use.
@@ -666,15 +648,6 @@
   // Tests where the output of R8 fails when run with Art.
   private static final Multimap<String, TestCondition> failingRunWithArt =
       new ImmutableListMultimap.Builder<String, TestCondition>()
-          // The itf cache issue is hit on dx inputs on the runtime with the issue as we no longer
-          // desugar.
-          // TODO(b/198306901): Investigate this behavior change fully. Do we need a workaround?
-          .put(
-              "666-dex-cache-itf",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.DX),
-                  TestCondition.compilers(CompilerUnderTest.R8),
-                  TestCondition.runtimes(DexVm.Version.DEFAULT)))
           // The growth limit test fails after processing by R8 because R8 will eliminate an
           // "unneeded" const store. The following reflective call to the VM's GC will then see the
           // large array as still live and the subsequent allocations will fail to reach the desired
@@ -703,14 +676,6 @@
               "111-unresolvable-exception",
               TestCondition.match(
                   TestCondition.D8_COMPILER, TestCondition.runtimesUpTo(DexVm.Version.V4_4_4)))
-          // Fails because the code has to be desugared to run on art <= 6.0.1
-          // When running from dx code we don't desugar.
-          .put(
-              "530-checker-lse2",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.DX),
-                  TestCondition.compilers(CompilerUnderTest.R8, CompilerUnderTest.D8),
-                  TestCondition.runtimesUpTo(DexVm.Version.V6_0_1)))
           .put(
               "534-checker-bce-deoptimization",
               TestCondition.match(
@@ -771,17 +736,6 @@
               "550-new-instance-clinit",
               TestCondition.match(
                   TestCondition.D8_COMPILER, TestCondition.runtimes(DexVm.Version.V6_0_1)))
-          // Regression test for an issue that is not fixed on version 5.1.1. Throws an Exception
-          // instance instead of the expected NullPointerException. This bug is only tickled when
-          // running the R8 generated code when starting from jar or from dex code generated with
-          // dx. However, the code that R8 generates is valid and there is nothing we can do for
-          // this one.
-          .put(
-              "551-implicit-null-checks",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.NONE, DexTool.DX),
-                  TestCondition.R8DEX_COMPILER,
-                  TestCondition.runtimes(DexVm.Version.V5_1_1)))
           // Contains a method (B.<init>) which pass too few arguments to invoke. Also, contains an
           // iput on a static field.
           .put(
@@ -804,14 +758,6 @@
               TestCondition.match(TestCondition.runtimes(DexVm.Version.V4_0_4)))
           // Illegal class flags in Dalvik 4.0.4.
           .put("121-modifiers", TestCondition.match(TestCondition.runtimes(DexVm.Version.V4_0_4)))
-          // Switch regression still present in the DEX code produced by DX on Dalvik 4.0.4.
-          // The fix for b/177790310 is not applied for DEX input (when merging).
-          .put(
-              "095-switch-MAX_INT",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.DX),
-                  TestCondition.compilers(CompilerUnderTest.D8),
-                  TestCondition.runtimes(DexVm.Version.V4_0_4)))
           .build();
 
   // Tests where the output of R8/D8 runs in Art but produces different output than the expected.txt
@@ -901,17 +847,6 @@
                           CompilerUnderTest.R8,
                           CompilerUnderTest.R8CF,
                           CompilerUnderTest.R8_AFTER_D8))))
-          // Uses dex file version 37 and therefore only runs on Android N and above.
-          .put(
-              "370-dex-v37",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.DX),
-                  TestCondition.compilers(CompilerUnderTest.D8),
-                  TestCondition.runtimes(
-                      DexVm.Version.V4_0_4,
-                      DexVm.Version.V4_4_4,
-                      DexVm.Version.V5_1_1,
-                      DexVm.Version.V6_0_1)))
           // Class.forName() that fails due to verification error is removed.
           .put(
               "412-new-array",
@@ -1001,36 +936,6 @@
           .put("973-default-multidex", beforeAndroidN) // --min-sdk = 24
           .put("974-verify-interface-super", beforeAndroidN) // --min-sdk = 24
           .put("975-iface-private", beforeAndroidN) // --min-sdk = 24
-          // Uses dex file version 37 and therefore only runs on Android N and above.
-          .put(
-              "972-iface-super-multidex",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.DX),
-                  TestCondition.runtimes(
-                      DexVm.Version.V4_0_4,
-                      DexVm.Version.V4_4_4,
-                      DexVm.Version.V5_1_1,
-                      DexVm.Version.V6_0_1)))
-          // Uses dex file version 37 and therefore only runs on Android N and above.
-          .put(
-              "978-virtual-interface",
-              TestCondition.or(
-                  TestCondition.match(
-                      TestCondition.tools(DexTool.DX),
-                      TestCondition.compilers(CompilerUnderTest.D8),
-                      TestCondition.runtimes(
-                          DexVm.Version.V4_0_4,
-                          DexVm.Version.V4_4_4,
-                          DexVm.Version.V5_1_1,
-                          DexVm.Version.V6_0_1)),
-                  // On V4_0_4 and V4_4_4 the test will throw a verification error.
-                  TestCondition.match(
-                      TestCondition.tools(DexTool.DX),
-                      TestCondition.compilers(
-                          CompilerUnderTest.R8,
-                          CompilerUnderTest.R8_AFTER_D8,
-                          CompilerUnderTest.D8_AFTER_R8CF),
-                      TestCondition.runtimes(DexVm.Version.V4_0_4, DexVm.Version.V4_4_4))))
           .put("979-const-method-handle", beforeAndroidP)
           // Missing class junit.framework.Assert (see JunitAvailabilityInHostArtTest).
           // TODO(120884788): Add this again.
@@ -1068,16 +973,6 @@
           // Dex code contains a method (B.<init>) which pass too few arguments to invoke, and it
           // also contains an iput on a static field.
           .put("600-verifier-fails", TestCondition.match(TestCondition.R8DEX_COMPILER))
-          // Contains a method that falls off the end without a return.
-          .put(
-              "606-erroneous-class",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.DX),
-                  TestCondition.R8_NOT_AFTER_D8_COMPILER,
-                  LEGACY_RUNTIME))
-          // Dex input contains an illegal InvokeSuper in Z.foo() to Y.foo()
-          // that R8 will fail to compile.
-          .put("974-verify-interface-super", TestCondition.match(TestCondition.R8DEX_COMPILER))
           // R8 generates too large code in Goto.bigGoto(). b/74327727
           .put("003-omnibus-opcodes", TestCondition.match(TestCondition.D8_AFTER_R8CF_COMPILER))
           .build();
@@ -1102,8 +997,6 @@
           .put("506-verify-aput", TestCondition.match(TestCondition.R8DEX_COMPILER))
           // Test with invalid register usage: returns a register of either long or double.
           .put("510-checker-try-catch", TestCondition.match(TestCondition.R8DEX_COMPILER))
-          // Test with backport method which is still present in DX input.
-          .put("530-checker-lse2", TestCondition.match(TestCondition.tools(DexTool.DX)))
           // Test with invalid register usage: contains an int-to-byte on the result of aget-object.
           .put("518-null-array-get", TestCondition.match(TestCondition.R8DEX_COMPILER))
           // Test with invalid register usage: phi of int and float.
@@ -1112,21 +1005,11 @@
           .put("552-checker-primitive-typeprop", TestCondition.match(TestCondition.R8DEX_COMPILER))
           // Test with invalid register usage: invoke-static {v0,v0}, foo(IL)V
           .put("557-checker-ref-equivalent", TestCondition.match(TestCondition.R8DEX_COMPILER))
-          // Test with smali code that calls a method that needs to be desugared.
-          // The smali code is only present in the non-legacy test distrubution, so this only fails
-          // when running the "default" runtime.
-          .put(
-              "567-checker-compare",
-              TestCondition.or(
-                  TestCondition.match(TestCondition.runtimes(Runtime.ART_DEFAULT)),
-                  TestCondition.match(TestCondition.tools(DexTool.DX))))
           // This test is starting from invalid dex code. It splits up a double value and uses
           // the first register of a double with the second register of another double.
           .put("800-smali", TestCondition.match(TestCondition.R8DEX_COMPILER))
           // Contains a loop in the class hierarchy.
           .put("804-class-extends-itself", TestCondition.any())
-          // Test with backport method which is still present in DX input.
-          .put("912-classes", TestCondition.match(TestCondition.tools(DexTool.DX)))
           // These tests have illegal class flag combinations, so we reject them.
           .put("161-final-abstract-class", TestCondition.any())
           .build();
@@ -1227,14 +1110,6 @@
                   TestCondition.tools(DexTool.DX, DexTool.NONE), TestCondition.R8_COMPILER))
           // Produces wrong output when compiled in release mode, which we cannot express.
           .put("015-switch", TestCondition.match(TestCondition.runtimes(DexVm.Version.V4_0_4)))
-          // To prevent "Dex file with version '37' cannot be used with min sdk level '21'", which
-          // would otherwise happen because D8 passes through the DEX code from DX.
-          .put(
-              "800-smali",
-              TestCondition.match(
-                  TestCondition.tools(DexTool.DX),
-                  TestCondition.D8_COMPILER,
-                  TestCondition.runtimesFrom(DexVm.Version.V5_1_1)))
           .build();
 
   public static List<String> requireInliningToBeDisabled =
@@ -2548,8 +2423,7 @@
         expectException(CompilationError.class);
         throw new CompilationError(e.getMessage(), e);
       }
-      System.err.println("Should have failed R8/D8 compilation with a CompilationError.");
-      return;
+      throw new RuntimeException("Should have failed R8/D8 compilation with a CompilationError.");
     } else if (specification.failsWithX8) {
       expectException(Throwable.class);
       executeCompilerUnderTest(
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMethodVerboseStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMethodVerboseStackTrace.java
index 3facf5f..51acd54 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMethodVerboseStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMethodVerboseStackTrace.java
@@ -40,16 +40,11 @@
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 2 ambiguous stack traces.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.c(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.com.android.Foo"
             + " main(java.lang.String[])(Main.java)",
-        "\tat com.android.tools.r8.naming.retrace.Main.com.android.Foo"
-            + " main(java.lang.String[],com.android.Bar)(Main.java)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.c(Main.java)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void main(com.android.Bar)(Main.java)",
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void main(com.android.Bar)(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.com.android.Foo"
             + " main(java.lang.String[],com.android.Bar)(Main.java)");
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMissingLineStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMissingLineStackTrace.java
index 484fb5f..2e2a527 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMissingLineStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMissingLineStackTrace.java
@@ -27,121 +27,28 @@
     return Arrays.asList(
         "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java:7)",
+        "    <OR> at com.android.tools.r8.R8.foo(R8.java:7)",
         "    at com.android.tools.r8.R8.bar(R8.java:8)",
+        "    <OR> at com.android.tools.r8.R8.foo(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java:7)",
-        "    at com.android.tools.r8.R8.bar(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java:7)",
-        "    at com.android.tools.r8.R8.foo(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java:7)",
-        "    at com.android.tools.r8.R8.foo(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java:7)",
-        "    at com.android.tools.r8.R8.bar(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java:7)",
-        "    at com.android.tools.r8.R8.bar(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java:7)",
-        "    at com.android.tools.r8.R8.foo(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java:7)",
-        "    at com.android.tools.r8.R8.foo(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java:9)",
+        "    <OR> at com.android.tools.r8.R8.foo(R8.java:9)",
         "    ... 42 more");
   }
 
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 8 ambiguous stack traces.",
         "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:7)",
+        "    <OR> at com.android.tools.r8.R8.void foo(int)(R8.java:7)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:8)",
+        "    <OR> at com.android.tools.r8.R8.void foo(int)(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:7)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:7)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:7)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:7)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:7)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:7)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:9)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:7)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:8)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java:9)",
+        "    <OR> at com.android.tools.r8.R8.void foo(int)(R8.java:9)",
         "    ... 42 more");
   }
 
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousStackTrace.java
index f6704a4..a5241a8 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousStackTrace.java
@@ -27,121 +27,28 @@
     return Arrays.asList(
         "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.foo(R8.java)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.foo(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.foo(R8.java)",
         "    ... 42 more");
   }
 
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 8 ambiguous stack traces.",
         "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    ... 42 more");
   }
 
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithMultipleLineMappingsStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithMultipleLineMappingsStackTrace.java
index 4015e0e..51a9249 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithMultipleLineMappingsStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithMultipleLineMappingsStackTrace.java
@@ -38,16 +38,11 @@
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 3 ambiguous stack traces.",
         "java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.void foo(int)(Internal.java:10)",
-        "<OR> java.lang.IndexOutOfBoundsException",
-        "\tat java.util.ArrayList.get(ArrayList.java:411)",
-        "\tat com.android.tools.r8.Internal.void foo(int)(Internal.java:11)",
-        "<OR> java.lang.IndexOutOfBoundsException",
-        "\tat java.util.ArrayList.get(ArrayList.java:411)",
-        "\tat com.android.tools.r8.Internal.void foo(int)(Internal.java:12)");
+        "\t<OR> at com.android.tools.r8.Internal.void foo(int)(Internal.java:11)",
+        "\t<OR> at com.android.tools.r8.Internal.void foo(int)(Internal.java:12)");
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureStackTrace.java
index 212976f..c9ed69c 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureStackTrace.java
@@ -39,19 +39,12 @@
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 4 ambiguous stack traces.",
         "java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.boolean foo(int,int)(Internal.java:13)",
-        "<OR> java.lang.IndexOutOfBoundsException",
-        "\tat java.util.ArrayList.get(ArrayList.java:411)",
-        "\tat com.android.tools.r8.Internal.void foo(int)(Internal.java:10)",
-        "<OR> java.lang.IndexOutOfBoundsException",
-        "\tat java.util.ArrayList.get(ArrayList.java:411)",
-        "\tat com.android.tools.r8.Internal.void foo(int,boolean)(Internal.java:12)",
-        "<OR> java.lang.IndexOutOfBoundsException",
-        "\tat java.util.ArrayList.get(ArrayList.java:411)",
-        "\tat com.android.tools.r8.Internal.void foo(int,int)(Internal.java:11)");
+        "\t<OR> at com.android.tools.r8.Internal.void foo(int)(Internal.java:10)",
+        "\t<OR> at com.android.tools.r8.Internal.void foo(int,boolean)(Internal.java:12)",
+        "\t<OR> at com.android.tools.r8.Internal.void foo(int,int)(Internal.java:11)");
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/DifferentLineNumberSpanStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/DifferentLineNumberSpanStackTrace.java
index b4efedd..ef9853e 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/DifferentLineNumberSpanStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/DifferentLineNumberSpanStackTrace.java
@@ -29,24 +29,19 @@
     return Arrays.asList(
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.method1(Main.java:42)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.method1(Main.java:43)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.method1(Main.java:44)");
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.method1(Main.java:43)",
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.method1(Main.java:44)");
   }
 
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 3 ambiguous stack traces.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " method1(java.lang.String)(Main.java:42)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void"
             + " method1(java.lang.String)(Main.java:43)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void"
             + " method1(java.lang.String)(Main.java:44)");
   }
 
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleLinesNoLineNumberStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleLinesNoLineNumberStackTrace.java
index a961d7b..b1a31db 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleLinesNoLineNumberStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleLinesNoLineNumberStackTrace.java
@@ -31,20 +31,17 @@
     return Arrays.asList(
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.method1(Main.java)",
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.method1(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java)");
   }
 
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 2 ambiguous stack traces.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " main(java.lang.String[])(Main.java:153)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void"
             + " method1(java.lang.String)(Main.java:42)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " main(java.lang.String[])(Main.java:28)");
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleOriginalLinesNoLineNumberStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleOriginalLinesNoLineNumberStackTrace.java
index a4b4fa3..93a3567 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleOriginalLinesNoLineNumberStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleOriginalLinesNoLineNumberStackTrace.java
@@ -33,12 +33,10 @@
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 2 ambiguous stack traces.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " method1(java.lang.String)(Main.java:42)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void"
             + " method1(java.lang.String)(Main.java:43)");
   }
 
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscatedLineNumberWithOverrideTest.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscatedLineNumberWithOverrideTest.java
index 273b002..d444bcf 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscatedLineNumberWithOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscatedLineNumberWithOverrideTest.java
@@ -38,11 +38,7 @@
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:3)",
         "\tat com.android.tools.r8.naming.retrace.Main.overload1(Main.java)",
-        "\tat com.android.tools.r8.naming.retrace.Main.definedOverload(Main.java)",
-        "\tat com.android.tools.r8.naming.retrace.Main.mainPC(Main.java:42)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:3)",
-        "\tat com.android.tools.r8.naming.retrace.Main.overload2(Main.java)",
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.overload2(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.definedOverload(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.mainPC(Main.java:42)");
   }
@@ -50,32 +46,13 @@
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 4 ambiguous stack traces.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String)(Main.java:3)",
         "\tat com.android.tools.r8.naming.retrace.Main.void overload1()(Main.java:7)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void definedOverload()(Main.java:7)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " mainPC(java.lang.String[])(Main.java:42)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String)(Main.java:3)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void overload1()(Main.java:7)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " definedOverload(java.lang.String)(Main.java:11)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " mainPC(java.lang.String[])(Main.java:42)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String)(Main.java:3)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void"
             + " overload2(java.lang.String)(Main.java:11)",
         "\tat com.android.tools.r8.naming.retrace.Main.void definedOverload()(Main.java:7)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " mainPC(java.lang.String[])(Main.java:42)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String)(Main.java:3)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " overload2(java.lang.String)(Main.java:11)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void"
             + " definedOverload(java.lang.String)(Main.java:11)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " mainPC(java.lang.String[])(Main.java:42)");
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/OutsideLineRangeStackTraceTest.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/OutsideLineRangeStackTraceTest.java
index 81587cf..ea9ada4 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/OutsideLineRangeStackTraceTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/OutsideLineRangeStackTraceTest.java
@@ -43,18 +43,12 @@
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 2 ambiguous stack traces.",
         "java.io.IOException: INVALID_SENDER",
         "\tat some.other.Class.void method1()(Class.java:42)",
         "\tat some.other.Class.void method1()(Class.java:42)",
         "\tat some.Class.a(Class.java:27)",
-        // TODO(b/202055473): Could emit range 11-13.
         "\tat some.Class.void method2()(Class.java)",
-        "<OR> java.io.IOException: INVALID_SENDER",
-        "\tat some.other.Class.void method1()(Class.java:42)",
-        "\tat some.other.Class.void method1()(Class.java:42)",
-        "\tat some.Class.a(Class.java:27)",
-        "\tat some.Class.void method2()(Class.java:10)");
+        "\t<OR> at some.Class.void method2()(Class.java:10)");
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/SingleLineNoLineNumberStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/SingleLineNoLineNumberStackTrace.java
index c30fdbf..914cc4b 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/SingleLineNoLineNumberStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/SingleLineNoLineNumberStackTrace.java
@@ -42,20 +42,13 @@
         "\tat com.android.tools.r8.naming.retrace.Main.method2(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.main2(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.main3(Main.java)",
-        "\tat com.android.tools.r8.naming.retrace.Main.main4(Main.java:153)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.method1(Main.java:42)",
-        "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:28)",
-        "\tat com.android.tools.r8.naming.retrace.Main.method2(Main.java)",
-        "\tat com.android.tools.r8.naming.retrace.Main.main2(Main.java)",
-        "\tat com.android.tools.r8.naming.retrace.Main.method3(Main.java)",
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.method3(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.main4(Main.java:153)");
   }
 
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 6 ambiguous stack traces.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " method1(java.lang.String)(Main.java:42)",
@@ -64,67 +57,17 @@
             + " method2(java.lang.String)(Main.java:42)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " main2(java.lang.String[])(Main.java:29)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main3(java.lang.String[])(Main.java:30)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main4(java.lang.String[])(Main.java:153)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method1(java.lang.String)(Main.java:42)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:28)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method2(java.lang.String)(Main.java:42)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main2(java.lang.String[])(Main.java:29)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method3(java.lang.String)(Main.java:72)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main4(java.lang.String[])(Main.java:153)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method1(java.lang.String)(Main.java:42)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:28)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void"
             + " method2(java.lang.String)(Main.java:43)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " main2(java.lang.String[])(Main.java:29)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main3(java.lang.String[])(Main.java:30)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main4(java.lang.String[])(Main.java:153)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method1(java.lang.String)(Main.java:42)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:28)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method2(java.lang.String)(Main.java:43)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main2(java.lang.String[])(Main.java:29)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method3(java.lang.String)(Main.java:72)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main4(java.lang.String[])(Main.java:153)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method1(java.lang.String)(Main.java:42)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:28)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void"
             + " method2(java.lang.String)(Main.java:44)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " main2(java.lang.String[])(Main.java:29)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " main3(java.lang.String[])(Main.java:30)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main4(java.lang.String[])(Main.java:153)",
-        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method1(java.lang.String)(Main.java:42)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:28)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " method2(java.lang.String)(Main.java:44)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
-            + " main2(java.lang.String[])(Main.java:29)",
-        "\tat com.android.tools.r8.naming.retrace.Main.void"
+        "\t<OR> at com.android.tools.r8.naming.retrace.Main.void"
             + " method3(java.lang.String)(Main.java:72)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " main4(java.lang.String[])(Main.java:153)");
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/UnknownSourceStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/UnknownSourceStackTrace.java
index 3697b0c..a55423e 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/UnknownSourceStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/UnknownSourceStackTrace.java
@@ -27,121 +27,28 @@
     return Arrays.asList(
         "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.foo(R8.java)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.foo(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.bar(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.foo(R8.java)",
         "    ... 42 more");
   }
 
   @Override
   public List<String> retraceVerboseStackTrace() {
     return Arrays.asList(
-        "There are 8 ambiguous stack traces.",
         "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
-        "    ... 42 more",
-        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
-        "    at com.android.tools.r8.R8.main(Unknown Source)",
-        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
-        "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
+        "    <OR> at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    ... 42 more");
   }
 
diff --git a/tools/create_art_tests.py b/tools/create_art_tests.py
index 978b086..a64fe71 100755
--- a/tools/create_art_tests.py
+++ b/tools/create_art_tests.py
@@ -11,7 +11,6 @@
                           'android', 'tools', 'r8', 'art')
 TEST_DIR = os.path.join('tests', '2017-10-04', 'art')
 TOOLCHAINS = [
-    ("dx", os.path.join(TEST_DIR, "dx")),
     ("none", os.path.join(TEST_DIR, "dx")),
 ]
 TOOLS = ["r8", "d8", "r8cf"]