Skip to content

Commit d2e8edf

Browse files
committed
stdlib: Address StrictMemorySafety warnings in Span related code.
1 parent 3a574c0 commit d2e8edf

File tree

4 files changed

+31
-31
lines changed

4 files changed

+31
-31
lines changed

stdlib/public/core/Span/MutableRawSpan.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public struct MutableRawSpan: ~Copyable & ~Escapable {
3535
_unchecked pointer: UnsafeMutableRawPointer?,
3636
byteCount: Int
3737
) {
38-
_pointer = unsafe pointer
38+
unsafe _pointer = pointer
3939
_count = byteCount
4040
}
4141
}
@@ -136,7 +136,7 @@ extension MutableRawSpan {
136136
public func withUnsafeBytes<E: Error, Result: ~Copyable>(
137137
_ body: (_ buffer: UnsafeRawBufferPointer) throws(E) -> Result
138138
) throws(E) -> Result {
139-
guard let pointer = _pointer, _count > 0 else {
139+
guard let pointer = unsafe _pointer, _count > 0 else {
140140
return try unsafe body(.init(start: nil, count: 0))
141141
}
142142
return try unsafe body(.init(start: pointer, count: _count))
@@ -147,7 +147,7 @@ extension MutableRawSpan {
147147
public mutating func withUnsafeMutableBytes<E: Error, Result: ~Copyable>(
148148
_ body: (UnsafeMutableRawBufferPointer) throws(E) -> Result
149149
) throws(E) -> Result {
150-
guard let pointer = _pointer, _count > 0 else {
150+
guard let pointer = unsafe _pointer, _count > 0 else {
151151
return try unsafe body(.init(start: nil, count: 0))
152152
}
153153
return try unsafe body(.init(start: pointer, count: _count))
@@ -160,7 +160,7 @@ extension RawSpan {
160160
@_alwaysEmitIntoClient
161161
@lifetime(borrow mutableRawSpan)
162162
public init(_mutableRawSpan mutableRawSpan: borrowing MutableRawSpan) {
163-
let (start, count) = (mutableRawSpan._start(), mutableRawSpan._count)
163+
let (start, count) = unsafe (mutableRawSpan._start(), mutableRawSpan._count)
164164
let span = unsafe RawSpan(_unsafeStart: start, byteCount: count)
165165
self = unsafe _overrideLifetime(span, borrowing: mutableRawSpan)
166166
}
@@ -393,8 +393,8 @@ extension MutableRawSpan {
393393
fromContentsOf source: Span<Element>
394394
) -> Int {
395395
// update(from: source.bytes)
396-
source.withUnsafeBytes {
397-
update(fromContentsOf: $0)
396+
unsafe source.withUnsafeBytes {
397+
unsafe update(fromContentsOf: $0)
398398
}
399399
}
400400

@@ -404,8 +404,8 @@ extension MutableRawSpan {
404404
fromContentsOf source: borrowing MutableSpan<Element>
405405
) -> Int {
406406
// update(from: source.span.bytes)
407-
source.withUnsafeBytes {
408-
update(fromContentsOf: $0)
407+
unsafe source.withUnsafeBytes {
408+
unsafe update(fromContentsOf: $0)
409409
}
410410
}
411411

@@ -415,7 +415,7 @@ extension MutableRawSpan {
415415
fromContentsOf source: RawSpan
416416
) -> Int {
417417
if source.byteCount == 0 { return 0 }
418-
source.withUnsafeBytes {
418+
unsafe source.withUnsafeBytes {
419419
unsafe _start().copyMemory(from: $0.baseAddress!, byteCount: $0.count)
420420
}
421421
return source.byteCount

stdlib/public/core/Span/MutableSpan.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public struct MutableSpan<Element: ~Copyable>
3636
_unchecked start: UnsafeMutableRawPointer?,
3737
count: Int
3838
) {
39-
_pointer = unsafe start
39+
unsafe _pointer = start
4040
_count = count
4141
}
4242
}
@@ -54,7 +54,7 @@ extension MutableSpan where Element: ~Copyable {
5454
internal init(
5555
_unchecked elements: UnsafeMutableBufferPointer<Element>
5656
) {
57-
_pointer = .init(elements.baseAddress)
57+
unsafe _pointer = .init(elements.baseAddress)
5858
_count = elements.count
5959
}
6060

@@ -190,7 +190,7 @@ extension RawSpan {
190190
public init<Element: BitwiseCopyable>(
191191
_mutableSpan mutableSpan: borrowing MutableSpan<Element>
192192
) {
193-
let pointer = mutableSpan._pointer
193+
let pointer = unsafe mutableSpan._pointer
194194
let byteCount = mutableSpan.count &* MemoryLayout<Element>.stride
195195
let buffer = unsafe UnsafeRawBufferPointer(start: pointer, count: byteCount)
196196
let rawSpan = unsafe RawSpan(_unsafeBytes: buffer)
@@ -203,7 +203,7 @@ extension MutableSpan where Element: ~Copyable {
203203

204204
@_alwaysEmitIntoClient
205205
public var _description: String {
206-
let addr = String(
206+
let addr = unsafe String(
207207
UInt(bitPattern: _pointer), radix: 16, uppercase: false
208208
)
209209
return "(0x\(addr), \(_count))"
@@ -376,7 +376,7 @@ extension MutableSpan where Element: ~Copyable {
376376
public func withUnsafeBufferPointer<E: Error, Result: ~Copyable>(
377377
_ body: (_ buffer: UnsafeBufferPointer<Element>) throws(E) -> Result
378378
) throws(E) -> Result {
379-
try Span(_mutableSpan: self).withUnsafeBufferPointer(body)
379+
try unsafe Span(_mutableSpan: self).withUnsafeBufferPointer(body)
380380
}
381381

382382
//FIXME: mark closure parameter as non-escaping
@@ -387,7 +387,7 @@ extension MutableSpan where Element: ~Copyable {
387387
>(
388388
_ body: (UnsafeMutableBufferPointer<Element>) throws(E) -> Result
389389
) throws(E) -> Result {
390-
guard let pointer = _pointer, count > 0 else {
390+
guard let pointer = unsafe _pointer, count > 0 else {
391391
return try unsafe body(.init(start: nil, count: 0))
392392
}
393393
// bind memory by hand to sidestep alignment concerns
@@ -407,7 +407,7 @@ extension MutableSpan where Element: BitwiseCopyable {
407407
public func withUnsafeBytes<E: Error, Result: ~Copyable>(
408408
_ body: (_ buffer: UnsafeRawBufferPointer) throws(E) -> Result
409409
) throws(E) -> Result {
410-
try RawSpan(_mutableSpan: self).withUnsafeBytes(body)
410+
try unsafe RawSpan(_mutableSpan: self).withUnsafeBytes(body)
411411
}
412412

413413
//FIXME: mark closure parameter as non-escaping
@@ -494,7 +494,7 @@ extension MutableSpan {
494494
unsafe _start().withMemoryRebound(
495495
to: Element.self, capacity: source.count
496496
) { dest in
497-
source.withUnsafeBufferPointer {
497+
unsafe source.withUnsafeBufferPointer {
498498
unsafe dest.update(from: $0.baseAddress!, count: $0.count)
499499
}
500500
}
@@ -537,7 +537,7 @@ extension MutableSpan where Element: ~Copyable {
537537
) -> Index {
538538
// let source = OutputSpan(_initializing: source, initialized: source.count)
539539
// return self.moveUpdate(fromContentsOf: source)
540-
withUnsafeMutableBufferPointer {
540+
unsafe withUnsafeMutableBufferPointer {
541541
unsafe $0.moveUpdate(fromContentsOf: source)
542542
}
543543
}
@@ -551,7 +551,7 @@ extension MutableSpan {
551551
public mutating func moveUpdate(
552552
fromContentsOf source: Slice<UnsafeMutableBufferPointer<Element>>
553553
) -> Index {
554-
moveUpdate(fromContentsOf: unsafe .init(rebasing: source))
554+
unsafe moveUpdate(fromContentsOf: .init(rebasing: source))
555555
}
556556
}
557557

@@ -565,7 +565,7 @@ extension MutableSpan where Element: BitwiseCopyable {
565565
) where Element: BitwiseCopyable {
566566
guard count > 0 else { return }
567567
// rebind _start manually in order to avoid assumptions about alignment.
568-
let rp = _start()._rawValue
568+
let rp = unsafe _start()._rawValue
569569
let binding = Builtin.bindMemory(rp, count._builtinWordValue, Element.self)
570570
let rebound = unsafe UnsafeMutablePointer<Element>(rp)
571571
unsafe rebound.update(repeating: repeatedValue, count: count)
@@ -630,7 +630,7 @@ extension MutableSpan where Element: BitwiseCopyable {
630630
source.count <= self.count,
631631
"destination span cannot contain every element from source."
632632
)
633-
source.withUnsafeBufferPointer {
633+
unsafe source.withUnsafeBufferPointer {
634634
unsafe _start().copyMemory(
635635
from: $0.baseAddress!,
636636
byteCount: $0.count &* MemoryLayout<Element>.stride

stdlib/public/core/Span/RawSpan.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public struct RawSpan: ~Escapable, Copyable, BitwiseCopyable {
5454
@inline(__always)
5555
@lifetime(immortal)
5656
internal init() {
57-
_pointer = nil
57+
unsafe _pointer = nil
5858
_count = 0
5959
}
6060

@@ -79,7 +79,7 @@ public struct RawSpan: ~Escapable, Copyable, BitwiseCopyable {
7979
_unchecked pointer: UnsafeRawPointer?,
8080
byteCount: Int
8181
) {
82-
_pointer = unsafe pointer
82+
unsafe _pointer = pointer
8383
_count = byteCount
8484
}
8585
}
@@ -316,7 +316,7 @@ extension RawSpan {
316316
public init<Element: BitwiseCopyable>(
317317
_elements span: Span<Element>
318318
) {
319-
let pointer = span._pointer
319+
let pointer = unsafe span._pointer
320320
let rawSpan = unsafe RawSpan(
321321
_unchecked: pointer,
322322
byteCount: span.count == 1 ? MemoryLayout<Element>.size
@@ -491,7 +491,7 @@ extension RawSpan {
491491
public func withUnsafeBytes<E: Error, Result: ~Copyable>(
492492
_ body: (_ buffer: UnsafeRawBufferPointer) throws(E) -> Result
493493
) throws(E) -> Result {
494-
guard let _pointer, byteCount > 0 else {
494+
guard let _pointer = unsafe _pointer, byteCount > 0 else {
495495
return try unsafe body(.init(start: nil, count: 0))
496496
}
497497
return try unsafe body(.init(start: _pointer, count: byteCount))
@@ -666,7 +666,7 @@ extension RawSpan {
666666
@_alwaysEmitIntoClient
667667
public func byteOffsets(of other: borrowing Self) -> Range<Int>? {
668668
if other._count > _count { return nil }
669-
guard let spanStart = other._pointer, _count > 0 else {
669+
guard let spanStart = unsafe other._pointer, _count > 0 else {
670670
return unsafe _pointer == other._pointer ? 0..<0 : nil
671671
}
672672
let start = unsafe _start()

stdlib/public/core/Span/Span.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public struct Span<Element: ~Copyable>: ~Escapable, Copyable, BitwiseCopyable {
5555
@inline(__always)
5656
@lifetime(immortal)
5757
internal init() {
58-
_pointer = nil
58+
unsafe _pointer = nil
5959
_count = 0
6060
}
6161

@@ -80,7 +80,7 @@ public struct Span<Element: ~Copyable>: ~Escapable, Copyable, BitwiseCopyable {
8080
_unchecked pointer: UnsafeRawPointer?,
8181
count: Int
8282
) {
83-
_pointer = unsafe pointer
83+
unsafe _pointer = pointer
8484
_count = count
8585
}
8686
}
@@ -649,7 +649,7 @@ extension Span where Element: ~Copyable {
649649
public func withUnsafeBufferPointer<E: Error, Result: ~Copyable>(
650650
_ body: (_ buffer: UnsafeBufferPointer<Element>) throws(E) -> Result
651651
) throws(E) -> Result {
652-
guard let pointer = _pointer, _count > 0 else {
652+
guard let pointer = unsafe _pointer, _count > 0 else {
653653
return try unsafe body(.init(start: nil, count: 0))
654654
}
655655
// manual memory rebinding to avoid recalculating the alignment checks
@@ -684,7 +684,7 @@ extension Span where Element: BitwiseCopyable {
684684
public func withUnsafeBytes<E: Error, Result: ~Copyable>(
685685
_ body: (_ buffer: UnsafeRawBufferPointer) throws(E) -> Result
686686
) throws(E) -> Result {
687-
guard let _pointer, _count > 0 else {
687+
guard let _pointer = unsafe _pointer, _count > 0 else {
688688
return try unsafe body(.init(start: nil, count: 0))
689689
}
690690
return try unsafe body(
@@ -711,7 +711,7 @@ extension Span where Element: ~Copyable {
711711
@_alwaysEmitIntoClient
712712
public func indices(of other: borrowing Self) -> Range<Index>? {
713713
if other._count > _count { return nil }
714-
guard let spanStart = other._pointer, _count > 0 else {
714+
guard let spanStart = unsafe other._pointer, _count > 0 else {
715715
return unsafe _pointer == other._pointer ? 0..<0 : nil
716716
}
717717
let start = unsafe _start()

0 commit comments

Comments
 (0)