-
Bug
-
Resolution: Fixed
-
P1
-
1.0
Name: szC45993 Date: 06/10/99
The Tonga/src/nsk/coverage/parse3001 test (source is placed below) crushes
java version "1.2.1" HotSpot VM (1.0fcs, mixed mode, build E) on Win32
under the internal compilation of method which
uses multianewarray ( multianewarray class [I, 1 ) instruction.
It seems that the crash is arisen in the following dynamic chain of HS
procedures invocation:
Parse::do_multianewarray(int 4, int 1, int 40) line 780 + 18 bytes
Parse::do_one_bytecode(Bytecodes::Code _multianewarray, MethodByteCodeStream & {...}, unsigned int 0) line 2073
Parse::do_one_block(MethodByteCodeStream & {...}, unsigned int 28, unsigned int 0) line 585 + 20 bytes
Parse::Init(CompilationScope * 0x00cde42c, JVMStateObj * 0x00000000, JVMStateObj * 0x00000000, int 0, int 1) line 457
Parse::Parse(CompilationScope * 0x00cde42c, PhaseGVN & {...}) line 215
Compile::Compile(CompilationScope * 0x00cde42c) line 118
MethodCompiler::compile_helper(methodOopDesc * 0x0c3ac3a8) line 97
VM_MethodCompiler::doit() line 241 + 12 bytes
VM_Operation::evaluate() line 31
VMThread::evaluate_operation(VM_Operation * 0x0081fda0) line 439
VMThread::loop() line 563
VMThread::vm_thread_main(Monitor * 0x007d1430) line 336
_start(void * 0x00812da0) line 197 + 19 bytes
MSVCRT! 78009b75()
KERNEL32! 77f04f2c()
See LOG:
========
[#] cd F:/nsk/coverage/parse3/parse3001
[#] CLASSPATH="f:/ld21/java/sqe/sqe-tools2.0-nsk/asmtools.jar;.;${CLASSPATH}"
[#] export CLASSPATH
[#] c:/jdk1.2.1A/bin/java javasoft.sqe.jasm.Main -d . parse3001.jasm
[#] c:/jdk1.2.1A/bin/java -version
java version "1.2.1"
HotSpot VM (1.0fcs, mixed mode, build E)
[#] c:/jdk1.2.1A/bin/java -verify parse3001
[1] + Done(139) c:/jdk1.2.1A/bin/java -verify parse3001
150 Segmentation violation c:/jdk1.2.1A/bin/java
[#] c:/jdk1.2.1A/bin/java -classic -version
java version "1.2.1"
Classic VM (build JDK-1.2.1-A, native threads)
[#] c:/jdk1.2.1A/bin/java -classic -verify parse3001
[#]
SOURCE:
========
//--------------------- parse3001.jasm:
// Ident: %Z%%M% %I% %E%
// Copyright %G% Sun Microsystems, Inc. All Rights Reserved
public class parse3001
{
static final Field mask:I = int 8191;
static final Field delta:I = int 123;
static final Field Len:I = int 7944;
static Field rand:"Ljava/util/Random;";
static Method nextInt:"()I"
stack 2 locals 1
{
getstatic Field rand:"Ljava/util/Random;";
invokevirtual Method java/util/Random.nextInt:"()I";
sipush 8191;
iand;
bipush 123;
isub;
istore_0;
iload_0;
ireturn;
}
static Method randomWrite:"([F)I"
stack 4 locals 4
{
aload_0;
arraylength;
istore_1;
iconst_0;
istore_3;
goto L43;
L8: invokestatic Method nextInt:"()I";
istore_2;
try t28;
aload_0;
iload_2;
iload_2;
i2l;
l2f;
fastore;
iload_2;
iflt L26;
iload_2;
iload_1;
if_icmplt L40;
L26: iconst_1;
ireturn;
endtry t28;
catch t28 java/lang/ArrayIndexOutOfBoundsException;
pop;
iload_2;
iflt L40;
iload_2;
iload_1;
if_icmpge L40;
iconst_2;
ireturn;
L40: iinc 3, 1;
L43: iload_3;
iload_1;
if_icmplt L8;
iconst_0;
ireturn;
}
static Method randomRead:"([F)I"
stack 8 locals 5
{
aload_0;
arraylength;
istore_1;
iconst_0;
istore_3;
goto L60;
L8: invokestatic Method nextInt:"()I";
istore_2;
try t45;
aload_0;
iload_2;
faload;
fstore 4;
iload_2;
iflt L26;
iload_2;
iload_1;
if_icmplt L28;
L26: iconst_1;
ireturn;
L28: fload 4;
fconst_0;
fcmpl;
ifeq L57;
fload 4;
iload_2;
///////////////////////////////////
//---------------------------------
//special insertion:
bipush 10;
multianewarray class [I, 1;
pop;
//---------------------------------
///////////////////////////////////
i2f;
fcmpl;
ifeq L57;
iconst_3;
ireturn;
endtry t45;
catch t45 java/lang/ArrayIndexOutOfBoundsException;
pop;
iload_2;
iflt L57;
iload_2;
iload_1;
if_icmpge L57;
iconst_2;
ireturn;
L57: iinc 3, 1;
L60: iload_3;
iload_1;
iconst_5;
imul;
if_icmplt L8;
iconst_0;
ireturn;
}
public static Method run:"([Ljava/lang/String;Ljava/io/PrintStream;)I"
stack 3 locals 3
{
new class java/util/Random;
dup;
invokespecial Method java/util/Random."<init>":"()V";
putstatic Field rand:"Ljava/util/Random;";
getstatic Field rand:"Ljava/util/Random;";
ldc2_w long 123456789l;
invokevirtual Method java/util/Random.setSeed:"(J)V";
sipush 7944;
newarray float;
astore_2;
aload_2;
invokestatic Method randomWrite:"([F)I";
ifne L39;
aload_2;
invokestatic Method randomRead:"([F)I";
ifeq L41;
L39: iconst_2;
ireturn;
L41: iconst_0;
ireturn;
}
public static Method main:"([Ljava/lang/String;)V"
stack 2 locals 1
{
aload_0;
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
invokestatic Method run:"([Ljava/lang/String;Ljava/io/PrintStream;)I";
bipush 95/*STATUS_TEMP*/;
iadd;
invokestatic Method java/lang/System.exit:"(I)V";
return;
}
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
return;
}
} // end Class parse3001
//---------------------
======================================================================