about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/run-pass/mir_trans_calls.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/test/run-pass/mir_trans_calls.rs b/src/test/run-pass/mir_trans_calls.rs
index 1ce0618daf3..bd236e95d1c 100644
--- a/src/test/run-pass/mir_trans_calls.rs
+++ b/src/test/run-pass/mir_trans_calls.rs
@@ -94,10 +94,9 @@ fn test8() -> isize {
 }
 
 #[rustc_mir]
-fn test_fn_impl(f: &&Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
-    // This call goes through the Fn implementation for &Fn provided in
-    // core::ops::impls. It expands to a static Fn::call() that calls the
-    // Fn::call() implemenation of the object shim underneath.
+fn test_closure<F>(f: &F, x: i32, y: i32) -> i32
+    where F: Fn(i32, i32) -> i32
+{
     f(x, y)
 }
 
@@ -106,6 +105,14 @@ fn test_fn_object(f: &Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
     f(x, y)
 }
 
+#[rustc_mir]
+fn test_fn_impl(f: &&Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
+    // This call goes through the Fn implementation for &Fn provided in
+    // core::ops::impls. It expands to a static Fn::call() that calls the
+    // Fn::call() implemenation of the object shim underneath.
+    f(x, y)
+}
+
 fn main() {
     assert_eq!(test1(1, (2, 3), &[4, 5, 6]), (1, (2, 3), &[4, 5, 6][..]));
     assert_eq!(test2(98), 98);
@@ -117,7 +124,9 @@ fn main() {
     assert_eq!(test7(), 1);
     assert_eq!(test8(), 2);
 
-    let function_object = (&|x: i32, y: i32| { x + y }) as &Fn(i32, i32) -> i32;
-    assert_eq!(test_fn_object(function_object, 100, 1), 101);
-    assert_eq!(test_fn_impl(&function_object, 100, 2), 102);
+    let closure = |x: i32, y: i32| { x + y };
+    assert_eq!(test_closure(&closure, 100, 1), 101);
+    let function_object = &closure as &Fn(i32, i32) -> i32;
+    assert_eq!(test_fn_object(function_object, 100, 2), 102);
+    assert_eq!(test_fn_impl(&function_object, 100, 3), 103);
 }