diff options
author | 2016-01-26 16:07:41 -0800 | |
---|---|---|
committer | 2016-01-27 13:47:38 -0800 | |
commit | 12771081679e43a6c34cd35c80ff9663bbdd15e9 (patch) | |
tree | 1c552b2a53a8598ec7870a42dfb095fb58c646a6 | |
parent | 2aaf58e90c9229610b2a16644e9866b6741ce9ca (diff) |
Fix issue with IMT dispatch.
If a default and an abstract method map to the same IMT slot one could
end up invoking the default method when one invokes the abstract
method.
Bug: 24618811
Bug: 26827549
Change-Id: I2ccb8e8b5362eb4961531b63e7b946ad8ef936a6
-rw-r--r-- | runtime/class_linker.cc | 22 | ||||
-rw-r--r-- | test/972-default-imt-collision/expected.txt | 0 | ||||
-rw-r--r-- | test/972-default-imt-collision/info.txt | 1 | ||||
-rw-r--r-- | test/972-default-imt-collision/smali/Iface1.smali | 32 | ||||
-rw-r--r-- | test/972-default-imt-collision/smali/Iface2.smali | 277 | ||||
-rw-r--r-- | test/972-default-imt-collision/smali/Klass.smali | 993 | ||||
-rw-r--r-- | test/972-default-imt-collision/src/Main.java | 31 |
7 files changed, 1346 insertions, 10 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index bb709e8774..080cfb4e47 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -6245,15 +6245,7 @@ bool ClassLinker::LinkInterfaceMethods( } // 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. @@ -6269,7 +6261,17 @@ bool ClassLinker::LinkInterfaceMethods( 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 0000000000..e69de29bb2 --- /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 0000000000..adecee3be5 --- /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 0000000000..088c29c6a0 --- /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 0000000000..4320e7e1f6 --- /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 0000000000..a98f9a7e99 --- /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 0000000000..6819e43ae7 --- /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!"); + } + } +} |