RFR: [MVT] MethodHandlesTest fails with assertions enabled

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Mon Jul 24 16:28:55 UTC 2017

Thanks for taking care of it, Maurizio!

+    static final class Carrier_Q {
+        @Stable
+        final Object boxedValue;
+        @Stable
+        final MethodHandle unboxHandle;

@Stable isn't needed. Final fields in java.lang.invoke are trusted by 

+        static final MethodHandle BOX_VALUE_GETTER;
+        static final MethodHandle UNBOX_HANDLE_GETTER;

+                NamedFunction unboxGetter = new 

+                NamedFunction boxedValue = new 

Maybe cache NamedFunctions right away?

-        return mh.copyWithExtendL(type2, form2, value)
-                 .copyWithExtendL(type2, form2, unbox);
+        try {
+            return mh.copyWithExtendL(type2, form2, new 
Carrier_Q(value, unbox));
+        } catch (Throwable ex) {
+            throw new IllegalStateException(ex);
+        }

Why do you need a try-catch block here?

Otherwise, looks good.

Best regards,
Vladimir Ivanov

On 7/24/17 7:14 PM, Maurizio Cimadamore wrote:
> Hi,
> this is a fix for a problem when running MethodHandlesTest with 
> assertions enabled (-esa). Currently, bound method handles with value 
> types are handled by encoding a bound value as a boxed value + unbox MH 
> pair - but doing so breaks some arity invariants for BMHs. This makes 
> the pair encoding explicit, by adding a small carrier class for the 
> box/MH pair, which is then used to encode the bound value.
> http://cr.openjdk.java.net/~mcimadamore/8185142-jdk/
> Maurizio

More information about the valhalla-dev mailing list