Merge "Fix issue with IMT dispatch."
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 262505b..0e67f49 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -6253,15 +6253,7 @@
           }  // case kAbstractFound
         }
         if (LIKELY(fill_tables)) {
-          if (current_method != nullptr) {
-            // We found a default method implementation. Record it in the iftable and IMT.
-            method_array->SetElementPtrSize(j, current_method, image_pointer_size_);
-            SetIMTRef(unimplemented_method,
-                      imt_conflict_method,
-                      image_pointer_size_,
-                      current_method,
-                      /*out*/imt_ptr);
-          } else if (!super_interface) {
+          if (current_method == nullptr && !super_interface) {
             // We could not find an implementation for this method and since it is a brand new
             // interface we searched the entire vtable (and all default methods) for an
             // implementation but couldn't find one. We therefore need to make a miranda method.
@@ -6277,7 +6269,17 @@
               new(miranda_method) ArtMethod(interface_method, image_pointer_size_);
               miranda_methods.push_back(miranda_method);
             }
-            method_array->SetElementPtrSize(j, miranda_method, image_pointer_size_);
+            current_method = miranda_method;
+          }
+
+          if (current_method != nullptr) {
+            // We found a default method implementation. Record it in the iftable and IMT.
+            method_array->SetElementPtrSize(j, current_method, image_pointer_size_);
+            SetIMTRef(unimplemented_method,
+                      imt_conflict_method,
+                      image_pointer_size_,
+                      current_method,
+                      /*out*/imt_ptr);
           }
         }
       }  // For each method in interface end.
