diff --git a/tests/run-pass/non_capture_closure_to_fn_ptr.rs b/tests/run-pass/non_capture_closure_to_fn_ptr.rs index e6a5017847d4..d404daef2c7c 100644 --- a/tests/run-pass/non_capture_closure_to_fn_ptr.rs +++ b/tests/run-pass/non_capture_closure_to_fn_ptr.rs @@ -5,7 +5,8 @@ static BAR: fn(i32, i32) = |a, b| { assert_ne!(a, b) }; // use to first make the closure FnOnce() before making it fn() -fn magic(f: F) -> F { f } +fn magic0 R>(f: F) -> F { f } +fn magic1 R>(f: F) -> F { f } fn main() { FOO(); @@ -15,6 +16,20 @@ fn main() { let boo: &dyn Fn(i32, i32) = &BAR; boo(48, 49); - let f = magic(||{}) as fn(); + let f: fn() = ||{}; f(); + let f = magic0(||{}) as fn(); + f(); + + let g: fn(i32) = |i| assert_eq!(i, 2); + g(2); + let g = magic1(|i| assert_eq!(i, 2)) as fn(i32); + g(2); + + // FIXME: This fails with "invalid use of NULL pointer" + //let h: fn() -> ! = || std::process::exit(0); + //h(); + // FIXME: This does not even compile?!? + //let h = magic0(|| std::process::exit(0)) as fn() -> !; + //h(); }