-
Bug
-
Resolution: Not an Issue
-
P2
-
None
-
1.3.0
-
generic
-
generic
Name: ipC94532 Date: 10/07/99
If method run() of java.lang.Thread described as static the exception
IncompatibleClassChangeError must be thrown.
But Java HotSpot (TM) Client VM does nothing.
According contract of the "java.lang.Thread" class method run() must be nonstatic.
Nonstatic methods are called by invokevirtual instruction. And JVM
specification reads (instruction "invokevirtual", section "Linking
Exceptions"):
...
Otherwise, if the resolved method is a class (static) method, the
invokevirtual instruction throws an IncompatibleClassChangeError.
=========================================================================
logs under SolarisOS (same under WinNT):
novo50% java -version
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-H)
Java HotSpot (TM) Client VM (build 1.3-H, interpreted mode)
novo50% java -Xfuture run_test
novo50%
No errors, no exceptions, no logs.
novo50% java -classic -version
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-H)
Classic VM (build 1.3.0-H, green threads, nojit)
novo50% java -classic -Xfuture run_test
java.lang.IncompatibleClassChangeError: run_static_test: method run()V did not used to be static
novo50%
Correct behavior.
=========================================================================
The test couldn't be written in java. Javac does not allow
statment "public static void run()" in class which extends java.lang.Thread.
Source was taken from bug report #4197839.
sources:
//------------ run_test.jasm ---------------
public class run_static_test
extends java/lang/Thread
{
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Thread."<init>":"()V";
return;
}
public static Method run:"()V"
// ^^^^^^ - incorrect
stack 2 locals 1
{
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
ldc String "--run--";
invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
return;
}
}// end Class run_static_test
public class run_test
{
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;)V";
return;
}
public static Method run:"([Ljava/lang/String;Ljava/io/PrintStream;)V"
stack 2 locals 3
{
new class run_static_test;
dup;
invokespecial Method run_static_test."<init>":"()V";
astore_2;
aload_2;
invokevirtual Method java/lang/Thread.start:"()V";
return;
}
} // end Class run_test
=========================================================================
======================================================================
- relates to
-
JDK-4197839 Incorrect exceptions while invocation static run
- Closed