@@ -79,10 +79,8 @@ extension ManagedBuffer where Element: ~Copyable {
7979 @inlinable
8080 public final class func create(
8181 minimumCapacity: Int ,
82- makingHeaderWith factory: (
83- ManagedBuffer < Header , Element > ) throws -> Header
82+ makingHeaderWith factory: ( ManagedBuffer < Header , Element > ) throws -> Header
8483 ) rethrows -> ManagedBuffer < Header , Element > {
85-
8684 let p = Builtin . allocWithTailElems_1 (
8785 self ,
8886 minimumCapacity. _builtinWordValue, Element . self)
@@ -124,42 +122,78 @@ extension ManagedBuffer where Element: ~Copyable {
124122 internal final var headerAddress : UnsafeMutablePointer < Header > {
125123 return UnsafeMutablePointer < Header > ( Builtin . addressof ( & header) )
126124 }
125+ }
127126
127+ extension ManagedBuffer where Element: ~ Copyable {
128128 /// Call `body` with an `UnsafeMutablePointer` to the stored
129129 /// `Header`.
130130 ///
131131 /// - Note: This pointer is valid only for the duration of the
132132 /// call to `body`.
133- @_preInverseGenerics
134- @inlinable
135- public final func withUnsafeMutablePointerToHeader< R > (
136- _ body: ( UnsafeMutablePointer < Header > ) throws -> R
137- ) rethrows -> R {
138- return try withUnsafeMutablePointers { ( v, _) in return try body ( v) }
133+ @_alwaysEmitIntoClient
134+ @inline ( __always )
135+ public final func withUnsafeMutablePointerToHeader< E : Error , R : ~ Copyable > (
136+ _ body: ( UnsafeMutablePointer < Header > ) throws ( E ) -> R
137+ ) throws ( E ) -> R {
138+ try withUnsafeMutablePointers { ( v, _ ) throws ( E ) in try body( v) }
139139 }
140140
141141 /// Call `body` with an `UnsafeMutablePointer` to the `Element`
142142 /// storage.
143143 ///
144144 /// - Note: This pointer is valid only for the duration of the
145145 /// call to `body`.
146- @_preInverseGenerics
147- @inlinable
148- public final func withUnsafeMutablePointerToElements< R > (
149- _ body: ( UnsafeMutablePointer < Element > ) throws -> R
150- ) rethrows -> R {
151- return try withUnsafeMutablePointers { return try body ( $1 ) }
146+ @_alwaysEmitIntoClient
147+ @inline ( __always )
148+ public final func withUnsafeMutablePointerToElements< E : Error , R : ~ Copyable > (
149+ _ body: ( UnsafeMutablePointer < Element > ) throws ( E ) -> R
150+ ) throws ( E ) -> R {
151+ try withUnsafeMutablePointers { ( _ , v ) throws ( E ) in try body( v ) }
152152 }
153153
154154 /// Call `body` with `UnsafeMutablePointer`s to the stored `Header`
155155 /// and raw `Element` storage.
156156 ///
157157 /// - Note: These pointers are valid only for the duration of the
158158 /// call to `body`.
159- @_preInverseGenerics
160- @inlinable
161- public final func withUnsafeMutablePointers< R> (
162- _ body: ( UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element > ) throws -> R
159+ @_alwaysEmitIntoClient
160+ @inline ( __always)
161+ public final func withUnsafeMutablePointers< E: Error , R: ~ Copyable> (
162+ _ body: (
163+ UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element >
164+ ) throws ( E) -> R
165+ ) throws ( E ) -> R {
166+ defer { _fixLifetime( self) }
167+ return try body( headerAddress, firstElementAddress )
168+ }
169+ }
170+
171+ extension ManagedBuffer {
172+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
173+ @_silgen_name ( " $ss13ManagedBufferC25withUnsafeMutablePointersyqd__qd__SpyxG_Spyq_GtKXEKlF " )
174+ @usableFromInline
175+ internal final func __legacy_withUnsafeMutablePointerToHeader< R> (
176+ _ body: ( UnsafeMutablePointer < Header > ) throws -> R
177+ ) rethrows -> R {
178+ return try withUnsafeMutablePointers { ( v, _) in return try body ( v) }
179+ }
180+
181+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
182+ @_silgen_name ( " $ss13ManagedBufferC32withUnsafeMutablePointerToHeaderyqd__qd__SpyxGKXEKlF " )
183+ @usableFromInline
184+ internal final func __legacy_withUnsafeMutablePointerToElements< R> (
185+ _ body: ( UnsafeMutablePointer < Element > ) throws -> R
186+ ) rethrows -> R {
187+ return try withUnsafeMutablePointers { return try body ( $1) }
188+ }
189+
190+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
191+ @_silgen_name ( " $ss13ManagedBufferC34withUnsafeMutablePointerToElementsyqd__qd__Spyq_GKXEKlF " )
192+ @usableFromInline
193+ internal final func __legacy_withUnsafeMutablePointers< R> (
194+ _ body: (
195+ UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element >
196+ ) throws -> R
163197 ) rethrows -> R {
164198 defer { _fixLifetime ( self ) }
165199 return try body ( headerAddress, firstElementAddress)
@@ -202,7 +236,10 @@ extension ManagedBuffer where Element: ~Copyable {
202236/// }
203237///
204238@frozen
205- public struct ManagedBufferPointer < Header, Element: ~ Copyable> {
239+ public struct ManagedBufferPointer <
240+ Header,
241+ Element: ~ Copyable
242+ > : Copyable {
206243
207244 @_preInverseGenerics
208245 @usableFromInline
@@ -244,9 +281,6 @@ public struct ManagedBufferPointer<Header, Element: ~Copyable> {
244281 ManagedBufferPointer ( unsafeBufferObject: $0) . capacity
245282 } ) )
246283 }
247- // FIXME: workaround for <rdar://problem/18619176>. If we don't
248- // access header somewhere, its addressor gets linked away
249- _ = header
250284 }
251285
252286 /// Manage the given `buffer`.
@@ -352,7 +386,9 @@ extension ManagedBufferPointer where Element: ~Copyable {
352386 yield & _headerPointer. pointee
353387 }
354388 }
389+ }
355390
391+ extension ManagedBufferPointer where Element: ~ Copyable {
356392 /// Returns the object instance being used for storage.
357393 @_preInverseGenerics
358394 @inlinable
@@ -379,39 +415,36 @@ extension ManagedBufferPointer where Element: ~Copyable {
379415 ///
380416 /// - Note: This pointer is valid only
381417 /// for the duration of the call to `body`.
382- @_preInverseGenerics
383- @inlinable
384- public func withUnsafeMutablePointerToHeader< R> (
385- _ body: ( UnsafeMutablePointer < Header > ) throws -> R
386- ) rethrows -> R {
387- return try withUnsafeMutablePointers { ( v, _) in return try body ( v) }
418+ @_alwaysEmitIntoClient
419+ public func withUnsafeMutablePointerToHeader< E: Error , R: ~ Copyable> (
420+ _ body: ( UnsafeMutablePointer < Header > ) throws ( E ) -> R
421+ ) throws ( E ) -> R {
422+ try withUnsafeMutablePointers { ( v, _ ) throws( E) in try body( v) }
388423 }
389424
390425 /// Call `body` with an `UnsafeMutablePointer` to the `Element`
391426 /// storage.
392427 ///
393428 /// - Note: This pointer is valid only for the duration of the
394429 /// call to `body`.
395- @_preInverseGenerics
396- @inlinable
397- public func withUnsafeMutablePointerToElements< R> (
398- _ body: ( UnsafeMutablePointer < Element > ) throws -> R
399- ) rethrows -> R {
400- return try withUnsafeMutablePointers { return try body ( $1) }
430+ @_alwaysEmitIntoClient
431+ public func withUnsafeMutablePointerToElements< E: Error , R: ~ Copyable> (
432+ _ body: ( UnsafeMutablePointer < Element > ) throws ( E ) -> R
433+ ) throws ( E ) -> R {
434+ try withUnsafeMutablePointers { ( _, v ) throws( E) in try body( v) }
401435 }
402436
403437 /// Call `body` with `UnsafeMutablePointer`s to the stored `Header`
404438 /// and raw `Element` storage.
405439 ///
406440 /// - Note: These pointers are valid only for the duration of the
407441 /// call to `body`.
408- @_preInverseGenerics
409- @inlinable
410- public func withUnsafeMutablePointers< R> (
442+ @_alwaysEmitIntoClient
443+ public func withUnsafeMutablePointers< E: Error , R: ~ Copyable> (
411444 _ body: (
412445 UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element >
413- ) throws -> R
414- ) rethrows -> R {
446+ ) throws ( E ) -> R
447+ ) throws ( E ) -> R {
415448 defer { _fixLifetime( _nativeBuffer) }
416449 return try body( _headerPointer, _elementPointer )
417450 }
@@ -427,6 +460,38 @@ extension ManagedBufferPointer where Element: ~Copyable {
427460 }
428461}
429462
463+ extension ManagedBufferPointer {
464+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
465+ @_silgen_name ( " $ss20ManagedBufferPointerV017withUnsafeMutableC8ToHeaderyqd__qd__SpyxGKXEKlF " )
466+ @usableFromInline
467+ internal func withUnsafeMutablePointerToHeader< R> (
468+ _ body: ( UnsafeMutablePointer < Header > ) throws -> R
469+ ) rethrows -> R {
470+ try withUnsafeMutablePointers { ( v, _) in try body ( v) }
471+ }
472+
473+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
474+ @_silgen_name ( " $ss20ManagedBufferPointerV017withUnsafeMutableC10ToElementsyqd__qd__Spyq_GKXEKlF " )
475+ @usableFromInline
476+ internal func withUnsafeMutablePointerToElements< R> (
477+ _ body: ( UnsafeMutablePointer < Element > ) throws -> R
478+ ) rethrows -> R {
479+ try withUnsafeMutablePointers { ( _, v) in try body ( v) }
480+ }
481+
482+ @_spi ( SwiftStdlibLegacyABI) @available ( swift, obsoleted: 1 )
483+ @_silgen_name ( " $ss20ManagedBufferPointerV25withUnsafeMutablePointersyqd__qd__SpyxG_Spyq_GtKXEKlF " )
484+ @usableFromInline
485+ internal func withUnsafeMutablePointers< R> (
486+ _ body: (
487+ UnsafeMutablePointer < Header > , UnsafeMutablePointer < Element >
488+ ) throws -> R
489+ ) rethrows -> R {
490+ defer { _fixLifetime ( _nativeBuffer) }
491+ return try body ( _headerPointer, _elementPointer)
492+ }
493+ }
494+
430495extension ManagedBufferPointer where Element: ~ Copyable {
431496 @_preInverseGenerics
432497 @inlinable
0 commit comments