[9] RFR(S): 8179678: ArrayCopy with same src and dst can cause incorrect execution or compiler crash

Tobias Hartmann tobias.hartmann at oracle.com
Tue May 16 09:32:50 UTC 2017


Hi Roland,

On 11.05.2017 10:33, Roland Westrelin wrote:
> http://cr.openjdk.java.net/~roland/8179678/webrev.00/
> 
> When possible:
> 
> System.arraycopy(src, spos, dst, dpos, l);
> v = dst[i];
> 
> is transformed to:
> 
> System.arraycopy(src, spos, dst, dpos, l);
> v = src[i + (spos - dpos)];
> 
> So the arraycopy has a chance to be eliminated. This breaks if src and
> dst are the same arrays and src[i + (spos - dpos)] is written to by the
> arraycopy. We need to validate that either src[i + (spos - dpos)] is not
> modified by the arraycopy or src and dst are not the same.

But in ArrayCopyNode::can_replace_dest_load_with_src_load() you return false, if src == dst. Why is that?

And in line 733, shouldn't we pass must_modify = false to detect the case we the array copy _may_ modify the source we would load?

Best regards,
Tobias


More information about the hotspot-compiler-dev mailing list