--- old/src/hotspot/share/prims/methodHandles.cpp 2019-03-11 14:27:07.026354313 +0100 +++ new/src/hotspot/share/prims/methodHandles.cpp 2019-03-11 14:27:06.814354316 +0100 @@ -335,6 +335,12 @@ oop MethodHandles::init_field_MemberName(Handle mname, fieldDescriptor& fd, bool is_setter) { int flags = (jushort)( fd.access_flags().as_short() & JVM_RECOGNIZED_FIELD_MODIFIERS ); flags |= IS_FIELD | ((fd.is_static() ? JVM_REF_getStatic : JVM_REF_getField) << REFERENCE_KIND_SHIFT); + if (fd.is_flattenable()) { + flags |= JVM_ACC_FLATTENABLE; + } + if (fd.is_flattened()) { + flags |= JVM_ACC_FIELD_FLATTENED; + } if (is_setter) flags += ((JVM_REF_putField - JVM_REF_getField) << REFERENCE_KIND_SHIFT); int vmindex = fd.offset(); // determines the field uniquely when combined with static bit @@ -569,7 +575,7 @@ if (is_subword_type(bt)) { bsig = vmSymbols::int_signature(); } else { - assert(bt == T_OBJECT || bt == T_ARRAY, "is_basic_type_signature was false"); + assert(bt == T_OBJECT || bt == T_ARRAY || bt == T_VALUETYPE, "is_basic_type_signature was false"); bsig = vmSymbols::object_signature(); } } else { @@ -588,7 +594,7 @@ if (arg_pos == keep_arg_pos) { buffer.write((char*) ss.raw_bytes(), (int) ss.raw_length()); - } else if (bt == T_OBJECT || bt == T_ARRAY) { + } else if (bt == T_OBJECT || bt == T_ARRAY || bt == T_VALUETYPE) { buffer.write(OBJ_SIG, OBJ_SIG_LEN); } else { if (is_subword_type(bt))