RFR(S): 8239569: PublicMethodsTest.java failed due to NPE in java.base/java.nio.file.FileSystems.getFileSystem(FileSystems.java:230)
Vladimir Kozlov
vladimir.kozlov at oracle.com
Fri Apr 24 18:25:08 UTC 2020
+1
Thanks,
Vladimir
On 4/24/20 1:24 AM, Tobias Hartmann wrote:
> Hi Roland,
>
> Ouh, good catch! Looks good.
>
> Best regards,
> Tobias
>
> On 24.04.20 10:14, Roland Westrelin wrote:
>>
>> https://bugs.openjdk.java.net/browse/JDK-8239569
>> http://cr.openjdk.java.net/~roland/8239569/webrev.00/
>>
>> The bug occurs when reading from a constant array after a loop is fully
>> unrolled. Reading an element in the loop has the shape:
>> (LoadB (AddP base (AddP base base index) ..) ..)
>> A load from the same element is also out of the loop:
>> (LoadUB (AddP base (AddP base base index) ..) ..)
>> The AddPs are shared between the LoadB in the loop and the LoadUB out of
>> the loop.
>>
>> After full unrolling the load out of the loop becomes:
>> (LoadUB (Phi (AddP base (AddP base base index1) ..) (AddP base (AddP base base index2) ..) ..) ..)
>>
>> The AddPs are then pushed through the Phi and that's where the bug
>> is.
>>
>> - index1 is 0 and so the type of (AddP base base index1) is a constant
>> array pointer with no offset.
>>
>> - that type is met with the type of the base of the second AddP instead
>> of the type of the address of the second AddP. The result is a
>> constant array pointer.
>>
>> The resulting Phi for the address input is created as a Phi of type
>> constant array with no offset instead of constant array with offset. As
>> a result, the Phi constant folds and the offset is lost.
>>
>> Roland.
>>
More information about the hotspot-compiler-dev
mailing list