RFR(S): 8239569: PublicMethodsTest.java failed due to NPE in java.base/java.nio.file.FileSystems.getFileSystem(FileSystems.java:230)
Roland Westrelin
rwestrel at redhat.com
Fri Apr 24 08:14:15 UTC 2020
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