Repro:
#[import(cc = "C", name = "anydsl_print_i32")] fn print_i32(_: i32) -> ();
fn capture(a : i32) = @|body : fn(i32) -> ()| {
body(a)
};
#[export]
fn c(i : i32) {
let mut a = capture(i);
fn inner_loop(n : i32) -> () {
if (n <= 0) {
a (print_i32);
} else {
a = |exec : fn(i32) -> ()| { a(|i : i32| { exec(i + n); }); };
inner_loop(n - 1);
}
}
inner_loop(1);
}
print_i32 is being passed into a, but a will eventually expect a closure as a parameter.