xref: /netbsd-src/external/gpl3/gcc.old/dist/libphobos/testsuite/libphobos.shared/link.d (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
1*627f7eb2Smrg import lib;
2*627f7eb2Smrg 
testEH()3*627f7eb2Smrg void testEH()
4*627f7eb2Smrg {
5*627f7eb2Smrg     bool passed;
6*627f7eb2Smrg     try
7*627f7eb2Smrg         lib.throwException();
8*627f7eb2Smrg     catch (Exception e)
9*627f7eb2Smrg         passed = true;
10*627f7eb2Smrg     assert(passed); passed = false;
11*627f7eb2Smrg 
12*627f7eb2Smrg     assert(lib.collectException({throw new Exception(null);}) !is null);
13*627f7eb2Smrg     assert(lib.collectException({lib.throwException();}) !is null);
14*627f7eb2Smrg }
15*627f7eb2Smrg 
testGC()16*627f7eb2Smrg void testGC()
17*627f7eb2Smrg {
18*627f7eb2Smrg     import core.memory;
19*627f7eb2Smrg     lib.alloc();
20*627f7eb2Smrg     lib.tls_alloc();
21*627f7eb2Smrg     lib.access();
22*627f7eb2Smrg     lib.tls_access();
23*627f7eb2Smrg     GC.collect();
24*627f7eb2Smrg     lib.tls_access();
25*627f7eb2Smrg     lib.access();
26*627f7eb2Smrg     lib.tls_free();
27*627f7eb2Smrg     lib.free();
28*627f7eb2Smrg }
29*627f7eb2Smrg 
30*627f7eb2Smrg import core.atomic : atomicOp;
this()31*627f7eb2Smrg shared static this() { assert(lib.shared_static_ctor == 1); }
~this()32*627f7eb2Smrg shared static ~this() { assert(lib.shared_static_dtor == 0); }
33*627f7eb2Smrg shared uint static_ctor, static_dtor;
this()34*627f7eb2Smrg static this() { assert(lib.static_ctor == atomicOp!"+="(static_ctor, 1)); }
~this()35*627f7eb2Smrg static ~this() { assert(lib.static_dtor + 1 == atomicOp!"+="(static_dtor, 1)); }
36*627f7eb2Smrg 
testInit()37*627f7eb2Smrg void testInit()
38*627f7eb2Smrg {
39*627f7eb2Smrg     import core.thread;
40*627f7eb2Smrg 
41*627f7eb2Smrg     assert(lib.static_ctor == 1);
42*627f7eb2Smrg     assert(lib.static_dtor == 0);
43*627f7eb2Smrg     static void foo()
44*627f7eb2Smrg     {
45*627f7eb2Smrg         assert(lib.shared_static_ctor == 1);
46*627f7eb2Smrg         assert(lib.shared_static_dtor == 0);
47*627f7eb2Smrg         assert(lib.static_ctor == 2);
48*627f7eb2Smrg         assert(lib.static_dtor == 0);
49*627f7eb2Smrg     }
50*627f7eb2Smrg     auto thr = new Thread(&foo);
51*627f7eb2Smrg     thr.start();
52*627f7eb2Smrg     assert(thr.join() is null);
53*627f7eb2Smrg     assert(lib.shared_static_ctor == 1);
54*627f7eb2Smrg     assert(lib.shared_static_dtor == 0);
55*627f7eb2Smrg     assert(lib.static_ctor == 2);
56*627f7eb2Smrg     assert(lib.static_dtor == 1);
57*627f7eb2Smrg }
58*627f7eb2Smrg 
main()59*627f7eb2Smrg void main()
60*627f7eb2Smrg {
61*627f7eb2Smrg     testEH();
62*627f7eb2Smrg     testGC();
63*627f7eb2Smrg     testInit();
64*627f7eb2Smrg }
65