Auto merge of #63991 - Centril:unique-improper-ctype, r=rkruppe

`improper_ctypes`: guard against accidental change to `Unique<T>`

r? @eddyb
This commit is contained in:
bors 2019-08-31 06:38:46 +00:00
commit b3146549ab
2 changed files with 23 additions and 13 deletions

View File

@ -1,4 +1,5 @@
#![feature(transparent_enums, transparent_unions)] #![feature(transparent_enums, transparent_unions)]
#![feature(ptr_internals)]
#![deny(improper_ctypes)] #![deny(improper_ctypes)]
#![allow(dead_code)] #![allow(dead_code)]
@ -44,6 +45,7 @@ extern {
fn option_ref(x: Option<&'static u8>); fn option_ref(x: Option<&'static u8>);
fn option_fn(x: Option<extern "C" fn()>); fn option_fn(x: Option<extern "C" fn()>);
fn nonnull(x: Option<std::ptr::NonNull<u8>>); fn nonnull(x: Option<std::ptr::NonNull<u8>>);
fn unique(x: Option<std::ptr::Unique<u8>>); //~ ERROR enum has no representation hint
fn nonzero_u8(x: Option<num::NonZeroU8>); fn nonzero_u8(x: Option<num::NonZeroU8>);
fn nonzero_u16(x: Option<num::NonZeroU16>); fn nonzero_u16(x: Option<num::NonZeroU16>);
fn nonzero_u32(x: Option<num::NonZeroU32>); fn nonzero_u32(x: Option<num::NonZeroU32>);

View File

@ -1,61 +1,69 @@
error: `extern` block uses type `U` which is not FFI-safe: enum has no representation hint error: `extern` block uses type `U` which is not FFI-safe: enum has no representation hint
--> $DIR/lint-ctypes-enum.rs:38:13 --> $DIR/lint-ctypes-enum.rs:39:13
| |
LL | fn uf(x: U); LL | fn uf(x: U);
| ^ | ^
| |
note: lint level defined here note: lint level defined here
--> $DIR/lint-ctypes-enum.rs:2:9 --> $DIR/lint-ctypes-enum.rs:3:9
| |
LL | #![deny(improper_ctypes)] LL | #![deny(improper_ctypes)]
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
= help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum
note: type defined here note: type defined here
--> $DIR/lint-ctypes-enum.rs:8:1 --> $DIR/lint-ctypes-enum.rs:9:1
| |
LL | enum U { A } LL | enum U { A }
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^
error: `extern` block uses type `B` which is not FFI-safe: enum has no representation hint error: `extern` block uses type `B` which is not FFI-safe: enum has no representation hint
--> $DIR/lint-ctypes-enum.rs:39:13 --> $DIR/lint-ctypes-enum.rs:40:13
| |
LL | fn bf(x: B); LL | fn bf(x: B);
| ^ | ^
| |
= help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum
note: type defined here note: type defined here
--> $DIR/lint-ctypes-enum.rs:9:1 --> $DIR/lint-ctypes-enum.rs:10:1
| |
LL | enum B { C, D } LL | enum B { C, D }
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
error: `extern` block uses type `T` which is not FFI-safe: enum has no representation hint error: `extern` block uses type `T` which is not FFI-safe: enum has no representation hint
--> $DIR/lint-ctypes-enum.rs:40:13 --> $DIR/lint-ctypes-enum.rs:41:13
| |
LL | fn tf(x: T); LL | fn tf(x: T);
| ^ | ^
| |
= help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum
note: type defined here note: type defined here
--> $DIR/lint-ctypes-enum.rs:10:1 --> $DIR/lint-ctypes-enum.rs:11:1
| |
LL | enum T { E, F, G } LL | enum T { E, F, G }
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
error: `extern` block uses type `std::option::Option<std::ptr::Unique<u8>>` which is not FFI-safe: enum has no representation hint
--> $DIR/lint-ctypes-enum.rs:48:17
|
LL | fn unique(x: Option<std::ptr::Unique<u8>>);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum
error: `extern` block uses type `u128` which is not FFI-safe: 128-bit integers don't currently have a known stable ABI error: `extern` block uses type `u128` which is not FFI-safe: 128-bit integers don't currently have a known stable ABI
--> $DIR/lint-ctypes-enum.rs:51:23 --> $DIR/lint-ctypes-enum.rs:53:23
| |
LL | fn nonzero_u128(x: Option<num::NonZeroU128>); LL | fn nonzero_u128(x: Option<num::NonZeroU128>);
| ^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^
error: `extern` block uses type `i128` which is not FFI-safe: 128-bit integers don't currently have a known stable ABI error: `extern` block uses type `i128` which is not FFI-safe: 128-bit integers don't currently have a known stable ABI
--> $DIR/lint-ctypes-enum.rs:58:23 --> $DIR/lint-ctypes-enum.rs:60:23
| |
LL | fn nonzero_i128(x: Option<num::NonZeroI128>); LL | fn nonzero_i128(x: Option<num::NonZeroI128>);
| ^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^
error: `extern` block uses type `std::option::Option<TransparentUnion<std::num::NonZeroU8>>` which is not FFI-safe: enum has no representation hint error: `extern` block uses type `std::option::Option<TransparentUnion<std::num::NonZeroU8>>` which is not FFI-safe: enum has no representation hint
--> $DIR/lint-ctypes-enum.rs:63:28 --> $DIR/lint-ctypes-enum.rs:65:28
| |
LL | fn transparent_union(x: Option<TransparentUnion<num::NonZeroU8>>); LL | fn transparent_union(x: Option<TransparentUnion<num::NonZeroU8>>);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -63,7 +71,7 @@ LL | fn transparent_union(x: Option<TransparentUnion<num::NonZeroU8>>);
= help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum
error: `extern` block uses type `std::option::Option<Rust<std::num::NonZeroU8>>` which is not FFI-safe: enum has no representation hint error: `extern` block uses type `std::option::Option<Rust<std::num::NonZeroU8>>` which is not FFI-safe: enum has no representation hint
--> $DIR/lint-ctypes-enum.rs:65:20 --> $DIR/lint-ctypes-enum.rs:67:20
| |
LL | fn repr_rust(x: Option<Rust<num::NonZeroU8>>); LL | fn repr_rust(x: Option<Rust<num::NonZeroU8>>);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -71,12 +79,12 @@ LL | fn repr_rust(x: Option<Rust<num::NonZeroU8>>);
= help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum
error: `extern` block uses type `std::result::Result<(), std::num::NonZeroI32>` which is not FFI-safe: enum has no representation hint error: `extern` block uses type `std::result::Result<(), std::num::NonZeroI32>` which is not FFI-safe: enum has no representation hint
--> $DIR/lint-ctypes-enum.rs:66:20 --> $DIR/lint-ctypes-enum.rs:68:20
| |
LL | fn no_result(x: Result<(), num::NonZeroI32>); LL | fn no_result(x: Result<(), num::NonZeroI32>);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum
error: aborting due to 8 previous errors error: aborting due to 9 previous errors