< prev index next >

src/hotspot/share/code/compiledMethod.cpp

Print this page

        

*** 355,385 **** Method* callee = attached_method_before_pc(pc); if (callee != NULL) { has_receiver = !(callee->access_flags().is_static()); has_appendix = false; signature = callee->signature(); - } // If value types are passed as fields, use the extended signature // which contains the types of all (oop) fields of the value type. ! if (ValueTypePassFieldsAsArgs && callee != NULL) { ! // Get the extended signature from the callee's adapter through the attached method ! Symbol* sig_ext = callee->adapter()->get_sig_extended(); ! #ifdef ASSERT ! // Check if receiver or one of the arguments is a value type ! bool has_value_receiver = has_receiver && callee->method_holder()->is_value(); ! bool has_value_argument = has_value_receiver; ! for (SignatureStream ss(signature); !has_value_argument && !ss.at_return_type(); ss.next()) { ! if (ss.type() == T_VALUETYPE) { ! has_value_argument = true; ! break; ! } ! } ! assert(has_value_argument == (sig_ext != NULL), "Signature is inconsistent"); ! #endif ! if (sig_ext != NULL) { ! signature = sig_ext; has_receiver = false; // The extended signature contains the receiver type } } fr.oops_compiled_arguments_do(signature, has_receiver, has_appendix, reg_map, f); --- 355,370 ---- Method* callee = attached_method_before_pc(pc); if (callee != NULL) { has_receiver = !(callee->access_flags().is_static()); has_appendix = false; signature = callee->signature(); // If value types are passed as fields, use the extended signature // which contains the types of all (oop) fields of the value type. ! if (callee->has_scalarized_args()) { ! const GrowableArray<SigEntry>* sig = callee->adapter()->get_sig_cc(); ! signature = SigEntry::create_symbol(sig); has_receiver = false; // The extended signature contains the receiver type } } fr.oops_compiled_arguments_do(signature, has_receiver, has_appendix, reg_map, f);
< prev index next >