< prev index next >

src/share/vm/opto/callGenerator.cpp

Print this page

        

@@ -152,12 +152,14 @@
     call->set_override_symbolic_info(true);
   }
   _call_node = call;  // Save the call node in case we need it later
   if (!is_static) {
     if (kit.argument(0)->is_ValueType()) {
+      if (!ValueTypePassFieldsAsArgs) {
       ValueTypeNode* vt = kit.argument(0)->as_ValueType();
       vt->store_to_memory(&kit);
+      }
     } else {
       // Make an explicit receiver null_check as part of this call.
       // Since we share a map with the caller, his JVMS gets adjusted.
       kit.null_check_receiver_before_call(method());
     }

@@ -368,11 +370,15 @@
   if (call == NULL || call->outcnt() == 0 ||
       call->in(0) == NULL || call->in(0)->is_top()) {
     return;
   }
 
-  const TypeTuple *r = call->tf()->domain();
+  // FIXME: late inlining of methods that take value type arguments is
+  // broken: arguments at the call are set up so fields of value type
+  // arguments are passed but code here expects a single argument per
+  // value type (a ValueTypeNode) instead.
+  const TypeTuple *r = call->tf()->domain_sig();
   for (int i1 = 0; i1 < method()->arg_size(); i1++) {
     if (call->in(TypeFunc::Parms + i1)->is_top() && r->field_at(TypeFunc::Parms + i1) != Type::HALF) {
       assert(Compile::current()->inlining_incrementally(), "shouldn't happen during parsing");
       return;
     }
< prev index next >