blob: 4ae2a1bdf9ca27a8795850165cfe333a30cced95 [file] [log] [blame]
/*
* 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 "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()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."<init>":"(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