Replace DX DexMerger with D8 in platform

BUG: 73981693
Test: art/test.py --verbose -j200 --host -b
Change-Id: Idf7b71807019aca91094f69dba8c6b62e1a6bf16
diff --git a/test/121-modifiers/classes/A$B.class b/test/121-modifiers/classes/A$B.class
deleted file mode 100644
index bd7ebfe..0000000
--- a/test/121-modifiers/classes/A$B.class
+++ /dev/null
Binary files differ
diff --git a/test/121-modifiers/classes/A$C.class b/test/121-modifiers/classes/A$C.class
deleted file mode 100644
index 3ae872e..0000000
--- a/test/121-modifiers/classes/A$C.class
+++ /dev/null
Binary files differ
diff --git a/test/121-modifiers/classes/A.class b/test/121-modifiers/classes/A.class
deleted file mode 100644
index d89d029..0000000
--- a/test/121-modifiers/classes/A.class
+++ /dev/null
Binary files differ
diff --git a/test/121-modifiers/classes/Inf.class b/test/121-modifiers/classes/Inf.class
deleted file mode 100644
index e8dd680..0000000
--- a/test/121-modifiers/classes/Inf.class
+++ /dev/null
Binary files differ
diff --git a/test/121-modifiers/classes/Main.class b/test/121-modifiers/classes/Main.class
deleted file mode 100644
index e044074..0000000
--- a/test/121-modifiers/classes/Main.class
+++ /dev/null
Binary files differ
diff --git a/test/121-modifiers/classes/NonInf.class b/test/121-modifiers/classes/NonInf.class
deleted file mode 100644
index 0f1e826..0000000
--- a/test/121-modifiers/classes/NonInf.class
+++ /dev/null
Binary files differ
diff --git a/test/121-modifiers/info.txt b/test/121-modifiers/info.txt
index 335df53..7dba113 100644
--- a/test/121-modifiers/info.txt
+++ b/test/121-modifiers/info.txt
@@ -10,9 +10,9 @@
 javac Inf.java NonInf.java Main.java
 javac -cp asm.jar:asm-tree.jar:. Asm.java
 java -cp asm.jar:asm-tree.jar:. Asm
