]>
Commit | Line | Data |
---|---|---|
5a0aa603 | 1 | /* |
5fee5ec3 | 2 | REQUIRED_ARGS: -w |
5a0aa603 IB |
3 | TEST_OUTPUT: |
4 | --- | |
5 | noreturn | |
6 | --- | |
5fee5ec3 IB |
7 | |
8 | Basic properties and usage mentioned in the DIP: | |
9 | https://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1034.md | |
5a0aa603 IB |
10 | */ |
11 | ||
12 | alias noreturn = typeof(*null); | |
13 | pragma(msg, noreturn); | |
14 | ||
5fee5ec3 IB |
15 | static assert(!is(noreturn == void)); |
16 | ||
17 | // Fails | |
18 | // static assert(is( typeof([]) == noreturn[] )); | |
19 | // static assert(is( typeof([][0]) == noreturn )); | |
20 | ||
21 | static assert(is( typeof(assert(0)) == noreturn )); | |
22 | ||
23 | // Does not parse yet | |
24 | // static assert(is( typeof(throw new Exception()) == noreturn )); | |
25 | ||
26 | static assert(is(noreturn == noreturn)); | |
27 | static assert(!is(noreturn == const noreturn)); | |
28 | static assert(is(noreturn : const noreturn)); | |
29 | ||
30 | static assert(!is(noreturn == int)); | |
31 | static assert(is(noreturn : int)); | |
32 | ||
33 | // Covariance | |
34 | static assert(is(noreturn[] : int[])); | |
35 | static assert(is(noreturn* : int*)); | |
36 | static assert(is(noreturn function() : int function())); | |
37 | static assert(is(noreturn delegate() : int delegate())); | |
38 | ||
39 | // Reject inverse conversions | |
40 | static assert(!is(int[] : noreturn[])); | |
41 | static assert(!is(int* : noreturn*)); | |
42 | static assert(!is(int function() : noreturn function())); | |
43 | static assert(!is(int delegate() : noreturn delegate())); | |
44 | ||
45 | static assert(noreturn.mangleof == "Nn"); // Changed from b due to conflicts with bool | |
46 | static assert(noreturn.sizeof == 0); | |
47 | static assert(noreturn.alignof == 0); | |
48 | ||
49 | static assert((noreturn*).sizeof == (int*).sizeof); | |
50 | static assert((noreturn[]).sizeof == (int[]).sizeof); | |
51 | ||
52 | version (DigitalMars) | |
53 | noreturn exits(int* p) { *p = 3; } | |
5a0aa603 IB |
54 | |
55 | noreturn exit(); | |
56 | ||
5fee5ec3 IB |
57 | noreturn pureexits() @nogc nothrow pure @safe { assert(0); } |
58 | ||
59 | noreturn callpureexits() { pureexits(); } | |
60 | ||
5a0aa603 IB |
61 | int test1(int i) |
62 | { | |
63 | if (exit()) | |
64 | return i + 1; | |
65 | return i - 1; | |
66 | } |