Skip to content

Commit 97424b7

Browse files
committed
stdlib: Don't check for overflows when adding 1 to Array.count
That addition can not possibly overflow. If Array.count would be Int max, the allocation of the array buffer would have failed way before.
1 parent 2a9c148 commit 97424b7

File tree

3 files changed

+16
-16
lines changed

3 files changed

+16
-16
lines changed

stdlib/public/core/Array.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,7 @@ extension Array: RangeReplaceableCollection {
10901090
@inline(never)
10911091
@inlinable // @specializable
10921092
internal mutating func _copyToNewBuffer(oldCount: Int) {
1093-
let newCount = oldCount + 1
1093+
let newCount = oldCount &+ 1
10941094
var newBuffer = _buffer._forceCreateUniqueMutableBuffer(
10951095
countForNewBuffer: oldCount, minNewCapacity: newCount)
10961096
_buffer._arrayOutOfPlaceUpdate(&newBuffer, oldCount, 0)
@@ -1101,7 +1101,7 @@ extension Array: RangeReplaceableCollection {
11011101
internal mutating func _makeUniqueAndReserveCapacityIfNotUnique() {
11021102
if _slowPath(!_buffer.beginCOWMutation()) {
11031103
_createNewBuffer(bufferIsUnique: false,
1104-
minimumCapacity: count + 1,
1104+
minimumCapacity: count &+ 1,
11051105
growForAppend: true)
11061106
}
11071107
}
@@ -1121,9 +1121,9 @@ extension Array: RangeReplaceableCollection {
11211121
let capacity = _buffer.mutableCapacity
11221122
_internalInvariant(capacity == 0 || _buffer.isMutableAndUniquelyReferenced())
11231123

1124-
if _slowPath(oldCount + 1 > capacity) {
1124+
if _slowPath(oldCount &+ 1 > capacity) {
11251125
_createNewBuffer(bufferIsUnique: capacity > 0,
1126-
minimumCapacity: oldCount + 1,
1126+
minimumCapacity: oldCount &+ 1,
11271127
growForAppend: true)
11281128
}
11291129
}
@@ -1135,9 +1135,9 @@ extension Array: RangeReplaceableCollection {
11351135
newElement: __owned Element
11361136
) {
11371137
_internalInvariant(_buffer.isMutableAndUniquelyReferenced())
1138-
_internalInvariant(_buffer.mutableCapacity >= _buffer.mutableCount + 1)
1138+
_internalInvariant(_buffer.mutableCapacity >= _buffer.mutableCount &+ 1)
11391139

1140-
_buffer.mutableCount = oldCount + 1
1140+
_buffer.mutableCount = oldCount &+ 1
11411141
(_buffer.mutableFirstElementAddress + oldCount).initialize(to: newElement)
11421142
}
11431143

stdlib/public/core/ArraySlice.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ extension ArraySlice: RangeReplaceableCollection {
847847
@inline(never)
848848
@inlinable // @specializable
849849
internal mutating func _copyToNewBuffer(oldCount: Int) {
850-
let newCount = oldCount + 1
850+
let newCount = oldCount &+ 1
851851
var newBuffer = _buffer._forceCreateUniqueMutableBuffer(
852852
countForNewBuffer: oldCount, minNewCapacity: newCount)
853853
_buffer._arrayOutOfPlaceUpdate(
@@ -877,7 +877,7 @@ extension ArraySlice: RangeReplaceableCollection {
877877
let capacity = _buffer.capacity
878878
_internalInvariant(capacity == 0 || _buffer.isMutableAndUniquelyReferenced())
879879

880-
if _slowPath(oldCount + 1 > capacity) {
880+
if _slowPath(oldCount &+ 1 > capacity) {
881881
_copyToNewBuffer(oldCount: oldCount)
882882
}
883883
}
@@ -889,9 +889,9 @@ extension ArraySlice: RangeReplaceableCollection {
889889
newElement: __owned Element
890890
) {
891891
_internalInvariant(_buffer.isMutableAndUniquelyReferenced())
892-
_internalInvariant(_buffer.capacity >= _buffer.count + 1)
892+
_internalInvariant(_buffer.capacity >= _buffer.count &+ 1)
893893

894-
_buffer.count = oldCount + 1
894+
_buffer.count = oldCount &+ 1
895895
(_buffer.firstElementAddress + oldCount).initialize(to: newElement)
896896
}
897897

stdlib/public/core/ContiguousArray.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,7 @@ extension ContiguousArray: RangeReplaceableCollection {
724724
@inline(never)
725725
@inlinable // @specializable
726726
internal mutating func _copyToNewBuffer(oldCount: Int) {
727-
let newCount = oldCount + 1
727+
let newCount = oldCount &+ 1
728728
var newBuffer = _buffer._forceCreateUniqueMutableBuffer(
729729
countForNewBuffer: oldCount, minNewCapacity: newCount)
730730
_buffer._arrayOutOfPlaceUpdate(
@@ -736,7 +736,7 @@ extension ContiguousArray: RangeReplaceableCollection {
736736
internal mutating func _makeUniqueAndReserveCapacityIfNotUnique() {
737737
if _slowPath(!_buffer.beginCOWMutation()) {
738738
_createNewBuffer(bufferIsUnique: false,
739-
minimumCapacity: count + 1,
739+
minimumCapacity: count &+ 1,
740740
growForAppend: true)
741741
}
742742
}
@@ -756,9 +756,9 @@ extension ContiguousArray: RangeReplaceableCollection {
756756
let capacity = _buffer.mutableCapacity
757757
_internalInvariant(capacity == 0 || _buffer.isMutableAndUniquelyReferenced())
758758

759-
if _slowPath(oldCount + 1 > capacity) {
759+
if _slowPath(oldCount &+ 1 > capacity) {
760760
_createNewBuffer(bufferIsUnique: capacity > 0,
761-
minimumCapacity: oldCount + 1,
761+
minimumCapacity: oldCount &+ 1,
762762
growForAppend: true)
763763
}
764764
}
@@ -770,9 +770,9 @@ extension ContiguousArray: RangeReplaceableCollection {
770770
newElement: __owned Element
771771
) {
772772
_internalInvariant(_buffer.isMutableAndUniquelyReferenced())
773-
_internalInvariant(_buffer.mutableCapacity >= _buffer.mutableCount + 1)
773+
_internalInvariant(_buffer.mutableCapacity >= _buffer.mutableCount &+ 1)
774774

775-
_buffer.mutableCount = oldCount + 1
775+
_buffer.mutableCount = oldCount &+ 1
776776
(_buffer.mutableFirstElementAddress + oldCount).initialize(to: newElement)
777777
}
778778

0 commit comments

Comments
 (0)