# HG changeset patch # User Lukas Stadler # Date 1402676289 -7200 # Node ID 1c042d5e7e69db29ec03ac0f5b529250c61045b9 # Parent 4af6f1fe425cb606e18a1209be70a1707b6def71 make sure that anchoredReceiver isn't deleted when tail duplicating during inlining diff -r 4af6f1fe425c -r 1c042d5e7e69 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java Fri Jun 13 18:17:31 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java Fri Jun 13 18:18:09 2014 +0200 @@ -222,9 +222,7 @@ ArrayList replacementNodes = new ArrayList<>(); - Collection parameterUsages = new ArrayList<>(); - - // do the actual inlining for every invoke + // prepare the anchors for the invokes for (int i = 0; i < numberOfMethods; i++) { BeginNode node = successors[i]; Invoke invokeForInlining = (Invoke) node.next(); @@ -241,8 +239,7 @@ GuardedValueNode anchoredReceiver = InliningUtil.createAnchoredReceiver(graph, node, commonType, receiver, exact); invokeForInlining.callTarget().replaceFirstInput(receiver, anchoredReceiver); - parameterUsages.addAll(inline(invokeForInlining, methodAt(i), inlineableElementAt(i), assumptions, false)); - + assert !anchoredReceiver.isDeleted() : anchoredReceiver; replacementNodes.add(anchoredReceiver); } if (shouldFallbackToInvoke()) { @@ -274,6 +271,13 @@ TailDuplicationPhase.tailDuplicate(returnMerge, TailDuplicationPhase.TRUE_DECISION, replacementNodes, phaseContext, canonicalizer); } } + + Collection parameterUsages = new ArrayList<>(); + // do the actual inlining for every invoke + for (int i = 0; i < numberOfMethods; i++) { + Invoke invokeForInlining = (Invoke) successors[i].next(); + parameterUsages.addAll(inline(invokeForInlining, methodAt(i), inlineableElementAt(i), assumptions, false)); + } return parameterUsages; }