1final class Class
2{
3    // This gets triggered although the instance always stays referenced.
4    ~this()
5    {
6        import core.stdc.stdlib;
7        abort();
8    }
9}
10
11Class obj;
12
13static this()
14{
15    obj = new Class;
16}
17
18static ~this()
19{
20    // Free without destruction to avoid triggering abort()
21    import core.memory;
22    GC.free(cast(void*)obj);
23}
24
25void doit()
26{
27    foreach (i; 0 .. 10_000)
28        new ubyte[](100_000);
29}
30
31void main()
32{
33    import core.thread;
34    auto t = new Thread(&doit);
35    t.start();
36
37    // This triggers the GC that frees the still referenced Class instance.
38    doit();
39}
40