# HG changeset patch # User Josef Eisl # Date 1407773251 -7200 # Node ID 8341b061e4966386cd9e0d7fddcec2ba3524d5e8 # Parent bcbc6b6a341fce86c010c3338c1f05adf9d368d1 Clone CompositeValue in ValuePosition.set(). diff -r bcbc6b6a341f -r 8341b061e496 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 17:40:27 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Mon Aug 11 18:07:31 2014 +0200 @@ -165,8 +165,10 @@ return getValueForPosition(obj, componentOffsets, directComponentCount, pos); } - void setValue(CompositeValue obj, ValuePosition pos, Value value) { - setValueForPosition(obj, componentOffsets, directComponentCount, pos, value); + CompositeValue createUpdatedValue(CompositeValue compValue, ValuePosition pos, Value value) { + CompositeValue newCompValue = compValue.clone(); + setValueForPosition(newCompValue, componentOffsets, directComponentCount, pos, value); + return newCompValue; } EnumSet getFlags(ValuePosition pos) { diff -r bcbc6b6a341f -r 8341b061e496 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValuePosition.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValuePosition.java Mon Aug 11 17:40:27 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValuePosition.java Mon Aug 11 18:07:31 2014 +0200 @@ -70,7 +70,8 @@ public void set(LIRInstruction inst, Value value) { if (isCompositePosition()) { CompositeValue compValue = (CompositeValue) outerPosition.get(inst); - compValue.getValueClass().setValue(compValue, this, value); + CompositeValue newCompValue = compValue.getValueClass().createUpdatedValue(compValue, this, value); + outerPosition.set(inst, newCompValue); } else { inst.getLIRInstructionClass().setValue(inst, this, value); }