diff --git a/src/com/google/javascript/jscomp/DeadAssignmentsElimination.java b/src/com/google/javascript/jscomp/DeadAssignmentsElimination.java index b5f495fb9be..883b9e5692a 100644 --- a/src/com/google/javascript/jscomp/DeadAssignmentsElimination.java +++ b/src/com/google/javascript/jscomp/DeadAssignmentsElimination.java @@ -261,11 +261,12 @@ private void tryRemoveAssignment(NodeTraversal t, Node n, Node exprRoot, return; } - if (state.getOut().isLive(liveness.getVarIndex(var.name))) { + int index = liveness.getVarIndex(var.name); + if (state.getOut().isLive(index)) { return; // Variable not dead. } - if (state.getIn().isLive(liveness.getVarIndex(var.name)) + if (state.getIn().isLive(index) && isVariableStillLiveWithinExpression(n, exprRoot, var.name)) { // The variable is killed here but it is also live before it. // This is possible if we have say: