RFR(XXS): 8176505: Wrong assertion 'should be an array copy/clone' in arraycopynode.cpp
Volker Simonis
volker.simonis at gmail.com
Fri Mar 10 13:58:20 UTC 2017
Hi,
first of all I think this isn't really a high prio bug because the
assertion is wrong and there's no impact for product builds. On the
other hand I think a lot of test running on debug builds may fail
because of this issue so probably better to fix this in 9 as well (I
actually wonder that you haven't seen this issue until now :)
http://cr.openjdk.java.net/~simonis/webrevs/2017/8176505/
https://bugs.openjdk.java.net/browse/JDK-8176505
Here are the gory details: the following assertion in
arraycopynode.cpp is wrong because src_type can be a plain Object:
const TypeAryPtr* ary_src = src_type->isa_aryptr();
assert(ary_src != NULL, "should be an array copy/clone");
This can be easily demonstrated with the following trivial test program:
public class ArraySrcType {
public static boolean crash(Object src) {
String[] dst = new String[1];
System.arraycopy(src, 0, dst, 0, 1);
return dst[0] == null;
}
public static void main(String[] args) {
String[] sa = new String[1];
for (int i = 0; i < 20_000; i++) {
crash(sa);
}
}
}
Running it with a slow- or fastdebug build results in the following crash:
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc: SuppressErrorAt=/arraycopynode.cpp:228
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error
(/usr/work/d046063/OpenJDK/jdk10-hs/hotspot/src/share/vm/opto/arraycopynode.cpp:228),
pid=34335, tid=34410
# assert(ary_src != __null) failed: should be an array copy/clone
#
Notice that the assertion is unnecessary anyway, because some lines
later int he code we explicitely check for ary_src being NULL and bail
out if that 's the case:
if (ary_src == NULL || ary_src->klass() == NULL ||
ary_dest == NULL || ary_dest->klass() == NULL) {
// We don't know if arguments are arrays
return false;
}
Unfortunately, I still need a sponsor :(
Thank you and best regards,
Volker
More information about the hotspot-compiler-dev
mailing list