blob: d964eba1899742c4af7ced6a957154563b5ad037 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// expect: drop 8 alive 8 1 gone 1/
// destructors 6: a drop that stores this somewhere reachable revives the value; it stays usable, its drop never runs again, and a later collection reclaims it
include rt;
int n;
word g, saved;
unchecked int keep(word p) { saved = p; return 0; }
fn make() { g = drop(heap(8), fn() { n++; keep(this); rt.put_s("drop "); rt.put_n(*this); rt.put_c(32); }); return 0; }
fn main() {
make();
g = 0;
rt.gc();
rt.gc();
unchecked { word p = saved; rt.put_s("alive "); rt.put_n(p[0]); rt.put_c(32); }
rt.put_n(n); rt.put_c(32);
saved = 0;
rt.gc(); rt.gc();
rt.put_s("gone "); rt.put_n(n);
rt.put_c(10);
return 0;
}
// zc0: skip
|