   /// 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 {

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

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