Skip to content

Span: Remove ownership modifiers and explicit copies from pointers. #77729

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions stdlib/public/core/Span/RawSpan.swift
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,10 @@ public struct RawSpan: ~Escapable, Copyable, BitwiseCopyable {
@inline(__always)
@lifetime(borrow pointer)
internal init(
_unchecked pointer: borrowing UnsafeRawPointer?,
_unchecked pointer: UnsafeRawPointer?,
byteCount: Int
) {
_pointer = copy pointer
_pointer = pointer
_count = byteCount
}
}
Expand All @@ -95,7 +95,7 @@ extension RawSpan {
@_alwaysEmitIntoClient
@lifetime(borrow buffer)
public init(
_unsafeBytes buffer: borrowing UnsafeRawBufferPointer
_unsafeBytes buffer: UnsafeRawBufferPointer
) {
self.init(
_unchecked: buffer.baseAddress, byteCount: buffer.count
Expand Down Expand Up @@ -129,7 +129,7 @@ extension RawSpan {
@_alwaysEmitIntoClient
@lifetime(borrow buffer)
public init(
_unsafeBytes buffer: borrowing UnsafeMutableRawBufferPointer
_unsafeBytes buffer: UnsafeMutableRawBufferPointer
) {
self.init(_unsafeBytes: UnsafeRawBufferPointer(buffer))
}
Expand All @@ -155,11 +155,11 @@ extension RawSpan {
@_alwaysEmitIntoClient
@lifetime(borrow pointer)
public init(
_unsafeStart pointer: borrowing UnsafeRawPointer,
_unsafeStart pointer: UnsafeRawPointer,
byteCount: Int
) {
_precondition(byteCount >= 0, "Count must not be negative")
self.init(_unchecked: copy pointer, byteCount: byteCount)
self.init(_unchecked: pointer, byteCount: byteCount)
}

/// Unsafely create a `RawSpan` over initialized memory.
Expand All @@ -173,7 +173,7 @@ extension RawSpan {
@_alwaysEmitIntoClient
@lifetime(borrow buffer)
public init<T: BitwiseCopyable>(
_unsafeElements buffer: borrowing UnsafeBufferPointer<T>
_unsafeElements buffer: UnsafeBufferPointer<T>
) {
self.init(_unsafeBytes: UnsafeRawBufferPointer(buffer))
}
Expand Down Expand Up @@ -207,7 +207,7 @@ extension RawSpan {
@_alwaysEmitIntoClient
@lifetime(borrow buffer)
public init<T: BitwiseCopyable>(
_unsafeElements buffer: borrowing UnsafeMutableBufferPointer<T>
_unsafeElements buffer: UnsafeMutableBufferPointer<T>
) {
self.init(_unsafeElements: UnsafeBufferPointer(buffer))
}
Expand Down Expand Up @@ -243,12 +243,12 @@ extension RawSpan {
@_alwaysEmitIntoClient
@lifetime(borrow pointer)
public init<T: BitwiseCopyable>(
_unsafeStart pointer: borrowing UnsafePointer<T>,
_unsafeStart pointer: UnsafePointer<T>,
count: Int
) {
_precondition(count >= 0, "Count must not be negative")
self.init(
_unchecked: copy pointer, byteCount: count * MemoryLayout<T>.stride
_unchecked: pointer, byteCount: count * MemoryLayout<T>.stride
)
}

Expand Down
20 changes: 10 additions & 10 deletions stdlib/public/core/Span/Span.swift
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ public struct Span<Element: ~Copyable & ~Escapable>
@inline(__always)
@lifetime(borrow pointer)
internal init(
_unchecked pointer: borrowing UnsafeRawPointer?,
_unchecked pointer: UnsafeRawPointer?,
count: Int
) {
_pointer = copy pointer
_pointer = pointer
_count = count
}
}
Expand All @@ -97,7 +97,7 @@ extension Span where Element: ~Copyable {
@_alwaysEmitIntoClient
@lifetime(borrow buffer)
public init(
_unsafeElements buffer: borrowing UnsafeBufferPointer<Element>
_unsafeElements buffer: UnsafeBufferPointer<Element>
) {
//FIXME: Workaround for https://github.com/swiftlang/swift/issues/77235
let baseAddress = buffer.baseAddress
Expand All @@ -120,7 +120,7 @@ extension Span where Element: ~Copyable {
@_alwaysEmitIntoClient
@lifetime(borrow buffer)
public init(
_unsafeElements buffer: borrowing UnsafeMutableBufferPointer<Element>
_unsafeElements buffer: UnsafeMutableBufferPointer<Element>
) {
self.init(_unsafeElements: UnsafeBufferPointer(buffer))
}
Expand All @@ -138,11 +138,11 @@ extension Span where Element: ~Copyable {
@_alwaysEmitIntoClient
@lifetime(borrow pointer)
public init(
_unsafeStart pointer: borrowing UnsafePointer<Element>,
_unsafeStart pointer: UnsafePointer<Element>,
count: Int
) {
_precondition(count >= 0, "Count must not be negative")
self.init(_unsafeElements: .init(start: copy pointer, count: count))
self.init(_unsafeElements: .init(start: pointer, count: count))
}
}

Expand Down Expand Up @@ -200,7 +200,7 @@ extension Span where Element: BitwiseCopyable {
@_alwaysEmitIntoClient
@lifetime(borrow buffer)
public init(
_unsafeBytes buffer: borrowing UnsafeRawBufferPointer
_unsafeBytes buffer: UnsafeRawBufferPointer
) {
//FIXME: Workaround for https://github.com/swiftlang/swift/issues/77235
let baseAddress = buffer.baseAddress
Expand Down Expand Up @@ -232,7 +232,7 @@ extension Span where Element: BitwiseCopyable {
@_alwaysEmitIntoClient
@lifetime(borrow buffer)
public init(
_unsafeBytes buffer: borrowing UnsafeMutableRawBufferPointer
_unsafeBytes buffer: UnsafeMutableRawBufferPointer
) {
self.init(_unsafeBytes: UnsafeRawBufferPointer(buffer))
}
Expand All @@ -254,11 +254,11 @@ extension Span where Element: BitwiseCopyable {
@_alwaysEmitIntoClient
@lifetime(borrow pointer)
public init(
_unsafeStart pointer: borrowing UnsafeRawPointer,
_unsafeStart pointer: UnsafeRawPointer,
byteCount: Int
) {
_precondition(byteCount >= 0, "Count must not be negative")
self.init(_unsafeBytes: .init(start: copy pointer, count: byteCount))
self.init(_unsafeBytes: .init(start: pointer, count: byteCount))
}

/// Unsafely create a `Span` over initialized memory.
Expand Down
4 changes: 4 additions & 0 deletions stdlib/public/core/UnsafeBufferPointer.swift.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,10 @@ public struct Unsafe${Mutable}BufferPointer<Element: ~Copyable>: Copyable {
% end
}

// FIXME: The ASTPrinter should print this synthesized conformance.
// rdar://140291657
extension Unsafe${Mutable}BufferPointer: BitwiseCopyable where Element: ~Copyable {}

@available(*, unavailable)
extension Unsafe${Mutable}BufferPointer: Sendable where Element: ~Copyable {}

Expand Down