diff -r 8726d73d17fb -r 6d08ec72803b hotspot/test/runtime/logging/BadMap50.jasm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/logging/BadMap50.jasm Wed Dec 02 14:07:58 2015 -0500 @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * This class should throw VerifyError because the StackMap for bytecode + * index 45 is incorrect. The stack maps for bytecode indexes 45 and 49 are + * incompatible because 45 doesn't supply enough locals to satisfy 49. + * + * The astore_2 bytecode at bytecode index 45 changes the type state, + * preventing the stackmap mismatch. But, if the incoming type state is used, + * as required by JVM Spec 8, then the verifier will detected the stackmap + * mismatch, and throw VerifyError. + */ + +super public class BadMap50 + version 50:0 +{ + + +public Method "":"()V" + stack 1 locals 1 +{ + aload_0; + invokespecial Method java/lang/Object."":"()V"; + return; +} + +public static Method main:"([Ljava/lang/String;)V" + throws java/lang/Throwable + stack 0 locals 1 +{ + return; +} + +public static Method foo:"()V" + stack 3 locals 5 +{ + iconst_0; + ifne L5; + nop; + try t7; + L5: stack_frame_type full; + aconst_null; + astore_0; + iconst_3; + istore_1; + try t0; + aconst_null; + astore_0; + endtry t0; + goto L19; + catch t0 java/io/IOException; + stack_frame_type full; + locals_map class java/lang/Object, int; + stack_map class java/io/IOException; + astore_2; + aconst_null; + astore_0; + iconst_2; + istore_1; + try t1; + L19: stack_frame_type full; + locals_map class java/lang/Object, int; + iconst_0; + istore_2; + endtry t1; + iload_1; + ifeq L37; + nop; + goto L37; + catch t1 #0; + catch t2 #0; + try t2; + stack_frame_type full; + locals_map class java/lang/Object, int; + stack_map class java/lang/Throwable; +astore_3; +iconst_2; +istore_2; + endtry t2; + iload_1; + ifeq L35; + nop; + L35: stack_frame_type full; + locals_map class java/lang/Object, int, bogus, class java/lang/Throwable; +aload_3; + athrow; + try t3, t4; + L37: stack_frame_type full; + locals_map class java/lang/Object, int, int; + iload_2; + ifeq L42; + nop; + endtry t3, t4; + L42: stack_frame_type full; + locals_map class java/lang/Object, int, int; + goto L54; + catch t3 java/lang/Exception; + try t5; + stack_frame_type full; + locals_map class java/lang/Object, int; + stack_map class java/lang/Exception; + // astore_2; // astore_2, at bci 45, that changes the type state. +// pop; +iconst_1; + istore_2; // astore_2, at bci 45, that changes the type state. + endtry t5; + goto L54; + catch t4 #0; + catch t5 #0; + catch t6 #0; + try t6; + stack_frame_type full; + locals_map class java/lang/Object, int, int; + stack_map class java/lang/Throwable; +// astore 3; + istore_1; + endtry t6; +// aload 3; +// athrow; + L54: stack_frame_type full; + locals_map class java/lang/Object, int, int; + goto L57; + L57: stack_frame_type full; + locals_map class java/lang/Object, int, int; + nop; + endtry t7; + return; + catch t7 #0; + stack_frame_type full; + stack_map class java/lang/Throwable; + nop; + athrow; +} + +} // end Class BadMap50