diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-08-29 05:50:39 +0200 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-08-31 02:42:28 +0200 |
| commit | 960ecdce7c5b7638cdb2585088caa666928c2d37 (patch) | |
| tree | 5a307e29cb34f68dc40919cde802183339be5bdd | |
| parent | 17e73e801a75559eac5c932ff07bd9c8499a1364 (diff) | |
| download | rust-960ecdce7c5b7638cdb2585088caa666928c2d37.tar.gz rust-960ecdce7c5b7638cdb2585088caa666928c2d37.zip | |
improper_ctypes: guard against accidental change to Unique<T>.
| -rw-r--r-- | src/test/ui/lint/lint-ctypes-enum.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/lint/lint-ctypes-enum.stderr | 34 |
2 files changed, 23 insertions, 13 deletions
diff --git a/src/test/ui/lint/lint-ctypes-enum.rs b/src/test/ui/lint/lint-ctypes-enum.rs index 45eeffff7a6..e1f4b0b34eb 100644 --- a/src/test/ui/lint/lint-ctypes-enum.rs +++ b/src/test/ui/lint/lint-ctypes-enum.rs @@ -1,4 +1,5 @@ #![feature(transparent_enums, transparent_unions)] +#![feature(ptr_internals)] #![deny(improper_ctypes)] #![allow(dead_code)] @@ -44,6 +45,7 @@ extern { fn option_ref(x: Option<&'static u8>); fn option_fn(x: Option<extern "C" fn()>); 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_u16(x: Option<num::NonZeroU16>); fn nonzero_u32(x: Option<num::NonZeroU32>); diff --git a/src/test/ui/lint/lint-ctypes-enum.stderr b/src/test/ui/lint/lint-ctypes-enum.stderr index 2a60cd12d99..20e43860664 100644 --- a/src/test/ui/lint/lint-ctypes-enum.stderr +++ b/src/test/ui/lint/lint-ctypes-enum.stderr @@ -1,61 +1,69 @@ 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); | ^ | note: lint level defined here - --> $DIR/lint-ctypes-enum.rs:2:9 + --> $DIR/lint-ctypes-enum.rs:3:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum note: type defined here - --> $DIR/lint-ctypes-enum.rs:8:1 + --> $DIR/lint-ctypes-enum.rs:9:1 | LL | enum U { A } | ^^^^^^^^^^^^ 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); | ^ | = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum note: type defined here - --> $DIR/lint-ctypes-enum.rs:9:1 + --> $DIR/lint-ctypes-enum.rs:10:1 | LL | enum B { C, D } | ^^^^^^^^^^^^^^^ 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); | ^ | = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum note: type defined here - --> $DIR/lint-ctypes-enum.rs:10:1 + --> $DIR/lint-ctypes-enum.rs:11:1 | 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 - --> $DIR/lint-ctypes-enum.rs:51:23 + --> $DIR/lint-ctypes-enum.rs:53:23 | 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 - --> $DIR/lint-ctypes-enum.rs:58:23 + --> $DIR/lint-ctypes-enum.rs:60:23 | 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 - --> $DIR/lint-ctypes-enum.rs:63:28 + --> $DIR/lint-ctypes-enum.rs:65:28 | 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 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>>); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -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 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>); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = 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 |
