]> git.lizzy.rs Git - rust.git/blob - tests/ui/abi/extern/extern-call-deep.rs
Rollup merge of #105526 - Xiretza:iter-from-generator-derive, r=scottmcm
[rust.git] / tests / ui / abi / extern / extern-call-deep.rs
1 // run-pass
2 // ignore-wasm32-bare no libc to test ffi with
3 // ignore-emscripten blows the JS stack
4
5 #![feature(rustc_private)]
6
7 extern crate libc;
8
9 mod rustrt {
10     extern crate libc;
11
12     #[link(name = "rust_test_helpers", kind = "static")]
13     extern "C" {
14         pub fn rust_dbg_call(
15             cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
16             data: libc::uintptr_t,
17         ) -> libc::uintptr_t;
18     }
19 }
20
21 extern "C" fn cb(data: libc::uintptr_t) -> libc::uintptr_t {
22     if data == 1 { data } else { count(data - 1) + 1 }
23 }
24
25 fn count(n: libc::uintptr_t) -> libc::uintptr_t {
26     unsafe {
27         println!("n = {}", n);
28         rustrt::rust_dbg_call(cb, n)
29     }
30 }
31
32 pub fn main() {
33     let result = count(1000);
34     println!("result = {}", result);
35     assert_eq!(result, 1000);
36 }