   /// transforming the source values into raw memory.
   func moveInitializeFrom(source: UnsafePointer, count: Int) {
     _debugPrecondition(
+      count >= 0, "UnsafePointer.moveInitializeFrom with negative count")
+    _debugPrecondition(
       source >= self || source < self - count,
-      "moveInitializeFrom non-following overlapping range; use moveInitializeBackwardFrom")
+      "UnsafePointer.moveInitializeFrom non-following overlapping range; use moveInitializeBackwardFrom")
     for i in 0..count {
       (self + i).initialize((source + i).move())
     }

  /// Copy count values beginning at source into raw memory.
  func initializeFrom(source: UnsafePointer, count: Int) {
    _debugPrecondition(
      source >= self || source < self - count,
      "initializeFrom non-following overlapping range")
    for i in 0..count {
      (self + i).initialize(source[i])
    }


  /// 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)
  }

