Skip to content

Commit a6a8a4b

Browse files
authored
Merge pull request #68935 from glessard/rdar116374967-cherrypick-pr68715
2 parents 99646c3 + 3e25fca commit a6a8a4b

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

stdlib/public/core/Runtime.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,16 @@ func _stdlib_atomicInitializeARCRef(
133133
) -> Bool {
134134
// Note: this assumes that AnyObject? is layout-compatible with a RawPointer
135135
// that simply points to the same memory.
136-
var expected: UnsafeRawPointer?
136+
var expected: UnsafeRawPointer? = nil
137137
let unmanaged = Unmanaged.passRetained(desired)
138138
let desiredPtr = unmanaged.toOpaque()
139139
let rawTarget = UnsafeMutableRawPointer(target).assumingMemoryBound(
140140
to: Optional<UnsafeRawPointer>.self)
141-
let wonRace = _stdlib_atomicCompareExchangeStrongPtr(
142-
object: rawTarget, expected: &expected, desired: desiredPtr)
141+
let wonRace = withUnsafeMutablePointer(to: &expected) {
142+
_stdlib_atomicCompareExchangeStrongPtr(
143+
object: rawTarget, expected: $0, desired: desiredPtr
144+
)
145+
}
143146
if !wonRace {
144147
// Some other thread initialized the value. Balance the retain that we
145148
// performed on 'desired'.

0 commit comments

Comments
 (0)