Mercurial > hg > graal-jvmci-8
changeset 22197:cbb24d44d09b
Initialize object arrays in clone snippet
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Fri, 10 Jul 2015 11:41:02 -0700 |
parents | fec4d8428ace |
children | 6f83839fcbc8 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneSnippets.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java |
diffstat | 2 files changed, 6 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneSnippets.java Fri Jul 10 11:40:58 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneSnippets.java Fri Jul 10 11:41:02 2015 -0700 @@ -115,7 +115,8 @@ @Snippet(removeAllFrameStates = true) public static Object[] objectArrayClone(Object[] src) { - Object[] result = (Object[]) DynamicNewArrayNode.newUninitializedArray(GraalDirectives.guardingNonNull(src.getClass().getComponentType()), src.length, Kind.Object); + /* Since this snippet is lowered early the array must be initialized */ + Object[] result = (Object[]) DynamicNewArrayNode.newArray(GraalDirectives.guardingNonNull(src.getClass().getComponentType()), src.length, Kind.Object); ArrayCopyCallNode.disjointUninitializedArraycopy(src, 0, result, 0, src.length, Kind.Object); return result; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Fri Jul 10 11:40:58 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Fri Jul 10 11:41:02 2015 -0700 @@ -102,6 +102,10 @@ @NodeIntrinsic private static native Object newArray(Class<?> componentType, int length, @ConstantNodeParameter boolean fillContents, @ConstantNodeParameter Kind knownElementKind); + public static Object newArray(Class<?> componentType, int length, Kind knownElementKind) { + return newArray(componentType, length, true, knownElementKind); + } + public static Object newUninitializedArray(Class<?> componentType, int length, Kind knownElementKind) { return newArray(componentType, length, false, knownElementKind); }