-mv Inf.out classes/Inf.class
-mv NonInf.out classes/NonInf.class
-mv Main.class A.class A\$B.class A\$C.class classes/
+mv Inf.out classes_tmp/Inf.class
+mv NonInf.out classes_tmp/NonInf.class
+mv Main.class A.class A\$B.class A\$C.class classes_tmp/
 dx --debug --dex --output=classes.dex classes
 baksmali disassemble classes.dex
 mv out/*.smali smali/
diff --git a/test/161-final-abstract-class/smali/Main.smali b/test/161-final-abstract-class/smali/Main.smali
new file mode 100644
index 0000000..588854c
--- /dev/null
+++ b/test/161-final-abstract-class/smali/Main.smali
@@ -0,0 +1,214 @@
+# Created with baksmali.
+
+# Java file for reference.
+
+# import java.lang.reflect.InvocationTargetException;
+# import java.lang.reflect.Method;
+#
+# public class Main {
+#     public static void main(String[] args) {
+#         try {
+#             // Make sure that the abstract final class is marked as erroneous.
+#             Class.forName("AbstractFinal");
+#             System.out.println("UNREACHABLE!");
+#         } catch (VerifyError expected) {
+#         } catch (Throwable t) {
+#             t.printStackTrace(System.out);
+#         }
+#         try {
+#             // Verification of TestClass.test() used to crash when processing
+#             // the final abstract (erroneous) class.
+#             Class<?> tc = Class.forName("TestClass");
+#             Method test = tc.getDeclaredMethod("test");
+#             test.invoke(null);
+#             System.out.println("UNREACHABLE!");
+#         } catch (InvocationTargetException ite) {
+#             if (ite.getCause() instanceof InstantiationError) {
+#                 System.out.println(
+#                     ite.getCause().getClass().getName() + ": " + ite.getCause().getMessage());
+#             } else {
+#                 ite.printStackTrace(System.out);
+#             }
+#         } catch (Throwable t) {
+#             t.printStackTrace(System.out);
+#         }
+#     }
+# }
+
+.class public LMain;
+.super Ljava/lang/Object;
+.source "Main.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    .line 20
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static main([Ljava/lang/String;)V
+    .registers 4
+
+    .line 24
+    :try_start_0
+    const-string p0, "AbstractFinal"
+
+    invoke-static {p0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
+
+    .line 25
+    sget-object p0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+
+    const-string v0, "UNREACHABLE!"
+
+    invoke-virtual {p0, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
+    :try_end_c
+    .catch Ljava/lang/VerifyError; {:try_start_0 .. :try_end_c} :catch_14
+    .catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_c} :catch_d
+
+    goto :goto_15
+
+    .line 27
+    :catch_d
+    move-exception p0
+
+    .line 28
+    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+
+    invoke-virtual {p0, v0}, Ljava/lang/Throwable;->printStackTrace(Ljava/io/PrintStream;)V
+
+    goto :goto_16
+
+    .line 26
+    :catch_14
+    move-exception p0
+
+    .line 29
+    :goto_15
+    nop
+
+    .line 33
+    :goto_16
+    :try_start_16
+    const-string p0, "TestClass"
+
+    invoke-static {p0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
+
+    move-result-object p0
+
+    .line 34
+    const-string v0, "test"
+
+    const/4 v1, 0x0
+
+    new-array v2, v1, [Ljava/lang/Class;
+
+    invoke-virtual {p0, v0, v2}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
+
+    move-result-object p0
+
+    .line 35
+    const/4 v0, 0x0
+
+    new-array v1, v1, [Ljava/lang/Object;
+
+    invoke-virtual {p0, v0, v1}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
+
+    .line 36
+    sget-object p0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+
+    const-string v0, "UNREACHABLE!"
+
+    invoke-virtual {p0, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
+    :try_end_32
+    .catch Ljava/lang/reflect/InvocationTargetException; {:try_start_16 .. :try_end_32} :catch_3a
+    .catch Ljava/lang/Throwable; {:try_start_16 .. :try_end_32} :catch_33
+
+    goto :goto_76
+
+    .line 44
+    :catch_33
+    move-exception p0
+
+    .line 45
+    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+
+    invoke-virtual {p0, v0}, Ljava/lang/Throwable;->printStackTrace(Ljava/io/PrintStream;)V
+
+    goto :goto_77
+
+    .line 37
+    :catch_3a
+    move-exception p0
+
+    .line 38
+    invoke-virtual {p0}, Ljava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable;
+
+    move-result-object v0
+
+    instance-of v0, v0, Ljava/lang/InstantiationError;
+
+    if-eqz v0, :cond_71
+
+    .line 39
+    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+
+    new-instance v1, Ljava/lang/StringBuilder;
+
+    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
+
+    .line 40
+    invoke-virtual {p0}, Ljava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable;
+
+    move-result-object v2
+
+    invoke-virtual {v2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
+
+    move-result-object v2
+
+    invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String;
+
+    move-result-object v2
+
+    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+    const-string v2, ": "
+
+    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+    invoke-virtual {p0}, Ljava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable;
+
+    move-result-object p0
+
+    invoke-virtual {p0}, Ljava/lang/Throwable;->getMessage()Ljava/lang/String;
+
+    move-result-object p0
+
+    invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+
+    move-result-object p0
+
+    .line 39
+    invoke-virtual {v0, p0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
+
+    goto :goto_76
+
+    .line 42
+    :cond_71
+    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+
+    invoke-virtual {p0, v0}, Ljava/lang/reflect/InvocationTargetException;->printStackTrace(Ljava/io/PrintStream;)V
+
+    .line 46
+    :goto_76
+    nop
+
+    .line 47
+    :goto_77
+    return-void
+.end method
diff --git a/test/161-final-abstract-class/src/Main.java b/test/161-final-abstract-class/src/Main.java
deleted file mode 100644
index 2452490..0000000
--- a/test/161-final-abstract-class/src/Main.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-public class Main {
-    public static void main(String[] args) {
-        try {
-            // Make sure that the abstract final class is marked as erroneous.
-            Class.forName("AbstractFinal");
-            System.out.println("UNREACHABLE!");
-        } catch (VerifyError expected) {
-        } catch (Throwable t) {
-            t.printStackTrace(System.out);
-        }
-        try {
-            // Verification of TestClass.test() used to crash when processing
-            // the final abstract (erroneous) class.
-            Class<?> tc = Class.forName("TestClass");
-            Method test = tc.getDeclaredMethod("test");
-            test.invoke(null);
-            System.out.println("UNREACHABLE!");
-        } catch (InvocationTargetException ite) {
-            if (ite.getCause() instanceof InstantiationError) {
-                System.out.println(
-                    ite.getCause().getClass().getName() + ": " + ite.getCause().getMessage());
-            } else {
-                ite.printStackTrace(System.out);
-            }
-        } catch (Throwable t) {
-            t.printStackTrace(System.out);
-        }
-    }
-}
diff --git a/test/1929-exception-catch-exception/expected.txt b/test/1929-exception-catch-exception/expected.txt
index bc5608a..a82b732 100644
--- a/test/1929-exception-catch-exception/expected.txt
+++ b/test/1929-exception-catch-exception/expected.txt
@@ -1,11 +1,11 @@
 Test "art.Test1929$DoThrowClass": Running breakpoint with handler "art.Test1929$DoNothingHandler"
-main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: doThrow
+main: public static void art.Test1929.run() throws java.lang.Exception @ line = 298 caught class art.Test1929$TestException: doThrow
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 283
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 298
 Test "art.Test1929$DoThrowClass": Caught error art.Test1929$TestException:"doThrow" with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowClass": Finished running with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchBaseTestException": Running breakpoint with handler "art.Test1929$DoNothingHandler"
@@ -17,71 +17,71 @@
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
 		public static void art.Test1929.throwCatchBaseTestException() @ line = 140
 		public void art.Test1929$DoThrowCatchBaseTestException.run() @ line = 149
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 	Doing nothing!
 Caught art.Test1929$TestException: "throwCatchBaseTestException"
 Test "art.Test1929$DoThrowCatchBaseTestException": No error caught with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchBaseTestException": Finished running with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Running breakpoint with handler "art.Test1929$DoNothingHandler"
-main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice
+main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 157 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161
-		public static void art.Test1929.throwCatchBaseTestExceptionTwice() @ line = 197
-		public void art.Test1929$DoThrowCatchBaseTestExceptionTwice.run() @ line = 201
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 157
+		public static void art.Test1929.throwCatchBaseTestExceptionTwice() @ line = 203
+		public void art.Test1929$DoThrowCatchBaseTestExceptionTwice.run() @ line = 210
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 Caught art.Test1929$TestException: "throwCatchBaseTestExceptionTwice"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": No error caught with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Finished running with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchTestException": Running breakpoint with handler "art.Test1929$DoNothingHandler"
-main: public static void art.Test1929.throwCatchTestException() @ line = 207 caught class art.Test1929$TestException: throwCatchTestException
+main: public static void art.Test1929.throwCatchTestException() @ line = 216 caught class art.Test1929$TestException: throwCatchTestException
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.throwCatchTestException() @ line = 207
-		public void art.Test1929$DoThrowCatchTestException.run() @ line = 216
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929.throwCatchTestException() @ line = 216
+		public void art.Test1929$DoThrowCatchTestException.run() @ line = 225
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 	Doing nothing!
 Caught art.Test1929$TestException: "throwCatchTestException"
 Test "art.Test1929$DoThrowCatchTestException": No error caught with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchTestException": Finished running with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": Running breakpoint with handler "art.Test1929$DoNothingHandler"
-main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 caught class art.Test1929$TestException: throwCatchTestExceptionTwice
+main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 175 caught class art.Test1929$TestException: throwCatchTestExceptionTwice
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179
-		public static void art.Test1929.throwCatchTestExceptionTwice() @ line = 222
-		public void art.Test1929$DoThrowCatchTestExceptionTwice.run() @ line = 226
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 175
+		public static void art.Test1929.throwCatchTestExceptionTwice() @ line = 234
+		public void art.Test1929$DoThrowCatchTestExceptionTwice.run() @ line = 241
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 Caught art.Test1929$TestException: "throwCatchTestExceptionTwice"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": No error caught with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": Finished running with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Running breakpoint with handler "art.Test1929$DoNothingHandler"
-main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow
+main: public static void art.Test1929.run() throws java.lang.Exception @ line = 298 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 283
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 298
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Caught error art.Test1929$TestException:"throwCatchTestExceptionNoRethrow" with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Finished running with handler "art.Test1929$DoNothingHandler"
 Test "art.Test1929$DoThrowClass": Running breakpoint with handler "art.Test1929$ThrowCatchBase"
-main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: doThrow
+main: public static void art.Test1929.run() throws java.lang.Exception @ line = 298 caught class art.Test1929$TestException: doThrow
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 283
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 298
 Test "art.Test1929$DoThrowClass": Caught error art.Test1929$TestException:"doThrow" with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowClass": Finished running with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchBaseTestException": Running breakpoint with handler "art.Test1929$ThrowCatchBase"
@@ -93,73 +93,73 @@
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
 		public static void art.Test1929.throwCatchBaseTestException() @ line = 140
 		public void art.Test1929$DoThrowCatchBaseTestException.run() @ line = 149
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 	Throwing BaseTestException and catching it!
 Caught art.Test1929$BaseTestException: "ThrowBaseHandler during throw from public static void art.Test1929.throwCatchBaseTestException() @ line = 140"
 Caught art.Test1929$TestException: "throwCatchBaseTestException"
 Test "art.Test1929$DoThrowCatchBaseTestException": No error caught with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchBaseTestException": Finished running with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Running breakpoint with handler "art.Test1929$ThrowCatchBase"
-main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice
+main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 157 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161
-		public static void art.Test1929.throwCatchBaseTestExceptionTwice() @ line = 197
-		public void art.Test1929$DoThrowCatchBaseTestExceptionTwice.run() @ line = 201
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 157
+		public static void art.Test1929.throwCatchBaseTestExceptionTwice() @ line = 203
+		public void art.Test1929$DoThrowCatchBaseTestExceptionTwice.run() @ line = 210
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 Caught art.Test1929$TestException: "throwCatchBaseTestExceptionTwice"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": No error caught with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Finished running with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchTestException": Running breakpoint with handler "art.Test1929$ThrowCatchBase"
-main: public static void art.Test1929.throwCatchTestException() @ line = 207 caught class art.Test1929$TestException: throwCatchTestException
+main: public static void art.Test1929.throwCatchTestException() @ line = 216 caught class art.Test1929$TestException: throwCatchTestException
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.throwCatchTestException() @ line = 207
-		public void art.Test1929$DoThrowCatchTestException.run() @ line = 216
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929.throwCatchTestException() @ line = 216
+		public void art.Test1929$DoThrowCatchTestException.run() @ line = 225
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 	Throwing BaseTestException and catching it!
-Caught art.Test1929$BaseTestException: "ThrowBaseHandler during throw from public static void art.Test1929.throwCatchTestException() @ line = 207"
+Caught art.Test1929$BaseTestException: "ThrowBaseHandler during throw from public static void art.Test1929.throwCatchTestException() @ line = 216"
 Caught art.Test1929$TestException: "throwCatchTestException"
 Test "art.Test1929$DoThrowCatchTestException": No error caught with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchTestException": Finished running with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": Running breakpoint with handler "art.Test1929$ThrowCatchBase"
-main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 caught class art.Test1929$TestException: throwCatchTestExceptionTwice
+main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 175 caught class art.Test1929$TestException: throwCatchTestExceptionTwice
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179
-		public static void art.Test1929.throwCatchTestExceptionTwice() @ line = 222
-		public void art.Test1929$DoThrowCatchTestExceptionTwice.run() @ line = 226
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 175
+		public static void art.Test1929.throwCatchTestExceptionTwice() @ line = 234
+		public void art.Test1929$DoThrowCatchTestExceptionTwice.run() @ line = 241
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 Caught art.Test1929$TestException: "throwCatchTestExceptionTwice"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": No error caught with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": Finished running with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Running breakpoint with handler "art.Test1929$ThrowCatchBase"
-main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow
+main: public static void art.Test1929.run() throws java.lang.Exception @ line = 298 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 283
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 298
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Caught error art.Test1929$TestException:"throwCatchTestExceptionNoRethrow" with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Finished running with handler "art.Test1929$ThrowCatchBase"
 Test "art.Test1929$DoThrowClass": Running breakpoint with handler "art.Test1929$ThrowBaseTestExceptionHandler"
-main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: doThrow
+main: public static void art.Test1929.run() throws java.lang.Exception @ line = 298 caught class art.Test1929$TestException: doThrow
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 283
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 298
 Test "art.Test1929$DoThrowClass": Caught error art.Test1929$TestException:"doThrow" with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowClass": Finished running with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchBaseTestException": Running breakpoint with handler "art.Test1929$ThrowBaseTestExceptionHandler"
@@ -171,69 +171,69 @@
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
 		public static void art.Test1929.throwCatchBaseTestException() @ line = 140
 		public void art.Test1929$DoThrowCatchBaseTestException.run() @ line = 149
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 	Throwing BaseTestException!
 Test "art.Test1929$DoThrowCatchBaseTestException": Caught error art.Test1929$BaseTestException:"ThrowBaseHandler during throw from public static void art.Test1929.throwCatchBaseTestException() @ line = 140" with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchBaseTestException": Finished running with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Running breakpoint with handler "art.Test1929$ThrowBaseTestExceptionHandler"
-main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice
+main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 157 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161
-		public static void art.Test1929.throwCatchBaseTestExceptionTwice() @ line = 197
-		public void art.Test1929$DoThrowCatchBaseTestExceptionTwice.run() @ line = 201
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 157
+		public static void art.Test1929.throwCatchBaseTestExceptionTwice() @ line = 203
+		public void art.Test1929$DoThrowCatchBaseTestExceptionTwice.run() @ line = 210
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 Caught art.Test1929$TestException: "throwCatchBaseTestExceptionTwice"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": No error caught with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Finished running with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchTestException": Running breakpoint with handler "art.Test1929$ThrowBaseTestExceptionHandler"
-main: public static void art.Test1929.throwCatchTestException() @ line = 207 caught class art.Test1929$TestException: throwCatchTestException
+main: public static void art.Test1929.throwCatchTestException() @ line = 216 caught class art.Test1929$TestException: throwCatchTestException
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.throwCatchTestException() @ line = 207
-		public void art.Test1929$DoThrowCatchTestException.run() @ line = 216
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929.throwCatchTestException() @ line = 216
+		public void art.Test1929$DoThrowCatchTestException.run() @ line = 225
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 	Throwing BaseTestException!
-Test "art.Test1929$DoThrowCatchTestException": Caught error art.Test1929$BaseTestException:"ThrowBaseHandler during throw from public static void art.Test1929.throwCatchTestException() @ line = 207" with handler "art.Test1929$ThrowBaseTestExceptionHandler"
+Test "art.Test1929$DoThrowCatchTestException": Caught error art.Test1929$BaseTestException:"ThrowBaseHandler during throw from public static void art.Test1929.throwCatchTestException() @ line = 216" with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchTestException": Finished running with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": Running breakpoint with handler "art.Test1929$ThrowBaseTestExceptionHandler"
-main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 caught class art.Test1929$TestException: throwCatchTestExceptionTwice
+main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 175 caught class art.Test1929$TestException: throwCatchTestExceptionTwice
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179
-		public static void art.Test1929.throwCatchTestExceptionTwice() @ line = 222
-		public void art.Test1929$DoThrowCatchTestExceptionTwice.run() @ line = 226
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 175
+		public static void art.Test1929.throwCatchTestExceptionTwice() @ line = 234
+		public void art.Test1929$DoThrowCatchTestExceptionTwice.run() @ line = 241
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 Caught art.Test1929$TestException: "throwCatchTestExceptionTwice"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": No error caught with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": Finished running with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Running breakpoint with handler "art.Test1929$ThrowBaseTestExceptionHandler"
-main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow
+main: public static void art.Test1929.run() throws java.lang.Exception @ line = 298 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 283
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 298
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Caught error art.Test1929$TestException:"throwCatchTestExceptionNoRethrow" with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Finished running with handler "art.Test1929$ThrowBaseTestExceptionHandler"
 Test "art.Test1929$DoThrowClass": Running breakpoint with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
-main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: doThrow
+main: public static void art.Test1929.run() throws java.lang.Exception @ line = 298 caught class art.Test1929$TestException: doThrow
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 283
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 298
 Test "art.Test1929$DoThrowClass": Caught error art.Test1929$TestException:"doThrow" with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowClass": Finished running with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchBaseTestException": Running breakpoint with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
@@ -245,58 +245,58 @@
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
 		public static void art.Test1929.throwCatchBaseTestException() @ line = 140
 		public void art.Test1929$DoThrowCatchBaseTestException.run() @ line = 149
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 	Throwing TestExceptionNoRethrow!
 Test "art.Test1929$DoThrowCatchBaseTestException": Caught error art.Test1929$TestExceptionNoRethrow:"ThrowTestExceptionNoRethrowHandler during throw from public static void art.Test1929.throwCatchBaseTestException() @ line = 140" with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchBaseTestException": Finished running with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Running breakpoint with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
-main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice
+main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 157 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161
-		public static void art.Test1929.throwCatchBaseTestExceptionTwice() @ line = 197
-		public void art.Test1929$DoThrowCatchBaseTestExceptionTwice.run() @ line = 201
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 157
+		public static void art.Test1929.throwCatchBaseTestExceptionTwice() @ line = 203
+		public void art.Test1929$DoThrowCatchBaseTestExceptionTwice.run() @ line = 210
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 Caught art.Test1929$TestException: "throwCatchBaseTestExceptionTwice"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": No error caught with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Finished running with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchTestException": Running breakpoint with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
-main: public static void art.Test1929.throwCatchTestException() @ line = 207 caught class art.Test1929$TestException: throwCatchTestException
+main: public static void art.Test1929.throwCatchTestException() @ line = 216 caught class art.Test1929$TestException: throwCatchTestException
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.throwCatchTestException() @ line = 207
-		public void art.Test1929$DoThrowCatchTestException.run() @ line = 216
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929.throwCatchTestException() @ line = 216
+		public void art.Test1929$DoThrowCatchTestException.run() @ line = 225
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 	Throwing TestExceptionNoRethrow!
-Test "art.Test1929$DoThrowCatchTestException": Caught error art.Test1929$TestExceptionNoRethrow:"ThrowTestExceptionNoRethrowHandler during throw from public static void art.Test1929.throwCatchTestException() @ line = 207" with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
+Test "art.Test1929$DoThrowCatchTestException": Caught error art.Test1929$TestExceptionNoRethrow:"ThrowTestExceptionNoRethrowHandler during throw from public static void art.Test1929.throwCatchTestException() @ line = 216" with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchTestException": Finished running with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": Running breakpoint with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
-main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 caught class art.Test1929$TestException: throwCatchTestExceptionTwice
+main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 175 caught class art.Test1929$TestException: throwCatchTestExceptionTwice
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179
-		public static void art.Test1929.throwCatchTestExceptionTwice() @ line = 222
-		public void art.Test1929$DoThrowCatchTestExceptionTwice.run() @ line = 226
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 280
+		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 175
+		public static void art.Test1929.throwCatchTestExceptionTwice() @ line = 234
+		public void art.Test1929$DoThrowCatchTestExceptionTwice.run() @ line = 241
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 295
 Caught art.Test1929$TestException: "throwCatchTestExceptionTwice"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": No error caught with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionTwice": Finished running with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Running breakpoint with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
-main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow
+main: public static void art.Test1929.run() throws java.lang.Exception @ line = 298 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow
 	Current Stack:
 		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1
 		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61
 		private static void art.Test1929.PrintStack() @ line = 52
 		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65
-		public static void art.Test1929.run() throws java.lang.Exception @ line = 283
+		public static void art.Test1929.run() throws java.lang.Exception @ line = 298
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Caught error art.Test1929$TestException:"throwCatchTestExceptionNoRethrow" with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
 Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Finished running with handler "art.Test1929$ThrowTestExceptionNoRethrowHandler"
diff --git a/test/1929-exception-catch-exception/src/art/Test1929.java b/test/1929-exception-catch-exception/src/art/Test1929.java
index 07d2087..e2deb3f 100644
--- a/test/1929-exception-catch-exception/src/art/Test1929.java
+++ b/test/1929-exception-catch-exception/src/art/Test1929.java
@@ -152,49 +152,58 @@
   // dx/d8/jack all do an optimization around catch blocks that (while legal) breaks assumptions
   // this test relies on so we have the actual implementation be corrected smali. This does work
   // for RI however.
-  public static final class Impl {
-    private Impl() {}
-    public static void throwCatchBaseTestExceptionTwiceImpl() {
-      try {
-        try {
-          throw new TestException("throwCatchBaseTestExceptionTwice");
-        } catch (BaseTestException t) {
-          System.out.println("Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\"");
-          if (PRINT_FULL_EXCEPTION) {
-            t.printStackTrace(System.out);
-          }
-        }
-      } catch (BaseTestException t) {
-        System.out.println("2nd Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\"");
-        if (PRINT_FULL_EXCEPTION) {
-          t.printStackTrace(System.out);
-        }
-      }
-    }
 
-    public static void throwCatchTestExceptionTwiceImpl() {
-      try {
-        try {
-          throw new TestException("throwCatchTestExceptionTwice");
-        } catch (TestException t) {
-          System.out.println("Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\"");
-          if (PRINT_FULL_EXCEPTION) {
-            t.printStackTrace(System.out);
-          }
-        }
-      } catch (TestException t) {
-        System.out.println("2nd Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\"");
-        if (PRINT_FULL_EXCEPTION) {
-          t.printStackTrace(System.out);
-        }
-      }
-    }
-  }
+  // For reference:
+
+  // public static final class Impl {
+  //   private Impl() {}
+  //   public static void throwCatchBaseTestExceptionTwiceImpl() {
+  //     try {
+  //       try {
+  //         throw new TestException("throwCatchBaseTestExceptionTwice");
+  //       } catch (BaseTestException t) {
+  //         System.out.println("Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\"");
+  //         if (PRINT_FULL_EXCEPTION) {
+  //           t.printStackTrace(System.out);
+  //         }
+  //       }
+  //     } catch (BaseTestException t) {
+  //       System.out.println("2nd Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\"");
+  //       if (PRINT_FULL_EXCEPTION) {
+  //         t.printStackTrace(System.out);
+  //       }
+  //     }
+  //   }
+
+  //   public static void throwCatchTestExceptionTwiceImpl() {
+  //     try {
+  //       try {
+  //         throw new TestException("throwCatchTestExceptionTwice");
+  //       } catch (TestException t) {
+  //         System.out.println("Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\"");
+  //         if (PRINT_FULL_EXCEPTION) {
+  //           t.printStackTrace(System.out);
+  //         }
+  //       }
+  //     } catch (TestException t) {
+  //       System.out.println("2nd Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\"");
+  //       if (PRINT_FULL_EXCEPTION) {
+  //         t.printStackTrace(System.out);
+  //       }
+  //     }
+  //   }
+  // }
 
   public static void throwCatchBaseTestExceptionTwice() {
     // The implementation of this has to change depending upon the runtime slightly due to compiler
     // optimizations present in DX/D8/Jack.
-    Impl.throwCatchBaseTestExceptionTwiceImpl();
+    try {
+      Class<?> Impl = Class.forName("art.Test1929$Impl");
+      Method m = Impl.getMethod("throwCatchBaseTestExceptionTwiceImpl");
+      m.invoke(null);
+    } catch (Exception e) {
+      e.printStackTrace(System.out);
+    }
   }
 
   public static class DoThrowCatchBaseTestExceptionTwice implements Runnable {
@@ -219,7 +228,13 @@
   public static void throwCatchTestExceptionTwice() {
     // The implementation of this has to change depending upon the runtime slightly due to compiler
     // optimizations present in DX/D8/Jack.
-    Impl.throwCatchTestExceptionTwiceImpl();
+    try {
+      Class<?> Impl = Class.forName("art.Test1929$Impl");
+      Method m = Impl.getMethod("throwCatchTestExceptionTwiceImpl");
+      m.invoke(null);
+    } catch (Exception e) {
+      e.printStackTrace(System.out);
+    }
   }
 
   public static class DoThrowCatchTestExceptionTwice implements Runnable {
diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk
index cf781d7..6633958 100644
--- a/test/Android.run-test.mk
+++ b/test/Android.run-test.mk
@@ -24,7 +24,6 @@
   $(HOST_OUT_EXECUTABLES)/hiddenapi \
   $(HOST_OUT_EXECUTABLES)/jasmin \
   $(HOST_OUT_EXECUTABLES)/smali \
-  $(HOST_OUT_EXECUTABLES)/dexmerger \
   $(HOST_OUT_JAVA_LIBRARIES)/desugar.jar
 
 # Add d8 dependency, if enabled.
@@ -103,7 +102,7 @@
 # Host executables.
 host_prereq_rules := $(ART_TEST_HOST_RUN_TEST_DEPENDENCIES)
 
-# Required for dx, jasmin, smali, dexmerger.
+# Required for dx, jasmin, smali.
 host_prereq_rules += $(TEST_ART_RUN_TEST_DEPENDENCIES)
 
 # Sync test files to the target, depends upon all things that must be pushed
diff --git a/test/etc/default-build b/test/etc/default-build
index 3e6577c..9de7294 100755
--- a/test/etc/default-build
+++ b/test/etc/default-build
@@ -341,8 +341,26 @@
     shift
   done
 
-  # Should have at least 1 dex_files_to_merge here, otherwise dxmerger will print the help.
-  ${DXMERGER} "$dst_file" "${dex_files_to_merge[@]}"
+  # Skip merge if we are not merging anything. IE: input = output.
+  if [[ "${#dex_files_to_merge[@]}" -eq "1" ]]; then
+    local single_input=${dex_files_to_merge[0]}
+    if [[ "$dst_file" != "$single_input" ]]; then
+     mv "$single_input" "$dst_file";
+     return
+    fi
+  fi
+
+  # We assume the dexer did all the API level checks and just merge away.
+  mkdir d8_merge_out
+  ${DXMERGER} --min-api 1000 --output ./d8_merge_out "${dex_files_to_merge[@]}"
+
+  if [[ -e "./d8_merge_out/classes2.dex" ]]; then
+    echo "Cannot merge all dex files into a single dex"
+    exit 1
+  fi
+
+  mv ./d8_merge_out/classes.dex "$dst_file";
+  rmdir d8_merge_out
 }
 
 function make_hiddenapi() {
diff --git a/test/run-test b/test/run-test
index 260a65a..5b43b52 100755
--- a/test/run-test
+++ b/test/run-test
@@ -50,11 +50,18 @@
 export USE_DESUGAR="true"
 export SMALI_ARGS=""
 
+# If d8 was not set by the environment variable, assume it is in the path.
+if [ -z "$D8" ]; then
+  export D8="d8"
+fi
+
 # If dx was not set by the environment variable, assume it is in the path.
 if [ -z "$DX" ]; then
   export DX="dx"
 fi
 
+export DXMERGER="$D8"
+
 # If jasmin was not set by the environment variable, assume it is in the path.
 if [ -z "$JASMIN" ]; then
   export JASMIN="jasmin"
@@ -65,11 +72,6 @@
   export SMALI="smali"
 fi
 
-# If dexmerger was not set by the environment variable, assume it is in the path.
-if [ -z "$DXMERGER" ]; then
-  export DXMERGER="dexmerger"
-fi
-
 # If jack was not set by the environment variable, assume it is in the path.
 if [ -z "$JACK" ]; then
   export JACK="jack"
diff --git a/test/testrunner/env.py b/test/testrunner/env.py
index 70efce5..5394991 100644
--- a/test/testrunner/env.py
+++ b/test/testrunner/env.py
@@ -136,9 +136,8 @@
                                     _get_build_var("HOST_OUT_EXECUTABLES"))
 
 # Set up default values for $JACK, $DX, $SMALI, etc to the $HOST_OUT_EXECUTABLES/$name path.
-for tool in ['jack', 'dx', 'smali', 'jasmin', 'dxmerger']:
-  binary = tool if tool != 'dxmerger' else 'dexmerger'
-  os.environ.setdefault(tool.upper(), HOST_OUT_EXECUTABLES + '/' + binary)
+for tool in ['jack', 'dx', 'smali', 'jasmin', 'd8']:
+  os.environ.setdefault(tool.upper(), HOST_OUT_EXECUTABLES + '/' + tool)
 
 ANDROID_JAVA_TOOLCHAIN = os.path.join(ANDROID_BUILD_TOP,
                                      _get_build_var('ANDROID_JAVA_TOOLCHAIN'))