< prev index next > src/hotspot/share/code/compiledMethod.cpp
Print this page
// Bytecode can be inaccurate in such case.
Method* callee = attached_method_before_pc(pc);
if (callee != nullptr) {
has_receiver = !(callee->access_flags().is_static());
has_appendix = false;
- signature = callee->signature();
+ signature = callee->signature();
+
+ // If inline types are passed as fields, use the extended signature
+ // which contains the types of all (oop) fields of the inline type.
+ if (is_compiled_by_c2() && callee->has_scalarized_args()) {
+ const GrowableArray<SigEntry>* sig = callee->adapter()->get_sig_cc();
+ assert(sig != nullptr, "sig should never be null");
+ TempNewSymbol tmp_sig = SigEntry::create_symbol(sig);
+ has_receiver = false; // The extended signature contains the receiver type
+ fr.oops_compiled_arguments_do(tmp_sig, has_receiver, has_appendix, reg_map, f);
+ return;
+ }
} else {
SimpleScopeDesc ssd(this, pc);
Bytecode_invoke call(methodHandle(Thread::current(), ssd.method()), ssd.bci());
has_receiver = call.has_receiver();
< prev index next >