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