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

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

  /// 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,
      "UnsafePointer.moveInitializeBackwardFrom non-preceding overlapping range; use moveInitializeFrom instead")
    var src = source + count
    var dst = self + count
    while dst != self {
