File tree Expand file tree Collapse file tree 1 file changed +18
-0
lines changed Expand file tree Collapse file tree 1 file changed +18
-0
lines changed Original file line number Diff line number Diff line change @@ -27,7 +27,9 @@ fn main() {
27
27
if args. len ( ) > 0 {
28
28
match & args[ 0 ] [ ..] {
29
29
"main-recurse" => overflow_recurse ( ) ,
30
+ "main-tls-recurse" => tls_recurse ( ) ,
30
31
"child-recurse" => thread:: spawn ( overflow_recurse) . join ( ) . unwrap ( ) ,
32
+ "child-tls-recurse" => thread:: spawn ( tls_recurse) . join ( ) . unwrap ( ) ,
31
33
"child-frame" => overflow_frame ( ) ,
32
34
_ => panic ! ( ) ,
33
35
}
@@ -42,8 +44,10 @@ fn main() {
42
44
// details
43
45
if cfg ! ( not( target_os = "linux" ) ) {
44
46
assert_overflow ( Command :: new ( & me) . arg ( "main-recurse" ) ) ;
47
+ assert_overflow ( Command :: new ( & me) . arg ( "main-tls-recurse" ) ) ;
45
48
}
46
49
assert_overflow ( Command :: new ( & me) . arg ( "child-recurse" ) ) ;
50
+ assert_overflow ( Command :: new ( & me) . arg ( "child-tls-recurse" ) ) ;
47
51
assert_overflow ( Command :: new ( & me) . arg ( "child-frame" ) ) ;
48
52
}
49
53
@@ -56,6 +60,20 @@ fn recurse(array: &MaybeUninit<[u64; 1024]>) {
56
60
recurse ( & local) ;
57
61
}
58
62
63
+ fn tls_recurse ( ) {
64
+ struct RecursiveDrop ;
65
+
66
+ impl Drop for RecursiveDrop {
67
+ fn drop ( & mut self ) {
68
+ overflow_recurse ( ) ;
69
+ }
70
+ }
71
+
72
+ thread_local ! ( static LOCAL : RecursiveDrop = const { RecursiveDrop } ) ;
73
+
74
+ LOCAL . with ( |_| { } ) ;
75
+ }
76
+
59
77
#[ inline( never) ]
60
78
fn overflow_recurse ( ) {
61
79
recurse ( & MaybeUninit :: uninit ( ) ) ;
You can’t perform that action at this time.
0 commit comments