Skip to content

Commit d08d266

Browse files
committed
Try without generics, use fn pointers instead
1 parent 26ad0bd commit d08d266

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed
Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
//@ compile-flags: -Cstrip=none -Cdebuginfo=line-tables-only
2+
use std::backtrace::Backtrace;
23

34
#[no_mangle]
4-
pub fn baz<F>(mut cb: F, data: u32) where F: FnMut(u32) {
5-
cb(data);
5+
pub fn baz(cb: fn(u32) -> Backtrace, data: u32) -> Backtrace {
6+
cb(data)
67
}
78

89
#[no_mangle]
9-
pub fn bar<F>(cb: F, data: u32) where F: FnMut(u32) {
10-
baz(cb, data);
10+
pub fn bar(cb: fn(u32) -> Backtrace, data: u32) -> Backtrace {
11+
baz(cb, data)
1112
}
1213

1314
#[no_mangle]
14-
pub fn foo<F>(cb: F, data: u32) where F: FnMut(u32) {
15-
bar(cb, data);
15+
pub fn foo(cb: fn(u32) -> Backtrace, data: u32) -> Backtrace {
16+
bar(cb, data)
17+
}
18+
19+
fn helper(_x: u32) -> Backtrace {
20+
Backtrace::capture()
1621
}
1722

1823
pub fn capture_backtrace() -> std::backtrace::Backtrace {
19-
let mut bt = None;
20-
foo(|_| bt = Some(std::backtrace::Backtrace::capture()), 42);
21-
bt.unwrap()
24+
foo(helper, 42)
2225
}

0 commit comments

Comments
 (0)