Skip to content

Commit 5a087d1

Browse files
committed
[stdlib] annotate unsafe initializers
1 parent 9553982 commit 5a087d1

File tree

3 files changed

+74
-52
lines changed

3 files changed

+74
-52
lines changed

stdlib/public/core/Span/MutableRawSpan.swift

+35-26
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public struct MutableRawSpan: ~Copyable & ~Escapable {
2727
unsafe _pointer._unsafelyUnwrappedUnchecked
2828
}
2929

30+
@unsafe
31+
@_unsafeNonescapableResult
3032
@_alwaysEmitIntoClient
3133
@lifetime(borrow pointer)
3234
internal init(
@@ -44,53 +46,58 @@ extension MutableRawSpan: @unchecked Sendable {}
4446
@available(SwiftStdlib 6.2, *)
4547
extension MutableRawSpan {
4648

49+
@unsafe
4750
@_alwaysEmitIntoClient
4851
@lifetime(borrow bytes)
4952
public init(
5053
_unsafeBytes bytes: UnsafeMutableRawBufferPointer
5154
) {
52-
let baseAddress = bytes.baseAddress
53-
let span = MutableRawSpan(_unchecked: baseAddress, byteCount: bytes.count)
55+
let (baseAddress, count) = (bytes.baseAddress, bytes.count)
56+
let span = unsafe MutableRawSpan(_unchecked: baseAddress, byteCount: count)
5457
self = unsafe _overrideLifetime(span, borrowing: bytes)
5558
}
5659

60+
@unsafe
5761
@_alwaysEmitIntoClient
5862
@lifetime(borrow bytes)
5963
public init(
6064
_unsafeBytes bytes: borrowing Slice<UnsafeMutableRawBufferPointer>
6165
) {
6266
let rebased = unsafe UnsafeMutableRawBufferPointer(rebasing: bytes)
63-
let span = MutableRawSpan(_unsafeBytes: rebased)
67+
let span = unsafe MutableRawSpan(_unsafeBytes: rebased)
6468
self = unsafe _overrideLifetime(span, borrowing: bytes)
6569
}
6670

71+
@unsafe
6772
@_alwaysEmitIntoClient
6873
@lifetime(borrow pointer)
6974
public init(
7075
_unsafeStart pointer: UnsafeMutableRawPointer,
7176
byteCount: Int
7277
) {
7378
_precondition(byteCount >= 0, "Count must not be negative")
74-
self.init(_unchecked: pointer, byteCount: byteCount)
79+
unsafe self.init(_unchecked: pointer, byteCount: byteCount)
7580
}
7681

82+
@unsafe
7783
@_alwaysEmitIntoClient
7884
@lifetime(borrow elements)
7985
public init<Element: BitwiseCopyable>(
8086
_unsafeElements elements: UnsafeMutableBufferPointer<Element>
8187
) {
8288
let bytes = UnsafeMutableRawBufferPointer(elements)
83-
let span = MutableRawSpan(_unsafeBytes: bytes)
89+
let span = unsafe MutableRawSpan(_unsafeBytes: bytes)
8490
self = unsafe _overrideLifetime(span, borrowing: elements)
8591
}
8692

93+
@unsafe
8794
@_alwaysEmitIntoClient
8895
@lifetime(borrow elements)
8996
public init<Element: BitwiseCopyable>(
9097
_unsafeElements elements: borrowing Slice<UnsafeMutableBufferPointer<Element>>
9198
) {
9299
let rebased = unsafe UnsafeMutableBufferPointer(rebasing: elements)
93-
let span = MutableRawSpan(_unsafeElements: rebased)
100+
let span = unsafe MutableRawSpan(_unsafeElements: rebased)
94101
self = unsafe _overrideLifetime(span, borrowing: elements)
95102
}
96103

@@ -103,7 +110,7 @@ extension MutableRawSpan {
103110
start: elements._pointer,
104111
count: elements.count &* MemoryLayout<Element>.stride
105112
)
106-
let span = MutableRawSpan(_unsafeBytes: bytes)
113+
let span = unsafe MutableRawSpan(_unsafeBytes: bytes)
107114
self = unsafe _overrideLifetime(span, copying: elements)
108115
}
109116
}
@@ -150,11 +157,11 @@ extension MutableRawSpan {
150157
extension RawSpan {
151158

152159
@_alwaysEmitIntoClient
153-
@lifetime(borrow mutableSpan)
154-
public init(_unsafeMutableRawSpan mutableSpan: borrowing MutableRawSpan) {
155-
let start = mutableSpan._start()
156-
let span = RawSpan(_unsafeStart: start, byteCount: mutableSpan.byteCount)
157-
self = unsafe _overrideLifetime(span, borrowing: mutableSpan)
160+
@lifetime(borrow mutableRawSpan)
161+
public init(_mutableRawSpan mutableRawSpan: borrowing MutableRawSpan) {
162+
let (start, count) = (mutableRawSpan._start(), mutableRawSpan._count)
163+
let span = unsafe RawSpan(_unsafeStart: start, byteCount: count)
164+
self = unsafe _overrideLifetime(span, borrowing: mutableRawSpan)
158165
}
159166
}
160167

@@ -165,7 +172,7 @@ extension MutableRawSpan {
165172
@_alwaysEmitIntoClient
166173
@lifetime(borrow self)
167174
borrowing get {
168-
return RawSpan(_unsafeMutableRawSpan: self)
175+
return RawSpan(_mutableRawSpan: self)
169176
}
170177
}
171178

@@ -176,7 +183,7 @@ extension MutableRawSpan {
176183
as type: T.Type
177184
) -> Span<T> {
178185
let bytes = unsafe UnsafeRawBufferPointer(start: _pointer, count: _count)
179-
let span = Span<T>(_unsafeBytes: bytes)
186+
let span = unsafe Span<T>(_unsafeBytes: bytes)
180187
return unsafe _overrideLifetime(span, borrowing: self)
181188
}
182189

@@ -189,7 +196,7 @@ extension MutableRawSpan {
189196
let bytes = unsafe UnsafeMutableRawBufferPointer(
190197
start: _pointer, count: _count
191198
)
192-
let span = MutableSpan<T>(_unsafeBytes: bytes)
199+
let span = unsafe MutableSpan<T>(_unsafeBytes: bytes)
193200
return unsafe _overrideLifetime(span, mutating: &self)
194201
}
195202
}
@@ -361,7 +368,7 @@ extension MutableRawSpan {
361368
fromContentsOf source: C
362369
) -> Int where C.Element: BitwiseCopyable {
363370
let newOffset = source.withContiguousStorageIfAvailable {
364-
self.update(fromContentsOf: RawSpan(_unsafeElements: $0))
371+
self.update(fromContentsOf: unsafe RawSpan(_unsafeElements: $0))
365372
}
366373
if let newOffset { return newOffset }
367374

@@ -461,7 +468,7 @@ extension MutableRawSpan {
461468
@lifetime(borrow self)
462469
mutating public func _extracting(unchecked bounds: Range<Int>) -> Self {
463470
let newStart = unsafe _pointer?.advanced(by: bounds.lowerBound)
464-
let newSpan = Self(_unchecked: newStart, byteCount: bounds.count)
471+
let newSpan = unsafe Self(_unchecked: newStart, byteCount: bounds.count)
465472
return unsafe _overrideLifetime(newSpan, mutating: &self)
466473
}
467474

@@ -506,7 +513,7 @@ extension MutableRawSpan {
506513
@lifetime(borrow self)
507514
mutating public func _extracting(unchecked bounds: ClosedRange<Int>) -> Self {
508515
let range = unsafe Range(
509-
uncheckedBounds: (bounds.lowerBound, bounds.upperBound+1)
516+
_uncheckedBounds: (bounds.lowerBound, bounds.upperBound+1)
510517
)
511518
return unsafe _extracting(unchecked: range)
512519
}
@@ -523,7 +530,7 @@ extension MutableRawSpan {
523530
@_alwaysEmitIntoClient
524531
@lifetime(borrow self)
525532
mutating public func _extracting(_: UnboundedRange) -> Self {
526-
let newSpan = Self(_unchecked: _start(), byteCount: _count)
533+
let newSpan = unsafe Self(_unchecked: _start(), byteCount: _count)
527534
return unsafe _overrideLifetime(newSpan, mutating: &self)
528535
}
529536
}
@@ -552,7 +559,7 @@ extension MutableRawSpan {
552559
mutating public func _extracting(first maxLength: Int) -> Self {
553560
_precondition(maxLength >= 0, "Can't have a prefix of negative length")
554561
let newCount = min(maxLength, byteCount)
555-
let newSpan = Self(_unchecked: _pointer, byteCount: newCount)
562+
let newSpan = unsafe Self(_unchecked: _pointer, byteCount: newCount)
556563
return unsafe _overrideLifetime(newSpan, mutating: &self)
557564
}
558565

@@ -574,8 +581,9 @@ extension MutableRawSpan {
574581
@lifetime(borrow self)
575582
mutating public func _extracting(droppingLast k: Int) -> Self {
576583
_precondition(k >= 0, "Can't drop a negative number of elements")
577-
let dropped = min(k, byteCount)
578-
let newSpan = Self(_unchecked: _pointer, byteCount: byteCount &- dropped)
584+
let droppedCount = min(k, byteCount)
585+
let newCount = byteCount &- droppedCount
586+
let newSpan = unsafe Self(_unchecked: _pointer, byteCount: newCount)
579587
return unsafe _overrideLifetime(newSpan, mutating: &self)
580588
}
581589

@@ -600,7 +608,7 @@ extension MutableRawSpan {
600608
_precondition(maxLength >= 0, "Can't have a suffix of negative length")
601609
let newCount = min(maxLength, byteCount)
602610
let newStart = unsafe _pointer?.advanced(by: byteCount &- newCount)
603-
let newSpan = Self(_unchecked: newStart, byteCount: newCount)
611+
let newSpan = unsafe Self(_unchecked: newStart, byteCount: newCount)
604612
return unsafe _overrideLifetime(newSpan, copying: self)
605613
}
606614

@@ -622,9 +630,10 @@ extension MutableRawSpan {
622630
@lifetime(borrow self)
623631
mutating public func _extracting(droppingFirst k: Int) -> Self {
624632
_precondition(k >= 0, "Can't drop a negative number of bytes")
625-
let dropped = min(k, byteCount)
626-
let newStart = unsafe _pointer?.advanced(by: dropped)
627-
let newSpan = Self(_unchecked: newStart, byteCount: byteCount &- dropped)
633+
let droppedCount = min(k, byteCount)
634+
let newStart = unsafe _pointer?.advanced(by: droppedCount)
635+
let newCount = byteCount &- droppedCount
636+
let newSpan = unsafe Self(_unchecked: newStart, byteCount: newCount)
628637
return unsafe _overrideLifetime(newSpan, mutating: &self)
629638
}
630639
}

0 commit comments

Comments
 (0)