diff -r 2974041b684f -r 7b2c4f35fc28 test/hotspot/jtreg/runtime/condy/CondyBadLDC.jasm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/condy/CondyBadLDC.jasm Mon Feb 12 14:28:04 2018 -0500 @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2018, 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 test contains a incorrect ldc instruction of a condy whose loadable + * constant is a double. VerifyError expected. + */ + +class CondyBadLDC + version 55:0 +{ + + +public Method "":"()V" + stack 1 locals 1 +{ + aload_0; + invokespecial Method java/lang/Object."":"()V"; + return; +} + +public static Method intConversion:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;I)Ljava/lang/Object;" + throws java/lang/Throwable + stack 4 locals 6 +{ + aload_1; + astore 4; + iconst_m1; + istore 5; + aload 4; + invokevirtual Method java/lang/String.hashCode:"()I"; + lookupswitch{ //11 + -2001159796: L238; + -1538095928: L272; + -891985903: L255; + 66: L108; + 67: L124; + 68: L140; + 70: L156; + 73: L172; + 74: L188; + 83: L204; + 90: L221; + default: L286 }; + L108: stack_frame_type append; + locals_map class java/lang/String, int; + aload 4; + ldc String "B"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + iconst_0; + istore 5; + goto L286; + L124: stack_frame_type same; + aload 4; + ldc String "C"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + iconst_1; + istore 5; + goto L286; + L140: stack_frame_type same; + aload 4; + ldc String "D"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + iconst_2; + istore 5; + goto L286; + L156: stack_frame_type same; + aload 4; + ldc String "F"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + iconst_3; + istore 5; + goto L286; + L172: stack_frame_type same; + aload 4; + ldc String "I"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + iconst_4; + istore 5; + goto L286; + L188: stack_frame_type same; + aload 4; + ldc String "J"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + iconst_5; + istore 5; + goto L286; + L204: stack_frame_type same; + aload 4; + ldc String "S"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + bipush 6; + istore 5; + goto L286; + L221: stack_frame_type same; + aload 4; + ldc String "Z"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + bipush 7; + istore 5; + goto L286; + L238: stack_frame_type same; + aload 4; + ldc String "nullRef"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + bipush 8; + istore 5; + goto L286; + L255: stack_frame_type same; + aload 4; + ldc String "string"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + bipush 9; + istore 5; + goto L286; + L272: stack_frame_type same; + aload 4; + ldc String "stringArray"; + invokevirtual Method java/lang/String.equals:"(Ljava/lang/Object;)Z"; + ifeq L286; + bipush 10; + istore 5; + L286: stack_frame_type same; + iload 5; + tableswitch{ //0 to 10 + 0: L348; + 1: L354; + 2: L360; + 3: L366; + 4: L372; + 5: L377; + 6: L383; + 7: L389; + 8: L402; + 9: L404; + 10: L407; + default: L422 }; + L348: stack_frame_type same; + iload_3; + i2b; + invokestatic Method java/lang/Byte.valueOf:"(B)Ljava/lang/Byte;"; + areturn; + L354: stack_frame_type same; + iload_3; + i2c; + invokestatic Method java/lang/Character.valueOf:"(C)Ljava/lang/Character;"; + areturn; + L360: stack_frame_type same; + iload_3; + i2d; + invokestatic Method java/lang/Double.valueOf:"(D)Ljava/lang/Double;"; + areturn; + L366: stack_frame_type same; + iload_3; + i2f; + invokestatic Method java/lang/Float.valueOf:"(F)Ljava/lang/Float;"; + areturn; + L372: stack_frame_type same; + iload_3; + invokestatic Method java/lang/Integer.valueOf:"(I)Ljava/lang/Integer;"; + areturn; + L377: stack_frame_type same; + iload_3; + i2l; + invokestatic Method java/lang/Long.valueOf:"(J)Ljava/lang/Long;"; + areturn; + L383: stack_frame_type same; + iload_3; + i2s; + invokestatic Method java/lang/Short.valueOf:"(S)Ljava/lang/Short;"; + areturn; + L389: stack_frame_type same; + iload_3; + ifle L397; + iconst_1; + goto L398; + L397: stack_frame_type same; + iconst_0; + L398: stack_frame_type stack1; + stack_map int; + invokestatic Method java/lang/Boolean.valueOf:"(Z)Ljava/lang/Boolean;"; + areturn; + L402: stack_frame_type same; + aconst_null; + areturn; + L404: stack_frame_type same; + ldc String "string"; + areturn; + L407: stack_frame_type same; + iconst_2; + anewarray class java/lang/String; + dup; + iconst_0; + ldc String "string"; + aastore; + dup; + iconst_1; + ldc String "string"; + aastore; + areturn; + L422: stack_frame_type same; + new class java/lang/BootstrapMethodError; + dup; + ldc String "Failure to generate a dynamic constant"; + invokespecial Method java/lang/BootstrapMethodError."":"(Ljava/lang/String;)V"; + athrow; +} + +public static Method D:"()D" + stack 2 locals 0 +{ + // ldc of a double will yield a VerifyError, should be an ldc2_w instruction + ldc Dynamic REF_invokeStatic:CondyBadLDC.intConversion:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;I)Ljava/lang/Object;":D:"D" int 2147483647; + dreturn; +} + +public static Method main:"([Ljava/lang/String;)V" + stack 2 locals 1 +{ + invokestatic Method D:"()D"; + return; +} + +} // end Class CondyBadLDC