< prev index next >

src/share/vm/opto/doCall.cpp

Print this page

        

@@ -668,12 +668,14 @@
             push(vt);
           } else {
             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));
           // push a zero; it's better than getting an oop/int mismatch
           pop_node(rt);
< prev index next >