   /// Requires: either `source` precedes `self` or follows `self + count`.
   func moveInitializeBackwardFrom(source: UnsafePointer, count: Int) {
     _debugPrecondition(
+      count >= 0, "UnsafePointer.moveInitializeBackwardFrom with negative count")
+    _debugPrecondition(
       source <= self || source > self + count,
-      "moveInitializeBackwardFrom non-preceding overlapping range; use moveInitializeFrom instead")
+      "UnsafePointer.moveInitializeBackwardFrom non-preceding overlapping range; use moveInitializeFrom instead")
     var src = source + count
     var dst = self + count
     while dst != self {

  /// memory, transforming the source values into raw memory.
  func moveAssignFrom(source: UnsafePointer, count: Int) {
    _debugPrecondition(
      source > self || source < self - count,
      "moveAssignFrom non-following overlapping range")
    for i in 0..count {


  /// Destroy the `count` objects the pointer points to.
  func destroy(count: Int) {
    _debugPrecondition(count >= 0, "UnsafePointer.destroy with negative count")
    Builtin.destroyArray(T.self, value, count.value)
  }

