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
}
|