RFR 8220118 [lworld] Fix C1 handling of unloaded Q classes

Ioi Lam ioi.lam at oracle.com
Tue Mar 5 20:06:42 UTC 2019


JDK-8214689 [1] introduced unloaded ciValueKlass for cases like:

       anewarray #3 // class "QV;"

... where the class V has not yet been loaded. However, ciObjectFactory 
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

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

- Ioi

[1] http://hg.openjdk.java.net/valhalla/valhalla/rev/b890823b8dc6

More information about the valhalla-dev mailing list