@@ -159,6 +159,7 @@ public struct Range<Bound: Comparable> {
159159
160160 // This works around _debugPrecondition() impacting the performance of
161161 // optimized code. (rdar://72246338)
162+ @unsafe
162163 @_alwaysEmitIntoClient @inline ( __always)
163164 internal init ( _uncheckedBounds bounds: ( lower: Bound , upper: Bound ) ) {
164165 self . lowerBound = bounds. lower
@@ -178,7 +179,9 @@ public struct Range<Bound: Comparable> {
178179 public init ( uncheckedBounds bounds: ( lower: Bound , upper: Bound ) ) {
179180 _debugPrecondition ( bounds. lower <= bounds. upper,
180181 " 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+ )
182185 }
183186
184187 /// Returns a Boolean value indicating whether the given element is contained
@@ -321,7 +324,9 @@ extension Range where Bound: Strideable, Bound.Stride: SignedInteger {
321324 @inlinable // trivial-implementation
322325 public init ( _ other: ClosedRange < Bound > ) {
323326 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+ )
325330 }
326331}
327332
@@ -372,7 +377,7 @@ extension Range {
372377 limits. upperBound < self . upperBound ? limits. upperBound
373378 : limits. lowerBound > self . upperBound ? limits. lowerBound
374379 : self . upperBound
375- return Range ( _uncheckedBounds: ( lower: lower, upper: upper) )
380+ return unsafe Range( _uncheckedBounds: ( lower: lower, upper: upper) )
376381 }
377382}
378383
@@ -453,7 +458,7 @@ extension Range: Decodable where Bound: Decodable {
453458 codingPath: decoder. codingPath,
454459 debugDescription: " Cannot initialize \( Range . self) with a lowerBound ( \( lowerBound) ) greater than upperBound ( \( upperBound) ) " ) )
455460 }
456- self . init ( _uncheckedBounds: ( lower: lowerBound, upper: upperBound) )
461+ unsafe self. init ( _uncheckedBounds: ( lower: lowerBound, upper: upperBound) )
457462 }
458463}
459464
@@ -754,7 +759,7 @@ extension Comparable {
754759 public static func ..< ( minimum: Self , maximum: Self ) -> Range < Self > {
755760 _precondition ( minimum <= maximum,
756761 " Range requires lowerBound <= upperBound " )
757- return Range( _uncheckedBounds: ( lower: minimum, upper: maximum) )
762+ return unsafe Range( _uncheckedBounds: ( lower: minimum, upper: maximum) )
758763 }
759764
760765 /// Returns a partial range up to, but not including, its upper bound.
@@ -1123,7 +1128,7 @@ extension Range where Bound == String.Index {
11231128 _internalInvariant (
11241129 ( lowerBound. _canBeUTF8 && upperBound. _canBeUTF8)
11251130 || ( lowerBound. _canBeUTF16 && upperBound. _canBeUTF16) )
1126- return Range < Int > (
1131+ return unsafe Range< Int > (
11271132 _uncheckedBounds: ( lowerBound. _encodedOffset, upperBound. _encodedOffset) )
11281133 }
11291134}
0 commit comments