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