From df7e496f855331acd0cb9c6133a77197cd6118cf Mon Sep 17 00:00:00 2001 From: varkor Date: Tue, 10 Sep 2019 18:16:35 +0100 Subject: Forbid opaque types in extern blocks --- src/test/ui/lint/opaque-ty-ffi-unsafe.rs | 16 ++++++++++++++++ src/test/ui/lint/opaque-ty-ffi-unsafe.stderr | 14 ++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/test/ui/lint/opaque-ty-ffi-unsafe.rs create mode 100644 src/test/ui/lint/opaque-ty-ffi-unsafe.stderr (limited to 'src/test/ui') diff --git a/src/test/ui/lint/opaque-ty-ffi-unsafe.rs b/src/test/ui/lint/opaque-ty-ffi-unsafe.rs new file mode 100644 index 00000000000..907ad068035 --- /dev/null +++ b/src/test/ui/lint/opaque-ty-ffi-unsafe.rs @@ -0,0 +1,16 @@ +#![feature(type_alias_impl_trait)] + +#![deny(improper_ctypes)] + +type A = impl Fn(); + +pub fn ret_closure() -> A { + || {} +} + +extern "C" { + pub fn a(_: A); + //~^ ERROR `extern` block uses type `A` which is not FFI-safe: opaque types have no C equivalent +} + +fn main() {} diff --git a/src/test/ui/lint/opaque-ty-ffi-unsafe.stderr b/src/test/ui/lint/opaque-ty-ffi-unsafe.stderr new file mode 100644 index 00000000000..6e234aa300b --- /dev/null +++ b/src/test/ui/lint/opaque-ty-ffi-unsafe.stderr @@ -0,0 +1,14 @@ +error: `extern` block uses type `A` which is not FFI-safe: opaque types have no C equivalent + --> $DIR/opaque-ty-ffi-unsafe.rs:12:17 + | +LL | pub fn a(_: A); + | ^ + | +note: lint level defined here + --> $DIR/opaque-ty-ffi-unsafe.rs:3:9 + | +LL | #![deny(improper_ctypes)] + | ^^^^^^^^^^^^^^^ + +error: aborting due to previous error + -- cgit 1.4.1-3-g733a5