File tree Expand file tree Collapse file tree 2 files changed +51
-0
lines changed Expand file tree Collapse file tree 2 files changed +51
-0
lines changed Original file line number Diff line number Diff line change 1+ extern crate stacker;
2+
3+ const RED_ZONE : usize = 100 * 1024 ; // 100k
4+ const STACK_PER_RECURSION : usize = 1 * 1024 * 1024 ; // 1MB
5+
6+ pub fn ensure_sufficient_stack < R , F : FnOnce ( ) -> R + std:: panic:: UnwindSafe > (
7+ f : F
8+ ) -> R {
9+ stacker:: maybe_grow ( RED_ZONE , STACK_PER_RECURSION , f)
10+ }
11+
12+ #[ inline( never) ]
13+ fn recurse ( n : usize ) {
14+ let x = [ 42u8 ; 50000 ] ;
15+ if n == 0 {
16+ panic ! ( "an inconvenient time" ) ;
17+ } else {
18+ ensure_sufficient_stack ( || recurse ( n - 1 ) ) ;
19+ }
20+ drop ( x) ;
21+ }
22+
23+ #[ test]
24+ #[ should_panic]
25+ fn foo ( ) {
26+ recurse ( 10000 ) ;
27+ }
Original file line number Diff line number Diff line change 1+ extern crate stacker;
2+
3+ const RED_ZONE : usize = 100 * 1024 ; // 100k
4+ const STACK_PER_RECURSION : usize = 1 * 1024 * 1024 ; // 1MB
5+
6+ pub fn ensure_sufficient_stack < R , F : FnOnce ( ) -> R + std:: panic:: UnwindSafe > (
7+ f : F
8+ ) -> R {
9+ stacker:: maybe_grow ( RED_ZONE , STACK_PER_RECURSION , f)
10+ }
11+
12+ #[ inline( never) ]
13+ fn recurse ( n : usize ) {
14+ let x = [ 42u8 ; 50000 ] ;
15+ if n != 0 {
16+ ensure_sufficient_stack ( || recurse ( n - 1 ) ) ;
17+ }
18+ drop ( x) ;
19+ }
20+
21+ #[ test]
22+ fn foo ( ) {
23+ recurse ( 10000 ) ;
24+ }
You can’t perform that action at this time.
0 commit comments