1*795d594fSAndroid Build Coastguard Worker; Copyright (C) 2017 The Android Open Source Project 2*795d594fSAndroid Build Coastguard Worker; 3*795d594fSAndroid Build Coastguard Worker; Licensed under the Apache License, Version 2.0 (the "License"); 4*795d594fSAndroid Build Coastguard Worker; you may not use this file except in compliance with the License. 5*795d594fSAndroid Build Coastguard Worker; You may obtain a copy of the License at 6*795d594fSAndroid Build Coastguard Worker; 7*795d594fSAndroid Build Coastguard Worker; http://www.apache.org/licenses/LICENSE-2.0 8*795d594fSAndroid Build Coastguard Worker; 9*795d594fSAndroid Build Coastguard Worker; Unless required by applicable law or agreed to in writing, software 10*795d594fSAndroid Build Coastguard Worker; distributed under the License is distributed on an "AS IS" BASIS, 11*795d594fSAndroid Build Coastguard Worker; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*795d594fSAndroid Build Coastguard Worker; See the License for the specific language governing permissions and 13*795d594fSAndroid Build Coastguard Worker; limitations under the License. 14*795d594fSAndroid Build Coastguard Worker 15*795d594fSAndroid Build Coastguard Worker.class public Test5User 16*795d594fSAndroid Build Coastguard Worker.super java/lang/Object 17*795d594fSAndroid Build Coastguard Worker 18*795d594fSAndroid Build Coastguard Worker.method public static test()V 19*795d594fSAndroid Build Coastguard Worker .limit stack 2 20*795d594fSAndroid Build Coastguard Worker .limit locals 1 21*795d594fSAndroid Build Coastguard Worker new Test5Derived 22*795d594fSAndroid Build Coastguard Worker dup 23*795d594fSAndroid Build Coastguard Worker invokespecial Test5Derived.<init>()V 24*795d594fSAndroid Build Coastguard Worker astore_0 25*795d594fSAndroid Build Coastguard Worker 26*795d594fSAndroid Build Coastguard Worker ; Call an unresolved method bar() to force verification at runtime 27*795d594fSAndroid Build Coastguard Worker ; to populate the dex cache entry for Test5Base.foo()V. 28*795d594fSAndroid Build Coastguard Worker ; try { b.bar(); } catch (IncompatibleClassChangeError icce) { } 29*795d594fSAndroid Build Coastguard Worker aload_0 30*795d594fSAndroid Build Coastguard Worker dup ; Bogus operand to be swallowed by the pop in the non-exceptional path. 31*795d594fSAndroid Build Coastguard Worker catch_begin: 32*795d594fSAndroid Build Coastguard Worker invokevirtual Test5Derived.bar()V 33*795d594fSAndroid Build Coastguard Worker catch_end: 34*795d594fSAndroid Build Coastguard Worker pop ; Pops the exception or the bogus operand from above. 35*795d594fSAndroid Build Coastguard Worker .catch java/lang/IncompatibleClassChangeError from catch_begin to catch_end using catch_end 36*795d594fSAndroid Build Coastguard Worker 37*795d594fSAndroid Build Coastguard Worker aload_0 38*795d594fSAndroid Build Coastguard Worker invokevirtual Test5Derived.foo()V 39*795d594fSAndroid Build Coastguard Worker return 40*795d594fSAndroid Build Coastguard Worker.end method 41