     _sanityCheck(
       !_isBridgedVerbatimToObjectiveC(T.self),
       "Verbatim bridging should be handled separately")
-    let nativeBuffer = Buffer(self)
-    let count = nativeBuffer.count
+    let count = __manager.value.count
     let result = _HeapBuffer<Int, AnyObject>(
       _HeapBufferStorage<Int, AnyObject>.self, count, count)
     let resultPtr = result.baseAddress
-    for i in 0..<count {
-      (resultPtr + i).initialize(
-        _bridgeToObjectiveCUnconditional(nativeBuffer[i]))
+    let _:() = __manager.withUnsafeMutablePointerToElements {
+      for i in 0..<count {
+        (resultPtr + i).initialize(_bridgeToObjectiveCUnconditional($0[i]))
+      }
     }
     return result
   }

    return true
  }

  //===--- private --------------------------------------------------------===//
  var _storage: _ContiguousArrayStorageBase {
    return Builtin.castFromNativeObject(__bufferPointer._nativeBuffer)
  }

  typealias _Base = _HeapBuffer<_ArrayBody, T>
  var _base: _Base {
    return _Base(nativeStorage: __bufferPointer._nativeBuffer)
  }

  var __bufferPointer: ManagedBufferPointer<_ArrayBody, T>

  override var staticElementType: Any.Type {
    return T.self
  }

  internal // private
  typealias Manager = ManagedBufferPointer<_ArrayBody, T>

  internal // private
  var __manager : Manager {
    return Manager(unsafeBufferObject: self)
  }
}

public struct _ContiguousArrayBuffer<T> : _ArrayBufferType {