diff --git a/test/972-default-imt-collision/expected.txt b/test/972-default-imt-collision/expected.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/972-default-imt-collision/expected.txt
diff --git a/test/972-default-imt-collision/info.txt b/test/972-default-imt-collision/info.txt
new file mode 100644
index 0000000..adecee3
--- /dev/null
+++ b/test/972-default-imt-collision/info.txt
@@ -0,0 +1 @@
+Test for interaction of miranda and non-miranda methods on interface dispatch.
diff --git a/test/972-default-imt-collision/smali/Iface1.smali b/test/972-default-imt-collision/smali/Iface1.smali
new file mode 100644
index 0000000..088c29c
--- /dev/null
+++ b/test/972-default-imt-collision/smali/Iface1.smali
@@ -0,0 +1,32 @@
+# /*
+#  * Copyright (C) 2016 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.
+#  */
+#
+# public interface Iface1 {
+#   public default void sayHi() {
+#       System.out.println("FAILED: We should never invoke this method!");
+#   }
+# }
+
+.class public abstract interface LIface1;
+.super Ljava/lang/Object;
+
+.method public sayHi()V
+    .locals 2
+    sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
+    const-string v0, "FAILED: We should never invoke this method!"
+    invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+    return-void
+.end method
diff --git a/test/972-default-imt-collision/smali/Iface2.smali b/test/972-default-imt-collision/smali/Iface2.smali
new file mode 100644
index 0000000..4320e7e
--- /dev/null
+++ b/test/972-default-imt-collision/smali/Iface2.smali
@@ -0,0 +1,277 @@
+# /*
+#  * Copyright (C) 2016 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.
+#  */
+#
+# public interface Iface2 {
+#    public void notImplementedMethod0();
+#    public void notImplementedMethod1();
+#    public void notImplementedMethod2();
+#    public void notImplementedMethod3();
+#    public void notImplementedMethod4();
+#    public void notImplementedMethod5();
+#    public void notImplementedMethod6();
+#    public void notImplementedMethod7();
+#    public void notImplementedMethod8();
+#    public void notImplementedMethod9();
+#    public void notImplementedMethod10();
+#    public void notImplementedMethod11();
+#    public void notImplementedMethod12();
+#    public void notImplementedMethod13();
+#    public void notImplementedMethod14();
+#    public void notImplementedMethod15();
+#    public void notImplementedMethod16();
+#    public void notImplementedMethod17();
+#    public void notImplementedMethod18();
+#    public void notImplementedMethod19();
+#    public void notImplementedMethod20();
+#    public void notImplementedMethod21();
+#    public void notImplementedMethod22();
+#    public void notImplementedMethod23();
+#    public void notImplementedMethod24();
+#    public void notImplementedMethod25();
+#    public void notImplementedMethod26();
+#    public void notImplementedMethod27();
+#    public void notImplementedMethod28();
+#    public void notImplementedMethod29();
+#    public void notImplementedMethod30();
+#    public void notImplementedMethod31();
+#    public void notImplementedMethod32();
+#    public void notImplementedMethod33();
+#    public void notImplementedMethod34();
+#    public void notImplementedMethod35();
+#    public void notImplementedMethod36();
+#    public void notImplementedMethod37();
+#    public void notImplementedMethod38();
+#    public void notImplementedMethod39();
+#    public void notImplementedMethod40();
+#    public void notImplementedMethod41();
+#    public void notImplementedMethod42();
+#    public void notImplementedMethod43();
+#    public void notImplementedMethod44();
+#    public void notImplementedMethod45();
+#    public void notImplementedMethod46();
+#    public void notImplementedMethod47();
+#    public void notImplementedMethod48();
+#    public void notImplementedMethod49();
+#    public void notImplementedMethod50();
+#    public void notImplementedMethod51();
+#    public void notImplementedMethod52();
+#    public void notImplementedMethod53();
+#    public void notImplementedMethod54();
+#    public void notImplementedMethod55();
+#    public void notImplementedMethod56();
+#    public void notImplementedMethod57();
+#    public void notImplementedMethod58();
+#    public void notImplementedMethod59();
+#    public void notImplementedMethod60();
+#    public void notImplementedMethod61();
+#    public void notImplementedMethod62();
+#    public void notImplementedMethod63();
+# }
+
+.class public abstract interface LIface2;
+.super Ljava/lang/Object;
+
+.method public abstract notImplementedMethod0()V
+.end method
+
+.method public abstract notImplementedMethod1()V
+.end method
+
+.method public abstract notImplementedMethod2()V
+.end method
+
+.method public abstract notImplementedMethod3()V
+.end method
+
+.method public abstract notImplementedMethod4()V
+.end method
+
+.method public abstract notImplementedMethod5()V
+.end method
+
+.method public abstract notImplementedMethod6()V
+.end method
+
+.method public abstract notImplementedMethod7()V
+.end method
+
+.method public abstract notImplementedMethod8()V
+.end method
+
+.method public abstract notImplementedMethod9()V
+.end method
+
+.method public abstract notImplementedMethod10()V
+.end method
+
+.method public abstract notImplementedMethod11()V
+.end method
+
+.method public abstract notImplementedMethod12()V
+.end method
+
+.method public abstract notImplementedMethod13()V
+.end method
+
+.method public abstract notImplementedMethod14()V
+.end method
+
+.method public abstract notImplementedMethod15()V
+.end method
+
+.method public abstract notImplementedMethod16()V
+.end method
+
+.method public abstract notImplementedMethod17()V
+.end method
+
+.method public abstract notImplementedMethod18()V
+.end method
+
+.method public abstract notImplementedMethod19()V
+.end method
+
+.method public abstract notImplementedMethod20()V
+.end method
+
+.method public abstract notImplementedMethod21()V
+.end method
+
+.method public abstract notImplementedMethod22()V
+.end method
+
+.method public abstract notImplementedMethod23()V
+.end method
+
+.method public abstract notImplementedMethod24()V
+.end method
+
+.method public abstract notImplementedMethod25()V
+.end method
+
+.method public abstract notImplementedMethod26()V
+.end method
+
+.method public abstract notImplementedMethod27()V
+.end method
+
+.method public abstract notImplementedMethod28()V
+.end method
+
+.method public abstract notImplementedMethod29()V
+.end method
+
+.method public abstract notImplementedMethod30()V
+.end method
+
+.method public abstract notImplementedMethod31()V
+.end method
+
+.method public abstract notImplementedMethod32()V
+.end method
+
+.method public abstract notImplementedMethod33()V
+.end method
+
+.method public abstract notImplementedMethod34()V
+.end method
+
+.method public abstract notImplementedMethod35()V
+.end method
+
+.method public abstract notImplementedMethod36()V
+.end method
+
+.method public abstract notImplementedMethod37()V
+.end method
+
+.method public abstract notImplementedMethod38()V
+.end method
+
+.method public abstract notImplementedMethod39()V
+.end method
+
+.method public abstract notImplementedMethod40()V
+.end method
+
+.method public abstract notImplementedMethod41()V
+.end method
+
+.method public abstract notImplementedMethod42()V
+.end method
+
+.method public abstract notImplementedMethod43()V
+.end method
+
+.method public abstract notImplementedMethod44()V
+.end method
+
+.method public abstract notImplementedMethod45()V
+.end method
+
+.method public abstract notImplementedMethod46()V
+.end method
+
+.method public abstract notImplementedMethod47()V
+.end method
+
+.method public abstract notImplementedMethod48()V
+.end method
+
+.method public abstract notImplementedMethod49()V
+.end method
+
+.method public abstract notImplementedMethod50()V
+.end method
+
+.method public abstract notImplementedMethod51()V
+.end method
+
+.method public abstract notImplementedMethod52()V
+.end method
+
+.method public abstract notImplementedMethod53()V
+.end method
+
+.method public abstract notImplementedMethod54()V
+.end method
+
+.method public abstract notImplementedMethod55()V
+.end method
+
+.method public abstract notImplementedMethod56()V
+.end method
+
+.method public abstract notImplementedMethod57()V
+.end method
+
+.method public abstract notImplementedMethod58()V
+.end method
+
+.method public abstract notImplementedMethod59()V
+.end method
+
+.method public abstract notImplementedMethod60()V
+.end method
+
+.method public abstract notImplementedMethod61()V
+.end method
+
+.method public abstract notImplementedMethod62()V
+.end method
+
+.method public abstract notImplementedMethod63()V
+.end method
diff --git a/test/972-default-imt-collision/smali/Klass.smali b/test/972-default-imt-collision/smali/Klass.smali
new file mode 100644
index 0000000..a98f9a7
--- /dev/null
+++ b/test/972-default-imt-collision/smali/Klass.smali
@@ -0,0 +1,993 @@
+# /*
+#  * Copyright (C) 2016 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.
+#  */
+# public class Klass implements Iface1, Iface2 {
+#    public static void testMe(Iface2 me) {
+#      try {
+#        me.notImplementedMethod0();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod0!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod1();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod1!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod2();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod2!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod3();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod3!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod4();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod4!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod5();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod5!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod6();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod6!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod7();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod7!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod8();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod8!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod9();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod9!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod10();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod10!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod11();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod11!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod12();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod12!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod13();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod13!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod14();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod14!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod15();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod15!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod16();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod16!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod17();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod17!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod18();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod18!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod19();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod19!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod20();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod20!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod21();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod21!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod22();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod22!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod23();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod23!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod24();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod24!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod25();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod25!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod26();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod26!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod27();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod27!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod28();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod28!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod29();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod29!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod30();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod30!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod31();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod31!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod32();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod32!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod33();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod33!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod34();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod34!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod35();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod35!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod36();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod36!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod37();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod37!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod38();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod38!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod39();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod39!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod40();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod40!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod41();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod41!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod42();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod42!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod43();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod43!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod44();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod44!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod45();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod45!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod46();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod46!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod47();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod47!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod48();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod48!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod49();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod49!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod50();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod50!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod51();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod51!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod52();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod52!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod53();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod53!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod54();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod54!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod55();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod55!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod56();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod56!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod57();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod57!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod58();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod58!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod59();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod59!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod60();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod60!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod61();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod61!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod62();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod62!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }
+#      try {
+#        me.notImplementedMethod63();
+#        System.out.println("FAILED TO THROW AbstractMethodError when calling notImplementedMethod63!");
+#      } catch (AbstractMethodError e) { /* do nothing */ }                                                                }
+#    }
+# }
+
+.class public LKlass;
+.super Ljava/lang/Object;
+.implements LIface1;
+.implements LIface2;
+
+.method public constructor <init>()V
+    .registers 1
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+    return-void
+.end method
+
+.method public static testMe(LIface2;)V
+.locals 5
+    :try_0_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod0()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod0!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_0_end
+    :try_0_end
+    .catch Ljava/lang/AbstractMethodError; {:try_0_start .. :try_0_end} :catch_0_end
+    :catch_0_end
+
+
+    :try_1_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod1()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod1!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_1_end
+    :try_1_end
+    .catch Ljava/lang/AbstractMethodError; {:try_1_start .. :try_1_end} :catch_1_end
+    :catch_1_end
+
+
+    :try_2_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod2()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod2!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_2_end
+    :try_2_end
+    .catch Ljava/lang/AbstractMethodError; {:try_2_start .. :try_2_end} :catch_2_end
+    :catch_2_end
+
+
+    :try_3_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod3()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod3!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_3_end
+    :try_3_end
+    .catch Ljava/lang/AbstractMethodError; {:try_3_start .. :try_3_end} :catch_3_end
+    :catch_3_end
+
+
+    :try_4_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod4()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod4!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_4_end
+    :try_4_end
+    .catch Ljava/lang/AbstractMethodError; {:try_4_start .. :try_4_end} :catch_4_end
+    :catch_4_end
+
+
+    :try_5_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod5()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod5!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_5_end
+    :try_5_end
+    .catch Ljava/lang/AbstractMethodError; {:try_5_start .. :try_5_end} :catch_5_end
+    :catch_5_end
+
+
+    :try_6_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod6()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod6!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_6_end
+    :try_6_end
+    .catch Ljava/lang/AbstractMethodError; {:try_6_start .. :try_6_end} :catch_6_end
+    :catch_6_end
+
+
+    :try_7_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod7()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod7!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_7_end
+    :try_7_end
+    .catch Ljava/lang/AbstractMethodError; {:try_7_start .. :try_7_end} :catch_7_end
+    :catch_7_end
+
+
+    :try_8_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod8()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod8!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_8_end
+    :try_8_end
+    .catch Ljava/lang/AbstractMethodError; {:try_8_start .. :try_8_end} :catch_8_end
+    :catch_8_end
+
+
+    :try_9_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod9()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod9!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_9_end
+    :try_9_end
+    .catch Ljava/lang/AbstractMethodError; {:try_9_start .. :try_9_end} :catch_9_end
+    :catch_9_end
+
+
+    :try_10_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod10()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod10!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_10_end
+    :try_10_end
+    .catch Ljava/lang/AbstractMethodError; {:try_10_start .. :try_10_end} :catch_10_end
+    :catch_10_end
+
+
+    :try_11_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod11()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod11!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_11_end
+    :try_11_end
+    .catch Ljava/lang/AbstractMethodError; {:try_11_start .. :try_11_end} :catch_11_end
+    :catch_11_end
+
+
+    :try_12_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod12()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod12!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_12_end
+    :try_12_end
+    .catch Ljava/lang/AbstractMethodError; {:try_12_start .. :try_12_end} :catch_12_end
+    :catch_12_end
+
+
+    :try_13_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod13()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod13!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_13_end
+    :try_13_end
+    .catch Ljava/lang/AbstractMethodError; {:try_13_start .. :try_13_end} :catch_13_end
+    :catch_13_end
+
+
+    :try_14_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod14()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod14!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_14_end
+    :try_14_end
+    .catch Ljava/lang/AbstractMethodError; {:try_14_start .. :try_14_end} :catch_14_end
+    :catch_14_end
+
+
+    :try_15_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod15()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod15!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_15_end
+    :try_15_end
+    .catch Ljava/lang/AbstractMethodError; {:try_15_start .. :try_15_end} :catch_15_end
+    :catch_15_end
+
+
+    :try_16_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod16()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod16!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_16_end
+    :try_16_end
+    .catch Ljava/lang/AbstractMethodError; {:try_16_start .. :try_16_end} :catch_16_end
+    :catch_16_end
+
+
+    :try_17_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod17()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod17!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_17_end
+    :try_17_end
+    .catch Ljava/lang/AbstractMethodError; {:try_17_start .. :try_17_end} :catch_17_end
+    :catch_17_end
+
+
+    :try_18_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod18()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod18!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_18_end
+    :try_18_end
+    .catch Ljava/lang/AbstractMethodError; {:try_18_start .. :try_18_end} :catch_18_end
+    :catch_18_end
+
+
+    :try_19_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod19()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod19!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_19_end
+    :try_19_end
+    .catch Ljava/lang/AbstractMethodError; {:try_19_start .. :try_19_end} :catch_19_end
+    :catch_19_end
+
+
+    :try_20_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod20()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod20!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_20_end
+    :try_20_end
+    .catch Ljava/lang/AbstractMethodError; {:try_20_start .. :try_20_end} :catch_20_end
+    :catch_20_end
+
+
+    :try_21_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod21()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod21!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_21_end
+    :try_21_end
+    .catch Ljava/lang/AbstractMethodError; {:try_21_start .. :try_21_end} :catch_21_end
+    :catch_21_end
+
+
+    :try_22_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod22()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod22!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_22_end
+    :try_22_end
+    .catch Ljava/lang/AbstractMethodError; {:try_22_start .. :try_22_end} :catch_22_end
+    :catch_22_end
+
+
+    :try_23_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod23()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod23!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_23_end
+    :try_23_end
+    .catch Ljava/lang/AbstractMethodError; {:try_23_start .. :try_23_end} :catch_23_end
+    :catch_23_end
+
+
+    :try_24_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod24()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod24!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_24_end
+    :try_24_end
+    .catch Ljava/lang/AbstractMethodError; {:try_24_start .. :try_24_end} :catch_24_end
+    :catch_24_end
+
+
+    :try_25_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod25()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod25!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_25_end
+    :try_25_end
+    .catch Ljava/lang/AbstractMethodError; {:try_25_start .. :try_25_end} :catch_25_end
+    :catch_25_end
+
+
+    :try_26_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod26()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod26!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_26_end
+    :try_26_end
+    .catch Ljava/lang/AbstractMethodError; {:try_26_start .. :try_26_end} :catch_26_end
+    :catch_26_end
+
+
+    :try_27_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod27()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod27!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_27_end
+    :try_27_end
+    .catch Ljava/lang/AbstractMethodError; {:try_27_start .. :try_27_end} :catch_27_end
+    :catch_27_end
+
+
+    :try_28_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod28()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod28!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_28_end
+    :try_28_end
+    .catch Ljava/lang/AbstractMethodError; {:try_28_start .. :try_28_end} :catch_28_end
+    :catch_28_end
+
+
+    :try_29_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod29()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod29!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_29_end
+    :try_29_end
+    .catch Ljava/lang/AbstractMethodError; {:try_29_start .. :try_29_end} :catch_29_end
+    :catch_29_end
+
+
+    :try_30_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod30()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod30!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_30_end
+    :try_30_end
+    .catch Ljava/lang/AbstractMethodError; {:try_30_start .. :try_30_end} :catch_30_end
+    :catch_30_end
+
+
+    :try_31_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod31()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod31!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_31_end
+    :try_31_end
+    .catch Ljava/lang/AbstractMethodError; {:try_31_start .. :try_31_end} :catch_31_end
+    :catch_31_end
+
+
+    :try_32_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod32()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod32!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_32_end
+    :try_32_end
+    .catch Ljava/lang/AbstractMethodError; {:try_32_start .. :try_32_end} :catch_32_end
+    :catch_32_end
+
+
+    :try_33_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod33()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod33!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_33_end
+    :try_33_end
+    .catch Ljava/lang/AbstractMethodError; {:try_33_start .. :try_33_end} :catch_33_end
+    :catch_33_end
+
+
+    :try_34_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod34()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod34!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_34_end
+    :try_34_end
+    .catch Ljava/lang/AbstractMethodError; {:try_34_start .. :try_34_end} :catch_34_end
+    :catch_34_end
+
+
+    :try_35_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod35()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod35!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_35_end
+    :try_35_end
+    .catch Ljava/lang/AbstractMethodError; {:try_35_start .. :try_35_end} :catch_35_end
+    :catch_35_end
+
+
+    :try_36_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod36()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod36!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_36_end
+    :try_36_end
+    .catch Ljava/lang/AbstractMethodError; {:try_36_start .. :try_36_end} :catch_36_end
+    :catch_36_end
+
+
+    :try_37_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod37()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod37!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_37_end
+    :try_37_end
+    .catch Ljava/lang/AbstractMethodError; {:try_37_start .. :try_37_end} :catch_37_end
+    :catch_37_end
+
+
+    :try_38_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod38()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod38!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_38_end
+    :try_38_end
+    .catch Ljava/lang/AbstractMethodError; {:try_38_start .. :try_38_end} :catch_38_end
+    :catch_38_end
+
+
+    :try_39_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod39()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod39!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_39_end
+    :try_39_end
+    .catch Ljava/lang/AbstractMethodError; {:try_39_start .. :try_39_end} :catch_39_end
+    :catch_39_end
+
+
+    :try_40_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod40()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod40!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_40_end
+    :try_40_end
+    .catch Ljava/lang/AbstractMethodError; {:try_40_start .. :try_40_end} :catch_40_end
+    :catch_40_end
+
+
+    :try_41_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod41()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod41!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_41_end
+    :try_41_end
+    .catch Ljava/lang/AbstractMethodError; {:try_41_start .. :try_41_end} :catch_41_end
+    :catch_41_end
+
+
+    :try_42_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod42()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod42!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_42_end
+    :try_42_end
+    .catch Ljava/lang/AbstractMethodError; {:try_42_start .. :try_42_end} :catch_42_end
+    :catch_42_end
+
+
+    :try_43_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod43()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod43!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_43_end
+    :try_43_end
+    .catch Ljava/lang/AbstractMethodError; {:try_43_start .. :try_43_end} :catch_43_end
+    :catch_43_end
+
+
+    :try_44_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod44()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod44!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_44_end
+    :try_44_end
+    .catch Ljava/lang/AbstractMethodError; {:try_44_start .. :try_44_end} :catch_44_end
+    :catch_44_end
+
+
+    :try_45_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod45()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod45!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_45_end
+    :try_45_end
+    .catch Ljava/lang/AbstractMethodError; {:try_45_start .. :try_45_end} :catch_45_end
+    :catch_45_end
+
+
+    :try_46_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod46()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod46!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_46_end
+    :try_46_end
+    .catch Ljava/lang/AbstractMethodError; {:try_46_start .. :try_46_end} :catch_46_end
+    :catch_46_end
+
+
+    :try_47_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod47()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod47!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_47_end
+    :try_47_end
+    .catch Ljava/lang/AbstractMethodError; {:try_47_start .. :try_47_end} :catch_47_end
+    :catch_47_end
+
+
+    :try_48_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod48()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod48!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_48_end
+    :try_48_end
+    .catch Ljava/lang/AbstractMethodError; {:try_48_start .. :try_48_end} :catch_48_end
+    :catch_48_end
+
+
+    :try_49_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod49()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod49!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_49_end
+    :try_49_end
+    .catch Ljava/lang/AbstractMethodError; {:try_49_start .. :try_49_end} :catch_49_end
+    :catch_49_end
+
+
+    :try_50_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod50()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod50!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_50_end
+    :try_50_end
+    .catch Ljava/lang/AbstractMethodError; {:try_50_start .. :try_50_end} :catch_50_end
+    :catch_50_end
+
+
+    :try_51_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod51()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod51!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_51_end
+    :try_51_end
+    .catch Ljava/lang/AbstractMethodError; {:try_51_start .. :try_51_end} :catch_51_end
+    :catch_51_end
+
+
+    :try_52_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod52()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod52!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_52_end
+    :try_52_end
+    .catch Ljava/lang/AbstractMethodError; {:try_52_start .. :try_52_end} :catch_52_end
+    :catch_52_end
+
+
+    :try_53_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod53()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod53!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_53_end
+    :try_53_end
+    .catch Ljava/lang/AbstractMethodError; {:try_53_start .. :try_53_end} :catch_53_end
+    :catch_53_end
+
+
+    :try_54_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod54()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod54!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_54_end
+    :try_54_end
+    .catch Ljava/lang/AbstractMethodError; {:try_54_start .. :try_54_end} :catch_54_end
+    :catch_54_end
+
+
+    :try_55_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod55()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod55!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_55_end
+    :try_55_end
+    .catch Ljava/lang/AbstractMethodError; {:try_55_start .. :try_55_end} :catch_55_end
+    :catch_55_end
+
+
+    :try_56_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod56()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod56!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_56_end
+    :try_56_end
+    .catch Ljava/lang/AbstractMethodError; {:try_56_start .. :try_56_end} :catch_56_end
+    :catch_56_end
+
+
+    :try_57_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod57()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod57!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_57_end
+    :try_57_end
+    .catch Ljava/lang/AbstractMethodError; {:try_57_start .. :try_57_end} :catch_57_end
+    :catch_57_end
+
+
+    :try_58_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod58()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod58!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_58_end
+    :try_58_end
+    .catch Ljava/lang/AbstractMethodError; {:try_58_start .. :try_58_end} :catch_58_end
+    :catch_58_end
+
+
+    :try_59_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod59()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod59!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_59_end
+    :try_59_end
+    .catch Ljava/lang/AbstractMethodError; {:try_59_start .. :try_59_end} :catch_59_end
+    :catch_59_end
+
+
+    :try_60_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod60()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod60!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_60_end
+    :try_60_end
+    .catch Ljava/lang/AbstractMethodError; {:try_60_start .. :try_60_end} :catch_60_end
+    :catch_60_end
+
+
+    :try_61_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod61()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod61!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_61_end
+    :try_61_end
+    .catch Ljava/lang/AbstractMethodError; {:try_61_start .. :try_61_end} :catch_61_end
+    :catch_61_end
+
+
+    :try_62_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod62()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod62!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_62_end
+    :try_62_end
+    .catch Ljava/lang/AbstractMethodError; {:try_62_start .. :try_62_end} :catch_62_end
+    :catch_62_end
+
+
+    :try_63_start
+        invoke-interface {p0}, LIface2;->notImplementedMethod63()V
+        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
+        const-string v1, "FAILED TO THROW AbstractMethodError when calling notImplementedMethod63!"
+        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
+        goto :catch_63_end
+    :try_63_end
+    .catch Ljava/lang/AbstractMethodError; {:try_63_start .. :try_63_end} :catch_63_end
+    :catch_63_end
+    return-void
+.end method
diff --git a/test/972-default-imt-collision/src/Main.java b/test/972-default-imt-collision/src/Main.java
new file mode 100644
index 0000000..6819e43
--- /dev/null
+++ b/test/972-default-imt-collision/src/Main.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2016 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.*;
+
+public class Main {
+  public static void main(String[] args) {
+    try {
+      Class<?> c = Class.forName("Klass");
+      Object o = c.newInstance();
+      Class<?> iface = Class.forName("Iface2");
+      Method test = c.getMethod("testMe", iface);
+      test.invoke(null, o);
+    } catch (Exception e) {
+      e.printStackTrace();
+      System.out.println("FAILED: could not run testMe!");
+    }
+  }
+}