RFR(S): 8142500: missing null checks in IfNode::has_only_uncommon_traps
tobias.hartmann at oracle.com
Fri Nov 13 11:32:17 UTC 2015
On 13.11.2015 08:46, Vladimir Kozlov wrote:
> Top method (one which is compiled) has _caller == NULL.
> (An other place GraphKit::transfer_exceptions_into_jvms() but that one should be merged at the end of method parsing).
> It would be nice if you say what exact case you have in this bug.
The bug shows up in the following setting: The method 'dom_method' containing the dominating uncommon trap is the top method (not inlined, _caller == NULL). However, the method 'method' containing the dominated uncommon trap is inlined (_caller != NULL). Since we check that both methods are equal this can only happen if the method inlines itself recursively.
I tried but I was not able to create a regression test for this. However, Tom Rodriguez verified that the fix solves the problem.
> The added code is correct but the comment is confusing because *caller* has to be inlined if we are processing a callee.
I agree that the comment is a bit misleading. With "methods" I meant 'method' and 'dom_method' for which we check equality before. I changed the comment to:
810 // The current method must either be inlined into both dom_caller
811 // and caller or must not be inlined at all. Bail out otherwise.
> On 11/12/15 11:08 PM, Tobias Hartmann wrote:
>> please review the following patch:
>> C2 crashes in 'IfNode::has_only_uncommon_traps()' after calling 'dom_caller->same_calls_as(caller)' because 'dom_caller' or 'caller' is NULL. This may happen if the method containing the corresponding uncommon trap is not inlined and therefore has no caller in its JVMState. We should bail out if either 'dom_caller' or 'caller' is NULL (it's fine if both are NULL).
>> Since we check that the uncommon traps belong to the same method, this can only happen if the method is recursively inlined.
>> Tom Rodriguez verified that this solves the problem.
More information about the hotspot-compiler-dev