RFR 8220118 [lworld] Fix C1 handling of unloaded Q classes
Tobias Hartmann
tobias.hartmann at oracle.com
Wed Mar 6 12:59:50 UTC 2019
Hi Ioi,
this looks good to me.
Best regards,
Tobias
On 05.03.19 21:06, Ioi Lam wrote:
> https://bugs.openjdk.java.net/browse/JDK-8220118
> http://cr.openjdk.java.net/~iklam/valhalla/8220118-fix-unloaded-q-class-handling.v01/
>
> JDK-8214689 [1] introduced unloaded ciValueKlass for cases like:
>
> anewarray #3 // class "QV;"
>
> ... where the class V has not yet been loaded. However, ciObjectFactory stores
> unloaded classes using their unadorned (?) names -- i.e., any leading "L" or "Q" are
> stripped. This leads to confusion when both "Q" and "L" references are made to the same
> unloaded class:
>
> static Object[] test5(int n) {
> if (n == 0) {
> return null;
> } else if (n == 1) {
> MyValue5.box[] arr = new MyValue5.box[10];
> arr[1] = MyValue5.make(22345);
> return arr;
> } else {
> MyValue5[] arr = new MyValue5[10];
> arr[1] = MyValue5.make(12345);
> return arr;
> }
> }
>
> The above method would cause C1 to assert.
>
> A proper fix would be to revert the JDK-8214689 changes in unloaded
> classes handling. Instead, we should determine the Q-ness using
> ciBytecodeStream::is_klass_never_null().
>
> I also fixes some minor bugs discovered by the new test cases.
>
> (a) improper assertions with runtime_call new_object_array
> (b) runtime_call store_flattened_array would corrupt RAX
>
> Thanks
> - Ioi
>
>
> [1] http://hg.openjdk.java.net/valhalla/valhalla/rev/b890823b8dc6
> https://bugs.openjdk.java.net/browse/JDK-8214689
More information about the valhalla-dev
mailing list