RFR(S): 8215265: C2: range check elimination may allow illegal out of bound access
Vladimir Kozlov
vladimir.kozlov at oracle.com
Wed Dec 19 18:08:24 UTC 2018
On 12/19/18 7:35 AM, Roland Westrelin wrote:
>
> Hi Vladimir,
>
> Thanks for looking at this.
>
>> pre_limit = (low_limit - offset - (scale_con - 1)) / scale_con
>
> pre_limit = (low_limit - offset + (scale_con - 1)) / scale_con
>
> to round up?
Yes, my bad.
>
> But then there's a risk of overlow of low_limit - offset + (scale_con -
> 1).
>
> So it would need to be:
>
> l = (low_limit - offset) / scale_con
> pre_limit = l + ((low_limit - offset - l * scale_con) != 0 ? 1 : 0)
>
> That's why I went with always +1 if scale > 1.
Okay. I was thinking about more complex solution since we can come up with some expressions to check overflow and
convert it into max_int (which will lead to use loop_limit). But on other hand this code is rarely (never) executed when
Loop Predicates are used (which is default). I agree for your solution.
Thanks,
Vladimir
>
> Roland.
>
More information about the hotspot-compiler-dev
mailing list