RFR 8223229 [lworld] C1 crashes when calling final virtual methods with value arguments

Tobias Hartmann tobias.hartmann at oracle.com
Fri May 3 10:28:29 UTC 2019

Hi Ioi,

On 02.05.19 18:09, Ioi Lam wrote:
> Will caller->code() may be different than callerFrame.cb() if the caller gets recompiled? 

Right, that could be.

> Anyway, the lookup is not necessary, as callerFrame._cb was already looked up when the frame was
> constructed. How about this:?
>     if (callerFrame.is_compiled_frame() && !callerFrame.is_deoptimized_frame()) {
>       caller_is_c1 = callerFrame.cb()->is_compiled_by_c1();
>     }

Looks good!

> BTW, I copied the original code from here:
> methodHandle SharedRuntime::reresolve_call_site(JavaThread *thread, bool& is_optimized, bool&
> caller_is_c1, TRAPS) {
>   ...
>   if (caller.is_compiled_frame() && !caller.is_deoptimized_frame()) {
>     address pc = caller.pc();
>     // Check for static or virtual call
>     bool is_static_call = false;
>     CompiledMethod* caller_nm = CodeCache::find_compiled(pc);
>     caller_is_c1 = caller_nm->is_compiled_by_c1();
> Do you think this lookup can also be replaced with caller.cb()->as_compiled_method()? If so, I'll
> file an REF and fix in the main repo.

Yes, please do so.

>> I can implement this for C2, just file a bug when you have the C1 part ready.
> OK I will do this for C1 first and get some test cases working with C2 calling C1.

Sounds good.


More information about the valhalla-dev mailing list