Skip to content

Commit 0b5d1e2

Browse files
committed
[SE-0331] Mark unsafe pointer conformances to Sendable as explicitly unavailable
This is a preferred way to make sure that Sendable inference doesn't happen for these types because they are marked as @Frozen. (cherry picked from commit a0dfab9)
1 parent 5424fdf commit 0b5d1e2

File tree

6 files changed

+32
-1
lines changed

6 files changed

+32
-1
lines changed

stdlib/public/core/BridgeObjectiveC.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,8 @@ extension UnsafeRawPointer {
589589
}
590590
}
591591

592-
extension AutoreleasingUnsafeMutablePointer { }
592+
@available(*, unavailable)
593+
extension AutoreleasingUnsafeMutablePointer: Sendable { }
593594

594595
internal struct _CocoaFastEnumerationStackBuf {
595596
// Clang uses 16 pointers. So do we.

stdlib/public/core/CTypes.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,9 @@ extension OpaquePointer: Hashable {
207207
}
208208
}
209209

210+
@available(*, unavailable)
211+
extension OpaquePointer : Sendable { }
212+
210213
extension OpaquePointer: CustomDebugStringConvertible {
211214
/// A textual representation of the pointer, suitable for debugging.
212215
public var debugDescription: String {
@@ -297,6 +300,9 @@ extension CVaListPointer: CustomDebugStringConvertible {
297300

298301
#endif
299302

303+
@available(*, unavailable)
304+
extension CVaListPointer: Sendable { }
305+
300306
/// Copy `size` bytes of memory from `src` into `dest`.
301307
///
302308
/// The memory regions `src..<src + size` and

stdlib/public/core/UnsafeBufferPointer.swift.gyb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,8 +1197,14 @@ extension Unsafe${Mutable}BufferPointer: CustomDebugStringConvertible {
11971197
+ "(start: \(_position.map(String.init(describing:)) ?? "nil"), count: \(count))"
11981198
}
11991199
}
1200+
1201+
@available(*, unavailable)
1202+
extension Unsafe${Mutable}BufferPointer: Sendable { }
12001203
%end
12011204

1205+
@available(*, unavailable)
1206+
extension UnsafeBufferPointer.Iterator: Sendable { }
1207+
12021208

12031209
// ${'Local Variables'}:
12041210
// eval: (read-only-mode 1)

stdlib/public/core/UnsafePointer.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,3 +1172,8 @@ public struct UnsafeMutablePointer<Pointee>: _Pointer {
11721172
)._unsafelyUnwrappedUnchecked
11731173
}
11741174
}
1175+
1176+
@available(*, unavailable)
1177+
extension UnsafePointer: Sendable { }
1178+
@available(*, unavailable)
1179+
extension UnsafeMutablePointer: Sendable { }

stdlib/public/core/UnsafeRawBufferPointer.swift.gyb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,14 @@ public func _withUnprotectedUnsafeBytes<T, Result>(
13031303
return try body(buffer)
13041304
}
13051305

1306+
@available(*, unavailable)
1307+
extension UnsafeRawBufferPointer: Sendable { }
1308+
@available(*, unavailable)
1309+
extension UnsafeRawBufferPointer.Iterator: Sendable { }
1310+
@available(*, unavailable)
1311+
extension UnsafeMutableRawBufferPointer: Sendable { }
1312+
1313+
13061314
// ${'Local Variables'}:
13071315
// eval: (read-only-mode 1)
13081316
// End:

stdlib/public/core/UnsafeRawPointer.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,3 +1486,8 @@ extension OpaquePointer {
14861486
self._rawValue = unwrapped._rawValue
14871487
}
14881488
}
1489+
1490+
@available(*, unavailable)
1491+
extension UnsafeRawPointer: Sendable { }
1492+
@available(*, unavailable)
1493+
extension UnsafeMutableRawPointer: Sendable { }

0 commit comments

Comments
 (0)