aot compiler halts when there exists an infinite loop in clinit()

Yuting Chen chenyt.cs.sjtu at gmail.com
Wed Apr 19 16:47:26 UTC 2017


The compiler can itself be a jvm, :)

I'd expect that some timeout messages will be reported (a quick
patch?). I compiled some pieces of bytecode and waited for the whole
night...

Regards,
Yuting

On Wed, Apr 19, 2017 at 2:23 AM, Peter Levart <peter.levart at gmail.com> wrote:
> <joke-mode>
> Assuming your hunch is correct, I would call this a feature, not a bug.
> Isn't it better when compilation of a program loops infinitely than when the
> program loops infinitely at runtime? :-)
> </joke-mode>
>
> Regards, Peter
>
>
> On 04/18/2017 03:14 AM, Yuting Chen wrote:
>>
>> Hi, I recently met a problem: when I tried to compile a class whose
>> clinit method contains an infinite loop, the aotc waits and fails to
>> response....
>>
>> It seems that the aotc performs some static analysis before the
>> compilation, while the analysis may not stop (when an infinite loop is
>> there).
>>
>> The bytecode is shown as follows:
>>
>> public class Vector1
>>    minor version: 0
>>    major version: 52
>>    flags: ACC_PUBLIC, ACC_SUPER
>> Constant pool:
>>     #1 = Utf8               Vector1
>>     #2 = Class              #1             // Vector1
>>     #3 = Utf8               java/lang/Object
>>     #4 = Class              #3             // java/lang/Object
>>     #5 = Utf8               serialVersionUID
>>     #6 = Utf8               J
>>     #7 = Long               -2767605614048989439l
>>     #9 = Utf8               <clinit>
>>    #10 = Utf8               ()V
>>    #11 = NameAndType        #5:#6          // serialVersionUID:J
>>    #12 = Fieldref           #2.#11         // Vector1.serialVersionUID:J
>>    #13 = Utf8               main
>>    #14 = Utf8               ([Ljava/lang/String;)V
>>    #15 = Utf8               ConstantValue
>>    #16 = Utf8               Code
>>    #17 = Utf8               StackMapTable
>> {
>>    public static {};
>>      descriptor: ()V
>>      flags: ACC_PUBLIC, ACC_STATIC
>>      Code:
>>        stack=2, locals=0, args_size=0
>>           0: ldc2_w        #7                  // long
>> -2767605614048989439l
>>           3: putstatic     #12                 // Field serialVersionUID:J
>>           6: iconst_1
>>           7: iconst_m1
>>           8: iadd
>>           9: ifge          0
>>          12: return
>>        StackMapTable: number_of_entries = 1
>>          frame_type = 0 /* same */
>>
>>    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 jdk9-dev mailing list