[9] RFR(S): 8142500: missing null checks in IfNode::has_only_uncommon_traps

Vladimir Kozlov vladimir.kozlov at oracle.com
Fri Nov 13 14:51:31 UTC 2015


On 11/13/15 3:32 AM, Tobias Hartmann wrote:
> Thanks, Vladimir.
>
> 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.

Make sense now.

>
> 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.

Add (top method). No need to resend RFR.

// The current method must either be inlined into both dom_caller and
// caller or must not be inlined at all (top method). Bail out otherwise.

Thanks,
Vladimir

>
> New webrev:
> http://cr.openjdk.java.net/~thartmann/8142500/webrev.01
>
> Best,
> Tobias
>
>> On 11/12/15 11:08 PM, Tobias Hartmann wrote:
>>> Hi,
>>>
>>> please review the following patch:
>>>
>>> https://bugs.openjdk.java.net/browse/JDK-8142500
>>> http://cr.openjdk.java.net/~thartmann/8142500/webrev.00/
>>>
>>> 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.
>>>
>>> Thanks,
>>> Tobias
>>>


More information about the hotspot-compiler-dev mailing list