Merge dmd upstream e2fe2687b
[official-gcc.git] / gcc / testsuite / gdc.test / runnable / xpostblit.d
blobb364c4cff63a03ec309f3c1ed319cce213fff4fc
1 // PERMUTE_ARGS:
3 struct Field
5 this(this) @safe @nogc pure nothrow {}
8 struct Counter
10 static size_t cnt;
11 this(this) @safe @nogc nothrow { ++cnt; }
14 struct Foo
16 this(this) @safe @nogc pure nothrow {}
17 Field field;
20 void test1() @safe @nogc pure nothrow
22 Foo foo;
23 foo.__xpostblit();
26 static assert(__traits(hasMember, Foo, "__xpostblit"));
30 struct FieldPostblit
32 Counter counter;
35 struct AggrPostblit
37 static size_t cnt;
38 this(this) @safe @nogc nothrow { ++cnt; }
41 struct MixedPostblit
43 static size_t cnt;
44 Counter counter;
45 this(this) @safe @nogc nothrow { ++cnt; }
48 struct SNoPostblit {}
49 class CNoPostblit {}
51 static assert(!__traits(hasMember, SNoPostblit, "__xpostblit"));
52 static assert(!__traits(hasMember, CNoPostblit, "__xpostblit"));
54 void test2() @safe @nogc nothrow
56 FieldPostblit a;
57 assert(Counter.cnt == 0);
58 a.__xpostblit();
59 assert(Counter.cnt == 1);
60 AggrPostblit b;
61 assert(AggrPostblit.cnt == 0);
62 b.__xpostblit();
63 assert(AggrPostblit.cnt == 1);
64 Counter.cnt = 0;
65 MixedPostblit c;
66 assert(MixedPostblit.cnt == 0);
67 assert(Counter.cnt == 0);
68 c.__xpostblit();
69 assert(MixedPostblit.cnt == 1);
70 assert(Counter.cnt == 1);
73 void main()
75 test1();
76 test2();