Fwd: An undefined behavior w.r.t. <clinit>
Yuting Chen
chenyt.cs.sjtu at gmail.com
Fri Jul 10 21:32:24 UTC 2015
>>Reported to jls-jvms-spec-comments, and so far no response.
>>Thus I report the problem here again.
Hello, I recently feel puzzling about the JVM behaviors when an
illegal <clinit> is met. The specification may not be complete in this
part.
In the specification (jvms-2.9, se8), we have the words: "In a class
file whose version number is 51.0 or above, the method must
additionally have its ACC_STATIC flag (§4.6) set in order to be the
class or interface initialization method."
However, the behavior is undefined if the ACC_STATIC flag is not set.
Thus when a class without an ACC_STATIC flag may either be accepted or
be rejected, depending on the JVM developers. The results can be
unpredictable.
I checked this by running a class on OpenJDK8-HotSpot and IBM J9, and
found different results. The class can be run on HotSpot without
triggering any exceptions (i.e., <clinit> is of no consequence).
However, IBM J9 can throw out a FormatError (Exception in thread
"main" java.lang.ClassFormatError: JVMCFRE074 no Code attribute
specified; class=M1436188543, method=<clinit>()V, pc=0). I checked the
specification and still could not decide which JVM behaves correctly.
(I thought the question again, and believed that it can be better if
HotSpot can also report a ClassFormatError.)
The class is attached, and the decompiled code is given next:
class M1436188543
minor version: 0
major version: 51
flags: ACC_SUPER
Constant pool:
#1 = Utf8 java/lang/Object
#2 = Utf8 <clinit>
#3 = Utf8 SourceFile
#4 = Utf8 M1436188543
#5 = Utf8 main
#6 = Class #4 // M1436188543
#7 = Utf8 Code
#8 = Utf8 ([Ljava/lang/String;)V
#9 = Utf8 ()V
#10 = Utf8 Jasmin
#11 = Class #1 // java/lang/Object
{
public abstract {};
descriptor: ()V
flags: ACC_PUBLIC, ACC_ABSTRACT
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=0, locals=1, args_size=1
0: return
}
More information about the hotspot-runtime-dev
mailing list