# HG changeset patch # User Josef Eisl # Date 1407760196 -7200 # Node ID 3507ad1b0c4425a6a36952bcfc434f3c09686bad # Parent 3bfeb592ed769b19cb917e9473635f620eb3744f Clone value arrays in CompositeValue.clone(). diff -r 3bfeb592ed76 -r 3507ad1b0c44 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java Mon Aug 11 13:58:08 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java Mon Aug 11 14:29:56 2014 +0200 @@ -89,11 +89,17 @@ @Override public final CompositeValue clone() { + CompositeValue compositeValue = null; try { - return (CompositeValue) super.clone(); + compositeValue = (CompositeValue) super.clone(); } catch (CloneNotSupportedException e) { throw new GraalInternalError(e); } + + // copy value arrays + getValueClass().copyValueArrays(compositeValue); + + return compositeValue; } } diff -r 3bfeb592ed76 -r 3507ad1b0c44 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Mon Aug 11 13:58:08 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Mon Aug 11 14:29:56 2014 +0200 @@ -172,4 +172,12 @@ EnumSet getFlags(ValuePosition pos) { return componentFlags[pos.getIndex()]; } + + void copyValueArrays(CompositeValue compositeValue) { + for (int i = directComponentCount; i < componentOffsets.length; i++) { + Value[] valueArray = getValueArray(compositeValue, componentOffsets[i]); + Value[] newValueArray = Arrays.copyOf(valueArray, valueArray.length); + setValueArray(compositeValue, componentOffsets[i], newValueArray); + } + } } diff -r 3bfeb592ed76 -r 3507ad1b0c44 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRIntrospection.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRIntrospection.java Mon Aug 11 13:58:08 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRIntrospection.java Mon Aug 11 14:29:56 2014 +0200 @@ -260,6 +260,10 @@ return (Value[]) unsafe.getObject(obj, offset); } + protected static void setValueArray(Object obj, long offset, Value[] valueArray) { + unsafe.putObject(obj, offset, valueArray); + } + protected void appendValues(StringBuilder result, Object obj, String start, String end, String startMultiple, String endMultiple, String[] prefix, long[]... moffsets) { int total = 0; for (long[] offsets : moffsets) {