--- old/src/share/vm/opto/doCall.cpp 2017-07-06 17:28:38.535365285 +0200 +++ new/src/share/vm/opto/doCall.cpp 2017-07-06 17:28:34.385383918 +0200 @@ -670,8 +670,10 @@ assert(ctype == C->env()->___Value_klass(), "unexpected value type klass"); Node* retnode = pop(); assert(retnode->is_ValueType(), "inconsistent"); - retnode = retnode->as_ValueType()->allocate(this); - push(retnode); + ValueTypeNode* vt = retnode->as_ValueType(); + Node* alloc = vt->allocate(this); + Node* vtptr = _gvn.transform(new ValueTypePtrNode(vt, alloc)); + push(vtptr); } } else { assert(rt == ct, "unexpected mismatch: rt=%s, ct=%s", type2name(rt), type2name(ct));