@@ -159,6 +159,7 @@ public struct Range<Bound: Comparable> {
159
159
160
160
// This works around _debugPrecondition() impacting the performance of
161
161
// optimized code. (rdar://72246338)
162
+ @unsafe
162
163
@_alwaysEmitIntoClient @inline ( __always)
163
164
internal init ( _uncheckedBounds bounds: ( lower: Bound , upper: Bound ) ) {
164
165
self . lowerBound = bounds. lower
@@ -178,7 +179,9 @@ public struct Range<Bound: Comparable> {
178
179
public init ( uncheckedBounds bounds: ( lower: Bound , upper: Bound ) ) {
179
180
_debugPrecondition ( bounds. lower <= bounds. upper,
180
181
" Range requires lowerBound <= upperBound " )
181
- self . init ( _uncheckedBounds: ( lower: bounds. lower, upper: bounds. upper) )
182
+ unsafe self. init (
183
+ _uncheckedBounds: ( lower: bounds. lower, upper: bounds. upper)
184
+ )
182
185
}
183
186
184
187
/// Returns a Boolean value indicating whether the given element is contained
@@ -321,7 +324,9 @@ extension Range where Bound: Strideable, Bound.Stride: SignedInteger {
321
324
@inlinable // trivial-implementation
322
325
public init ( _ other: ClosedRange < Bound > ) {
323
326
let upperBound = other. upperBound. advanced ( by: 1 )
324
- self . init ( _uncheckedBounds: ( lower: other. lowerBound, upper: upperBound) )
327
+ unsafe self. init (
328
+ _uncheckedBounds: ( lower: other. lowerBound, upper: upperBound)
329
+ )
325
330
}
326
331
}
327
332
@@ -372,7 +377,7 @@ extension Range {
372
377
limits. upperBound < self . upperBound ? limits. upperBound
373
378
: limits. lowerBound > self . upperBound ? limits. lowerBound
374
379
: self . upperBound
375
- return Range ( _uncheckedBounds: ( lower: lower, upper: upper) )
380
+ return unsafe Range( _uncheckedBounds: ( lower: lower, upper: upper) )
376
381
}
377
382
}
378
383
@@ -453,7 +458,7 @@ extension Range: Decodable where Bound: Decodable {
453
458
codingPath: decoder. codingPath,
454
459
debugDescription: " Cannot initialize \( Range . self) with a lowerBound ( \( lowerBound) ) greater than upperBound ( \( upperBound) ) " ) )
455
460
}
456
- self . init ( _uncheckedBounds: ( lower: lowerBound, upper: upperBound) )
461
+ unsafe self. init ( _uncheckedBounds: ( lower: lowerBound, upper: upperBound) )
457
462
}
458
463
}
459
464
@@ -754,7 +759,7 @@ extension Comparable {
754
759
public static func ..< ( minimum: Self , maximum: Self ) -> Range < Self > {
755
760
_precondition ( minimum <= maximum,
756
761
" Range requires lowerBound <= upperBound " )
757
- return Range( _uncheckedBounds: ( lower: minimum, upper: maximum) )
762
+ return unsafe Range( _uncheckedBounds: ( lower: minimum, upper: maximum) )
758
763
}
759
764
760
765
/// Returns a partial range up to, but not including, its upper bound.
@@ -1123,7 +1128,7 @@ extension Range where Bound == String.Index {
1123
1128
_internalInvariant (
1124
1129
( lowerBound. _canBeUTF8 && upperBound. _canBeUTF8)
1125
1130
|| ( lowerBound. _canBeUTF16 && upperBound. _canBeUTF16) )
1126
- return Range < Int > (
1131
+ return unsafe Range< Int > (
1127
1132
_uncheckedBounds: ( lowerBound. _encodedOffset, upperBound. _encodedOffset) )
1128
1133
}
1129
1134
}
0 commit comments