File: b21285.d

package info (click to toggle)
gcc-arm-none-eabi 15%3A12.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 959,712 kB
  • sloc: cpp: 3,275,382; ansic: 2,061,766; ada: 840,956; f90: 208,513; makefile: 76,132; asm: 73,433; xml: 50,448; exp: 34,146; sh: 32,436; objc: 15,637; fortran: 14,012; python: 11,991; pascal: 6,787; awk: 4,779; perl: 3,054; yacc: 338; ml: 285; lex: 201; haskell: 122
file content (61 lines) | stat: -rw-r--r-- 1,397 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// REQUIRED_ARGS: -unittest
// PERMUTE_ARGS: -preview=dip1000
// Issue 21285 - Delegate covariance broken between 2.092 and 2.094 (git master).
unittest
{
    string path;
    int bank;
    static string path2;
    static int bank2;

    // delegates
    auto a = [
        (string arg) { path = arg; },
        (string arg) { bank = 1; throw new Exception(""); }
    ];

    // functions
    auto ab = [
        (string arg) { path2 = arg; },
        (string arg) { bank2 = 1; throw new Exception(""); }
    ];

    alias dg = void delegate(string) pure @safe;
    alias fn = void function(string) @safe;

    static assert(is(typeof(a[0]) == dg));
    static assert(is(typeof(ab[0]) == fn));
}

int f(string s) { throw new Exception(""); }
void main()
{
    string path;
    int bank, preset;
    void delegate(string value)[string] aa = [
        "path": (string arg) {
            path = arg;
        },
        "bank": (string arg) {
            bank = f(arg);
        },
        "preset": (string arg) {
            preset = f(arg);
        },
    ];

    string delegate(string value)[string] aa2 = [
        "path": (string arg) {
            path = arg;
            return arg;
        },
        "bank": (string arg) {
            bank = f(arg);
            return arg;
        },
        "preset": (string arg) {
            preset = f(arg);
            return arg;
        },
    ];
}