Resolve flakiness of Art800 test

Bug: 116282409
Change-Id: I94471bbd8ca7f7619b8cefcf2ab46326380b09ac
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 2f40a77..6436654 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -538,10 +538,10 @@
 
   static RuntimeException unwrapExecutionException(ExecutionException executionException) {
     Throwable cause = executionException.getCause();
-    if (cause instanceof CompilationError) {
+    if (cause instanceof Error) {
       // add original exception as suppressed exception to provide the original stack trace
       cause.addSuppressed(executionException);
-      throw (CompilationError) cause;
+      throw (Error) cause;
     } else if (cause instanceof RuntimeException) {
       cause.addSuppressed(executionException);
       throw (RuntimeException) cause;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CallGraph.java b/src/main/java/com/android/tools/r8/ir/conversion/CallGraph.java
index 524de92..7b9ce55 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CallGraph.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CallGraph.java
@@ -232,8 +232,7 @@
     });
     Set<DexEncodedMethod> methods =
         leaves.stream().map(x -> x.method).collect(Collectors.toCollection(LinkedHashSet::new));
-    // TODO(b/116282409): Resolve why shuffling makes art.none.r8.Art800_smaliTest flaky.
-    return methods;
+    return shuffle.order(methods);
   }
 
   public static class CycleEliminator {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index d855e0e..deac5eb 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -2225,7 +2225,7 @@
         throw new CompilationError(
             "Undefined value encountered during compilation. "
                 + "This is typically caused by invalid dex input that uses a register "
-                + "that is not define on all control-flow paths leading to the use.");
+                + "that is not defined on all control-flow paths leading to the use.");
       }
       if (block.entry() instanceof MoveException) {
         // TODO: Should we support joining in the presence of move-exception instructions?
diff --git a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
index 1ff2664..d77adfd 100644
--- a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
@@ -64,6 +64,8 @@
         throw reporter.fatalError(e);
       } catch (ResourceException e) {
         throw reporter.fatalError(new ExceptionDiagnostic(e, e.getOrigin()));
+      } catch (AssertionError e) {
+        throw reporter.fatalError(new ExceptionDiagnostic(e, Origin.unknown()));
       }
       reporter.failIfPendingErrors();
     } catch (AbortException e) {