RFR: 8256726: Zero: print proper message in ArrayIndexOutOfBoundException [v2]

Aleksey Shipilev shade at openjdk.java.net
Fri Nov 27 09:21:19 UTC 2020


On Fri, 27 Nov 2020 09:07:47 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> src/hotspot/share/interpreter/zero/bytecodeInterpreter.cpp line 1504:
>> 
>>> 1502:       arrayOop arrObj = (arrayOop)STACK_OBJECT(arrayOff);                      \
>>> 1503:       jint     index  = STACK_INT(arrayOff + 1);                               \
>>> 1504:       char message[2 * jintAsStringSize + 35];                                 \
>> 
>> What's this magic `35` here? `strlen("Index A out of bounds for length B") + 1 == 35`. Isn't this counting the integers twice?
>> 
>> Consider adding a comment.
>
> Seems OK to overestimate a bit. That's what `Runtime1::throw_range_check_exception` does in C1, so I have not challenged it:
> https://github.com/openjdk/jdk/blob/2f06893a29fba3b40cc1cf03095b75b217d1bb93/src/hotspot/share/c1/c1_Runtime1.cpp#L668-L671
> 
> It should count the integers twice, because there are two integers in the string.

Well, fine, I'll count them exactly and `STATIC_ASSERT` it ;)

-------------

PR: https://git.openjdk.java.net/jdk/pull/1341


More information about the hotspot-runtime-dev mailing list