| //@ run-pass | |
| #[link(name = "rust_test_helpers", kind = "static")] | |
| extern "C" { | |
| pub fn rust_dbg_call( | |
| cb: extern "C" fn(u64) -> u64, | |
| data: u64, | |
| ) -> u64; | |
| } | |
| extern "C" fn cb(data: u64) -> u64 { | |
| if data == 1 { data } else { fact(data - 1) * data } | |
| } | |
| fn fact(n: u64) -> u64 { | |
| unsafe { | |
| println!("n = {}", n); | |
| rust_dbg_call(cb, n) | |
| } | |
| } | |
| pub fn main() { | |
| let result = fact(10); | |
| println!("result = {}", result); | |
| assert_eq!(result, 3628800); | |
| } |