--- old/src/share/vm/runtime/deoptimization.cpp 2017-09-21 09:18:05.840998215 +0200 +++ new/src/share/vm/runtime/deoptimization.cpp 2017-09-21 09:18:05.748998216 +0200 @@ -1027,12 +1027,18 @@ field._offset = fs.offset(); field._type = FieldType::basic_type(fs.signature()); if (field._type == T_VALUETYPE) { - // Resolve klass of flattened value type field - SignatureStream ss(fs.signature(), false); - Klass* vk = ss.as_klass(Handle(THREAD, klass->class_loader()), Handle(THREAD, klass->protection_domain()), SignatureStream::NCDFError, THREAD); - guarantee(!HAS_PENDING_EXCEPTION, "Should not have any exceptions pending"); - assert(vk->is_value(), "must be a ValueKlass"); - field._klass = InstanceKlass::cast(vk); + if (fs.is_flatten()) { + // Resolve klass of flattened value type field + SignatureStream ss(fs.signature(), false); + Klass* vk = ss.as_klass(Handle(THREAD, klass->class_loader()), Handle(THREAD, klass->protection_domain()), SignatureStream::NCDFError, THREAD); + guarantee(!HAS_PENDING_EXCEPTION, "Should not have any exceptions pending"); + assert(vk->is_value(), "must be a ValueKlass"); + field._klass = InstanceKlass::cast(vk); + } else { + // Non-flattened value type field + // TODO change this when we use T_VALUETYPEPTR + field._type = T_OBJECT; + } } fields->append(field); }