xref: /netbsd-src/external/gpl3/gcc.old/dist/libphobos/testsuite/libphobos.thread/tlsgc_sections.d (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
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*627f7eb2Smrg static this()
14*627f7eb2Smrg {
15*627f7eb2Smrg     obj = new Class;
16*627f7eb2Smrg }
17*627f7eb2Smrg 
~this()18*627f7eb2Smrg static ~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*627f7eb2Smrg void doit()
26*627f7eb2Smrg {
27*627f7eb2Smrg     foreach (i; 0 .. 10_000)
28*627f7eb2Smrg         new ubyte[](100_000);
29*627f7eb2Smrg }
30*627f7eb2Smrg 
main()31*627f7eb2Smrg void 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