Skip to content
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

Generalize get_nullable_type to allow types where null is all-ones. #94586

Merged
merged 1 commit into from
Mar 8, 2022

Commits on Mar 4, 2022

  1. Generalize get_nullable_type to allow types where null is all-ones.

    Generalize get_nullable_type to accept types that have an all-ones bit
    pattern as their sentry "null" value.
    
    This will allow [`OwnedFd`], [`BorrowedFd`], [`OwnedSocket`], and
    [`BorrowedSocket`] to be marked with
    `#[rustc_nonnull_optimization_guaranteed]`, which will allow
    `Option<OwnedFd>`, `Option<BorrowedFd>`, `Option<OwnedSocket>`, and
    `Option<BorrowedSocket>` to be used in FFI declarations, as described
    in the [I/O safety RFC].
    
    For example, it will allow a function like `open` on Unix and `WSASocketW`
    on Windows to be declared using `Option<OwnedFd>` and `Option<OwnedSocket>`
    return types, respectively.
    
    The actual change to add `#[rustc_nonnull_optimization_guaranteed]`
    to the abovementioned types will be a separate PR, as it'll depend on
    having this patch in the stage0 compiler.
    
    Also, update the diagnostics to mention that "niche optimizations" are
    used in libstd as well as libcore, as `rustc_layout_scalar_valid_range_start`
    and `rustc_layout_scalar_valid_range_end` are already in use in libstd.
    
    [`OwnedFd`]: https://github.com/rust-lang/rust/blob/c9dc44be24c58ff13ce46416c4b97ab5c1bd8429/library/std/src/os/fd/owned.rs#L49
    [`BorrowedFd`]: https://github.com/rust-lang/rust/blob/c9dc44be24c58ff13ce46416c4b97ab5c1bd8429/library/std/src/os/fd/owned.rs#L29
    [`OwnedSocket`]: https://github.com/rust-lang/rust/blob/c9dc44be24c58ff13ce46416c4b97ab5c1bd8429/library/std/src/os/windows/io/socket.rs#L51
    [`BorrowedSocket`]: https://github.com/rust-lang/rust/blob/c9dc44be24c58ff13ce46416c4b97ab5c1bd8429/library/std/src/os/windows/io/socket.rs#L29
    [I/O safety RFC]: https://github.com/rust-lang/rfcs/blob/master/text/3128-io-safety.md#ownedfd-and-borrowedfdfd-1
    sunfishcode committed Mar 4, 2022
    Configuration menu
    Copy the full SHA
    86b4658 View commit details
    Browse the repository at this point in the history