anchor.diff:          }
           if (!isExtendable) return false;
           Primitive addedList = getDartArgument(node, 0);
  -        if (addedList is! LiteralList) return false;
  +        // Rewrite addAll([x1, ..., xN]) to push(x1, ..., xN).
  +        // Ensure that the list is not mutated between creation and use.
  +        // We aim for the common case where this is the only use of the list, 
  +        // which also guarantees that this list is not mutated before use.
  +        if (addedList is! LiteralList || !addedList.hasExactlyOneUse) {
  +          return false;
  +        }
           LiteralList addedLiteral = addedList;
           CpsFragment cps = new CpsFragment(sourceInfo);
           cps.invokeBuiltin(BuiltinMethod.Push, 
  
positive.code:         ApplyBuiltinMethod previous = parent.primitive;
          if (previous.method == BuiltinMethod.Push && 
              previous.receiver.definition == node.receiver.definition) {
            for (Reference ref in node.arguments) {
              previous.arguments.add(ref);
              ref.parent = previous;
            }
            node.arguments.clear(); // Avoid unlinking adopted references.
            // Replace the old push by a dummy that will get removed.
            return makeConstantPrimitive(new NullConstantValue());
          }
        }
      }
      return null;
    }
  
    Primitive visitTypeTest(TypeTest node) {
  
negative.code:     }
    }
  
    void visitApplyBuiltinMethod(ApplyBuiltinMethod node) {
      if (node.method == BuiltinMethod.Push) {
        // Convert consecutive pushes into a single push.
        InteriorNode parent = getEffectiveParent(node.parent);
  