source: CIVL/examples/mem/readset/sequence.cvl@ 7d77e64

main test-branch
Last change on this file since 7d77e64 was 27f37a6, checked in by Stephen Siegel <siegel@…>, 3 years ago

Polish the read set analyzer and let it handle sequence objects.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5820 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 1.6 KB
Line 
1#include <seq.cvh>
2#include <mem.cvh>
3
4int main() {
5
6 int a[];
7 int b[10] = {0};
8 int zero = 0;
9 $mem m;
10
11 $seq_init(&a, 5, &zero);
12 $read_set_push();
13
14 // simple test:
15 b[0] = a[0];
16
17 m = $read_set_pop();
18 // note that 1) no value in `b` is read and 2) the sequence `a` is
19 // read as an scalar object:
20 $assert($mem_contains(m, ($mem)&a));
21 $assert($mem_contains(($mem)&a, m));
22
23 int c[2][];
24
25 $seq_init(&c[0], 5, &zero);
26 $seq_init(&c[1], 5, &zero);
27 $read_set_push();
28
29 // test sequence of array elements
30 b[0] = c[0][0];
31 b[1] = c[1][0];
32
33 m = $read_set_pop();
34 $assert($mem_contains(m, $mem_union(($mem)&c[0], ($mem)&c[1])));
35 $assert($mem_contains($mem_union(($mem)&c[0], ($mem)&c[1]), m));
36
37 $read_set_push();
38
39 // test reading sequence as array indexes:
40 b[a[0]] = 0;
41 b[a[0] + 1] = 0;
42
43 m = $read_set_pop();
44 $assert($mem_contains(m, ($mem)&a));
45 $assert($mem_contains(($mem)&a, m));
46
47 int *p = &a[0];
48
49 $read_set_push();
50
51 // test reading sequence through pointers
52 b[p[0]] = 0;
53
54 m = $read_set_pop();
55 $assert($mem_contains(m, $mem_union(($mem)&a,
56 ($mem)&p)));
57 $assert($mem_contains($mem_union(($mem)&a,
58 ($mem)&p),
59 m));
60
61 struct T {
62 int a[];
63 int b[];
64 } t, *tp;
65
66 tp = &t;
67 $seq_init(&t.a, 5, &zero);
68 $seq_init(&t.b, 5, &zero);
69 $read_set_push();
70
71 // test reading sequence type struct fields:
72 b[0] = tp->a[0];
73 tp->b[0] = 0;
74 t.b[0] = 0;
75
76 m = $read_set_pop();
77 $assert($mem_contains(m, $mem_union(($mem)&t.a,
78 ($mem)&tp)));
79 $assert($mem_contains($mem_union(($mem)&t.a,
80 ($mem)&tp),
81 m));
82
83}
Note: See TracBrowser for help on using the repository browser.