Skip to content

Commit fbd6961

Browse files
committed
Less experimental version
1 parent 961d29b commit fbd6961

File tree

3 files changed

+21
-19
lines changed

3 files changed

+21
-19
lines changed

stdlib/public/core/ContiguousArrayBuffer.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -274,15 +274,15 @@ internal struct _ContiguousArrayBuffer<Element>: _ArrayBufferProtocol {
274274
realMinimumCapacity._builtinWordValue, Element.self)
275275

276276
let storageAddr = UnsafeMutableRawPointer(Builtin.bridgeToRawPointer(_storage))
277-
// if let allocSize = _mallocSize(ofAllocation: storageAddr) {
278-
// let endAddr = storageAddr + allocSize
279-
// let realCapacity = endAddr.assumingMemoryBound(to: Element.self) - firstElementAddress
280-
// _initStorageHeader(
281-
// count: uninitializedCount, capacity: realCapacity)
282-
// } else {
277+
if let allocSize = _mallocSize(ofAllocation: storageAddr) {
278+
let endAddr = storageAddr + allocSize
279+
let realCapacity = endAddr.assumingMemoryBound(to: Element.self) - firstElementAddress
280+
_initStorageHeader(
281+
count: uninitializedCount, capacity: realCapacity)
282+
} else {
283283
_initStorageHeader(
284284
count: uninitializedCount, capacity: realMinimumCapacity)
285-
// }
285+
}
286286
}
287287
}
288288

stdlib/public/core/Shims.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ internal let _fastEnumerationStorageMutationsPtr =
3737
UnsafeMutablePointer<CUnsignedLong>(Builtin.addressof(&_fastEnumerationStorageMutationsTarget))
3838
#endif
3939

40-
@usableFromInline @_alwaysEmitIntoClient
40+
@usableFromInline @_alwaysEmitIntoClient @_effects(readonly)
4141
internal func _mallocSize(ofAllocation ptr: UnsafeRawPointer) -> Int? {
42-
return _swift_stdlib_has_malloc_size() ? _swift_stdlib_malloc_size(ptr) : nil
42+
return !Builtin.isOnStack(ptr) && _swift_stdlib_has_malloc_size() ?
43+
_swift_stdlib_malloc_size(ptr) :
44+
nil
4345
}

stdlib/public/core/StringStorage.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -206,17 +206,17 @@ fileprivate func _allocate<T: AnyObject>(
206206
let totalTailBytes = total - numHeaderBytes
207207

208208
let object = tailAllocator(totalTailBytes)
209-
// if let allocSize = _mallocSize(ofAllocation:
210-
// UnsafeRawPointer(Builtin.bridgeToRawPointer(object))) {
211-
// _internalInvariant(allocSize % MemoryLayout<Int>.stride == 0)
212-
//
213-
// let realNumTailBytes = allocSize - numHeaderBytes
214-
// _internalInvariant(realNumTailBytes >= numTailBytes)
215-
//
216-
// return (object, realNumTailBytes)
217-
// } else {
209+
if let allocSize = _mallocSize(ofAllocation:
210+
UnsafeRawPointer(Builtin.bridgeToRawPointer(object))) {
211+
_internalInvariant(allocSize % MemoryLayout<Int>.stride == 0)
212+
213+
let realNumTailBytes = allocSize - numHeaderBytes
214+
_internalInvariant(realNumTailBytes >= numTailBytes)
215+
216+
return (object, realNumTailBytes)
217+
} else {
218218
return (object, totalTailBytes)
219-
// }
219+
}
220220
}
221221

222222
fileprivate func _allocateStringStorage(

0 commit comments

Comments
 (0)