summaryrefslogtreecommitdiffhomepage
path: root/CompilerDriver/cc2/regression-tests/pure2-deducing-pointers-error.cpp2
blob: ee6e5ff18399c314b01a72df78ec5ced17e30edd (plain)
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
fun: (inout i:int) -> *int = {
    return i&;
}

fun2: (inout i:int) -> (result : *int) = {
    result = i&;
}

main: () -> int = {
    a:     int = 2;
    pa:   *int = a&;
    ppa: **int = pa&;

    pa = 0;       // caught

    pa2:= ppa*;
    pa2 = 0;      // caught

    pa3 := a&;
    pa3 = 0;      // caught
    pa3 += 2;     // caught

    ppa2 := pa2&;
    pa4 := ppa2*;
    pa4 = 0;      // caught

    pppa := ppa&;
    pa5 := pppa**;
    pa5 = 0;      // caught

    //  TODO: @filipsajdak please take a look
    //  The bugfix in get_declaration_of(t) to add `&& ri->position() <= t.position()`
    //  to the condition is correct; it fixes issue #669 by not looking past the first
    //  declaration of the name in t. However, that change made the following two
    //  "caught" cases no longer be caught.
    fun(a)++;     // caught
    fp := fun(a);
    fp = 0;       // caught

    f := fun(a)*;
    _ = f;

    fp2 := fun2(a).result;
    fp2--;        // not caught :(

    return a * pa* * ppa**; // 8
}