Skip to content

Sendability is not possible to resolve (errors with and without) #82781

Open
@compnerd

Description

@compnerd

Description

Sendability checking seems to use sugared names for checking but protocol conformance uses the unsugared name. This results in errors with or without the sendability conformance for certain imported types.

Reproduction

import WinSDK

#if DEFINE_RETROACTIVE_CONFORMANCE
extension HANDLE: @retroactive @unchecked Sendable { }
#endif

final class S: Sendable {
    private let hFile: HANDLE
    public init(hFile: HANDLE) {
        self.hFile = hFile
    }
}

This errors with and without:

> swiftc -c reduced.swift -o NUL
reduced.swift:8:17: warning: stored property 'hFile' of 'Sendable'-conforming class 'S' has non-Sendable type 'HANDLE' (aka 'UnsafeMutableRawPointer'); this is an error in the Swift 6 language mode
 6 |
 7 | final class S: Sendable {
 8 |     private let hFile: HANDLE
   |                 `- warning: stored property 'hFile' of 'Sendable'-conforming class 'S' has non-Sendable type 'HANDLE' (aka 'UnsafeMutableRawPointer'); this is an error in the Swift 6 language mode
 9 |     public init(hFile: HANDLE) {
10 |         self.hFile = hFile

Swift.UnsafeMutableRawPointer:1:23: note: struct 'UnsafeMutableRawPointer' does not conform to the 'Sendable' protocol
1 | @frozen public struct UnsafeMutableRawPointer : @unsafe _Pointer {
  |                       `- note: struct 'UnsafeMutableRawPointer' does not conform to the 'Sendable' protocol
2 |     public typealias Pointee = UInt8
3 |     public let _rawValue: Builtin.RawPointer
> swiftc -c reduced.swift -o NUL -D DEFINE_RETROACTIVE_CONFORMANCE
reduced.swift:4:43: warning: conformance of 'UnsafeMutableRawPointer' to protocol 'Sendable' was already stated in the type's module 'Swift'
 2 |
 3 | #if DEFINE_RETROACTIVE_CONFORMANCE
 4 | extension HANDLE: @retroactive @unchecked Sendable { }
   |                                           `- warning: conformance of 'UnsafeMutableRawPointer' to protocol 'Sendable' was already stated in the type's module 'Swift'
 5 | #endif
 6 |

Swift.UnsafeMutableRawPointer:2:11: note: 'UnsafeMutableRawPointer' declares conformance to protocol 'Sendable' here
1 | @available(*, unavailable)
2 | extension UnsafeMutableRawPointer : Sendable {
  |           `- note: 'UnsafeMutableRawPointer' declares conformance to protocol 'Sendable' here
3 | }

Expected behavior

Expected this to not cause a warning.

Environment

> swiftc -version
Swift version 6.2-dev (LLVM 3c7e35ab7550a0a, Swift 4b8755968d5eb1e)
Target: x86_64-unknown-windows-msvc
Build config: +assertions

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    WindowsPlatform: WindowsbugA deviation from expected or documented behavior. Also: expected but undesirable behavior.concurrencyFeature: umbrella label for concurrency language featurestriage neededThis issue needs more specific labels

    Type

    No type

    Projects

    Status

    TODO

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions