Skip to content

Commit fbfbb2a

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.
1 parent 610c7a6 commit fbfbb2a

File tree

6 files changed

+33
-1
lines changed

6 files changed

+33
-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
@_unavailableInEmbedded
211214
extension OpaquePointer: CustomDebugStringConvertible {
212215
/// A textual representation of the pointer, suitable for debugging.
@@ -300,6 +303,9 @@ extension CVaListPointer: CustomDebugStringConvertible {
300303

301304
#endif
302305

306+
@available(*, unavailable)
307+
extension CVaListPointer: Sendable { }
308+
303309
/// Copy `size` bytes of memory from `src` into `dest`.
304310
///
305311
/// The memory regions `src..<src + size` and

stdlib/public/core/UnsafeBufferPointer.swift.gyb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,6 +1200,13 @@ extension Unsafe${Mutable}BufferPointer: CustomDebugStringConvertible {
12001200
}
12011201
%end
12021202

1203+
@available(*, unavailable)
1204+
extension UnsafeBufferPointer: Sendable { }
1205+
@available(*, unavailable)
1206+
extension UnsafeMutableBufferPointer: Sendable { }
1207+
@available(*, unavailable)
1208+
extension UnsafeBufferPointer.Iterator: Sendable { }
1209+
12031210

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

stdlib/public/core/UnsafePointer.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,3 +1175,8 @@ public struct UnsafeMutablePointer<Pointee>: _Pointer {
11751175
)._unsafelyUnwrappedUnchecked
11761176
}
11771177
}
1178+
1179+
@available(*, unavailable)
1180+
extension UnsafePointer: Sendable { }
1181+
@available(*, unavailable)
1182+
extension UnsafeMutablePointer: Sendable { }

stdlib/public/core/UnsafeRawBufferPointer.swift.gyb

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

1307+
@available(*, unavailable)
1308+
extension UnsafeRawBufferPointer: Sendable { }
1309+
@available(*, unavailable)
1310+
extension UnsafeRawBufferPointer.Iterator: Sendable { }
1311+
@available(*, unavailable)
1312+
extension UnsafeMutableRawBufferPointer: Sendable { }
1313+
1314+
13071315
// ${'Local Variables'}:
13081316
// eval: (read-only-mode 1)
13091317
// 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)