test/hotspot/jtreg/runtime/condy/CondyBadLDC.jasm
author phh
Sat, 30 Nov 2019 14:33:05 -0800
changeset 59330 5b96c12f909d
parent 48959 7b2c4f35fc28
permissions -rw-r--r--
8234541: C1 emits an empty message when it inlines successfully Summary: Use "inline" as the message when successfull Reviewed-by: thartmann, mdoerr Contributed-by: navy.xliu@gmail.com

/*
 * 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