From 117c8b17d7c3b13b940998a8c5bb44478adef45b Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Wed, 12 Jun 2019 00:45:24 +0200 Subject: [PATCH] Move closure-to-extern-fn-ptr-coercion tests into ui --- .../coerce-unsafe-closure-to-unsafe-fn-ptr.rs | 3 --- .../typeck-closure-to-extern-c-fn-ptr.rs | 7 ------- .../typeck-closure-to-unsafe-extern-c-fn-ptr.rs | 7 ------- .../coerce-closure-to-extern-c-fn-ptr.rs | 16 ++++++++++++++++ ...rce-unsafe-closure-to-unsafe-extern-fn-ptr.rs | 4 ++++ ...unsafe-closure-to-unsafe-extern-fn-ptr.stderr | 11 +++++++++++ 6 files changed, 31 insertions(+), 17 deletions(-) delete mode 100644 src/test/run-pass/typeck-closure-to-extern-c-fn-ptr.rs delete mode 100644 src/test/run-pass/typeck-closure-to-unsafe-extern-c-fn-ptr.rs create mode 100644 src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-closure-to-extern-c-fn-ptr.rs create mode 100644 src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-unsafe-closure-to-unsafe-extern-fn-ptr.rs create mode 100644 src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-unsafe-closure-to-unsafe-extern-fn-ptr.stderr diff --git a/src/test/compile-fail/coerce-unsafe-closure-to-unsafe-fn-ptr.rs b/src/test/compile-fail/coerce-unsafe-closure-to-unsafe-fn-ptr.rs index f7345826da8cf..36777693faba0 100644 --- a/src/test/compile-fail/coerce-unsafe-closure-to-unsafe-fn-ptr.rs +++ b/src/test/compile-fail/coerce-unsafe-closure-to-unsafe-fn-ptr.rs @@ -1,8 +1,5 @@ fn main() { let _: unsafe fn() = || { ::std::pin::Pin::new_unchecked(&0_u8); }; //~^ ERROR E0133 - let _: unsafe extern "C" fn() = || { ::std::pin::Pin::new_unchecked(&0_u8); }; - //~^ ERROR E0133 let _: unsafe fn() = || unsafe { ::std::pin::Pin::new_unchecked(&0_u8); }; // OK - let _: unsafe extern "C" fn() = || unsafe { ::std::pin::Pin::new_unchecked(&0_u8); }; // OK } diff --git a/src/test/run-pass/typeck-closure-to-extern-c-fn-ptr.rs b/src/test/run-pass/typeck-closure-to-extern-c-fn-ptr.rs deleted file mode 100644 index 277ff7adaeedb..0000000000000 --- a/src/test/run-pass/typeck-closure-to-extern-c-fn-ptr.rs +++ /dev/null @@ -1,7 +0,0 @@ -fn call_extern_c(func: extern "C" fn()) { - func() -} - -pub fn main() { - call_extern_c(|| {}); -} diff --git a/src/test/run-pass/typeck-closure-to-unsafe-extern-c-fn-ptr.rs b/src/test/run-pass/typeck-closure-to-unsafe-extern-c-fn-ptr.rs deleted file mode 100644 index f252e45389e68..0000000000000 --- a/src/test/run-pass/typeck-closure-to-unsafe-extern-c-fn-ptr.rs +++ /dev/null @@ -1,7 +0,0 @@ -unsafe fn call_unsafe_extern_c(func: unsafe extern "C" fn()) { - func() -} - -pub fn main() { - unsafe { call_unsafe_extern_c(|| {}); } -} diff --git a/src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-closure-to-extern-c-fn-ptr.rs b/src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-closure-to-extern-c-fn-ptr.rs new file mode 100644 index 0000000000000..1ccaf0131ad49 --- /dev/null +++ b/src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-closure-to-extern-c-fn-ptr.rs @@ -0,0 +1,16 @@ +// compile-pass + +fn call_extern_c(func: extern "C" fn()) { + func() +} + +unsafe fn call_unsafe_extern_c(func: unsafe extern "C" fn()) { + func() +} + +pub fn main() { + call_extern_c(|| {}); + unsafe { + call_unsafe_extern_c(|| {}); + } +} diff --git a/src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-unsafe-closure-to-unsafe-extern-fn-ptr.rs b/src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-unsafe-closure-to-unsafe-extern-fn-ptr.rs new file mode 100644 index 0000000000000..f54e7cdddc696 --- /dev/null +++ b/src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-unsafe-closure-to-unsafe-extern-fn-ptr.rs @@ -0,0 +1,4 @@ +fn main() { + let _: unsafe extern "C" fn() = || { ::std::pin::Pin::new_unchecked(&0_u8); }; //~ ERROR E0133 + let _: unsafe extern "C" fn() = || unsafe { ::std::pin::Pin::new_unchecked(&0_u8); }; // OK +} diff --git a/src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-unsafe-closure-to-unsafe-extern-fn-ptr.stderr b/src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-unsafe-closure-to-unsafe-extern-fn-ptr.stderr new file mode 100644 index 0000000000000..05791ca9287ad --- /dev/null +++ b/src/test/ui/closure-to-extern-fn-ptr-coercion/coerce-unsafe-closure-to-unsafe-extern-fn-ptr.stderr @@ -0,0 +1,11 @@ +error[E0133]: call to unsafe function is unsafe and requires unsafe function or block + --> $DIR/coerce-unsafe-closure-to-unsafe-extern-fn-ptr.rs:2:42 + | +LL | let _: unsafe extern "C" fn() = || { ::std::pin::Pin::new_unchecked(&0_u8); }; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function + | + = note: consult the function's documentation for information on how to avoid undefined behavior + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0133`.