Skip to content

Commit bcccaca

Browse files
authored
Merge pull request #149 from diffblue/release-18/feature/write-stack
Write Stack
2 parents 35c0970 + f10618f commit bcccaca

File tree

20 files changed

+1163
-114
lines changed

20 files changed

+1163
-114
lines changed

regression/goto-analyzer/sensitivity-test-common-files/pointer_to_array_sensitivity_tests.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,21 @@ int main(int argc, char *argv[])
88
int *p=a;
99
__CPROVER_assert(p==&a[0], "p==&a[0]");
1010

11+
// Read through pointer
1112
__CPROVER_assert(*p==1, "*p==1");
1213

14+
// Read through offset pointer
1315
__CPROVER_assert(p[1]==2, "p[1]==2");
1416
__CPROVER_assert(1[p]==2, "1[p]==2");
1517

1618
__CPROVER_assert(*(p+1)==2, "*(p+1)==2");
1719
__CPROVER_assert(*(1+p)==2, "*(1+p)==2");
1820

19-
__CPROVER_assert(*(p-1)==1, "*(p-1)==1");
20-
2121
// Test pointer arithmetic
2222
int *q=&a[1];
2323
__CPROVER_assert(q==p+1, "q==p+1");
2424
__CPROVER_assert(*q==2, "*q==2");
25+
__CPROVER_assert(*(q-1)==1, "*(q-1)==1");
2526

2627
// Test pointer diffs
2728
ptrdiff_t x=1;

regression/goto-analyzer/sensitivity-test-common-files/pointer_to_struct_sensitivity_tests.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,30 @@ int main(int argc, char *argv[])
2424
__CPROVER_assert(p->b==2.0, "p->b==2.0");
2525
__CPROVER_assert(p->b==1.0, "p->b==1.0");
2626

27+
// pointers to components
28+
int * comp_p = &x.a;
29+
__CPROVER_assert(comp_p==&x.a, "comp_p==&x.a");
30+
__CPROVER_assert(comp_p==&x.b, "comp_p==&x.b");
31+
__CPROVER_assert(*comp_p==0, "*comp_p==0");
32+
__CPROVER_assert(*comp_p==1, "*comp_p==1");
33+
34+
float * compb_p = &x.b;
35+
__CPROVER_assert(compb_p==&x.a, "compb_p==&x.a");
36+
__CPROVER_assert(compb_p==&x.b, "compb_p==&x.b");
37+
__CPROVER_assert(*compb_p==2.0, "*compb_p==2.0");
38+
__CPROVER_assert(*compb_p==1.0, "*compb_p==1.0");
39+
40+
// Use pointer implicitly pointing at the first component
41+
int * implicit_p = &x;
42+
__CPROVER_assert(implicit_p==&x.a, "implicit_p==&x.a");
43+
__CPROVER_assert(implicit_p==&x, "implicit_p==&x");
44+
__CPROVER_assert(*implicit_p==0, "*implicit_p==0");
45+
__CPROVER_assert(*implicit_p==1, "*implicit_p==1");
46+
47+
// Write through pointer implicitly pointing at the first component
48+
*implicit_p=5;
49+
__CPROVER_assert(x.a==5, "x.a==5");
50+
__CPROVER_assert(x.a==1, "x.a==1");
51+
2752
return 0;
2853
}

regression/goto-analyzer/sensitivity-test-constants-array-of-constants-array/test.desc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
sensitivity_test_constants_array_of_constants_array.c
3-
--variable --arrays --verify
3+
--variable --arrays --verify --pointers
44
^EXIT=0$
55
^SIGNAL=0$
66
^\[main.assertion.1\] .* a\[1\]\[2\]==0: Success$
@@ -17,10 +17,10 @@ sensitivity_test_constants_array_of_constants_array.c
1717
^\[main.assertion.12\] .* 1\[b\]\[2\]==0: Failure \(if reachable\)$
1818
^\[main.assertion.13\] .* \*\(1\[b\]\+2\)==5: Success$
1919
^\[main.assertion.14\] .* \*\(1\[b\]\+2\)==0: Failure \(if reachable\)$
20-
^\[main.assertion.15\] .* \(\*\(1\+b\)\)\[2\]==5: Unknown$
21-
^\[main.assertion.16\] .* \(\*\(1\+b\)\)\[2\]==0: Unknown$
22-
^\[main.assertion.17\] .* \*\(\*\(1\+b\)\+2\)==5: Unknown$
23-
^\[main.assertion.18\] .* \*\(\*\(1\+b\)\+2\)==0: Unknown$
20+
^\[main.assertion.15\] .* \(\*\(1\+b\)\)\[2\]==5: Success$
21+
^\[main.assertion.16\] .* \(\*\(1\+b\)\)\[2\]==0: Failure \(if reachable\)$
22+
^\[main.assertion.17\] .* \*\(\*\(1\+b\)\+2\)==5: Success$
23+
^\[main.assertion.18\] .* \*\(\*\(1\+b\)\+2\)==0: Failure \(if reachable\)$
2424
^\[main.assertion.19\] .* 2\[1\[b\]\]==5: Success$
2525
^\[main.assertion.20\] .* 2\[1\[b\]\]==0: Failure \(if reachable\)$
2626
^\[main.assertion.21\] .* \*\(2\+1\[b\]\)==5: Unknown$

regression/goto-analyzer/sensitivity-test-constants-array-of-constants-pointer/test.desc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ sensitivity_test_constants_array_of_constants_pointer.c
1313
^\[main.assertion.8\] .* \*b\[1\]==13: Failure \(if reachable\)$
1414
^\[main.assertion.9\] .* \*\(b\+1\)==&b1: Success$
1515
^\[main.assertion.10\] .* \*\(b\+1\)==&b3: Failure \(if reachable\)$
16-
^\[main.assertion.11\] .* \*\(1\+b\)==&b1: Unknown$
17-
^\[main.assertion.12\] .* \*\(1\+b\)==&b3: Unknown$
16+
^\[main.assertion.11\] .* \*\(1\+b\)==&b1: Success$
17+
^\[main.assertion.12\] .* \*\(1\+b\)==&b3: Failure \(if reachable\)$
1818
^\[main.assertion.13\] .* 1\[b\]==&b1: Success$
1919
^\[main.assertion.14\] .* 1\[b\]==&b3: Failure \(if reachable\)$
2020
^\[main.assertion.15\] .* \*\*\(b\+1\)==11: Success$
2121
^\[main.assertion.16\] .* \*\*\(b\+1\)==13: Failure \(if reachable\)$
22-
^\[main.assertion.17\] .* \*\*\(1\+b\)==11: Unknown$
23-
^\[main.assertion.18\] .* \*\*\(1\+b\)==13: Unknown$
22+
^\[main.assertion.17\] .* \*\*\(1\+b\)==11: Success$
23+
^\[main.assertion.18\] .* \*\*\(1\+b\)==13: Failure \(if reachable\)$
2424
^\[main.assertion.19\] .* \*1\[b\]==11: Success$
2525
^\[main.assertion.20\] .* \*1\[b\]==13: Failure \(if reachable\)$
2626
^\[main.assertion.21\] .* c\[0\]==&c0: Unknown$

regression/goto-analyzer/sensitivity-test-constants-array/test.desc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
sensitivity_test_constants_array.c
3-
--variable --arrays --verify
3+
--variable --arrays --verify --pointers
44
^EXIT=0$
55
^SIGNAL=0$
66
^\[main.assertion.1\] .* a\[1\]==0: Success$
@@ -9,8 +9,8 @@ sensitivity_test_constants_array.c
99
^\[main.assertion.4\] .* b\[1\]==1: Failure \(if reachable\)$
1010
^\[main.assertion.5\] .* \*\(b\+1\)==0: Success$
1111
^\[main.assertion.6\] .* \*\(b\+1\)==1: Failure \(if reachable\)$
12-
^\[main.assertion.7\] .* \*\(1\+b\)==0: Unknown$
13-
^\[main.assertion.8\] .* \*\(1\+b\)==1: Unknown$
12+
^\[main.assertion.7\] .* \*\(1\+b\)==0: Success$
13+
^\[main.assertion.8\] .* \*\(1\+b\)==1: Failure \(if reachable\)$
1414
^\[main.assertion.9\] .* 1\[b\]==0: Success$
1515
^\[main.assertion.10\] .* 1\[b\]==1: Failure \(if reachable\)$
1616
^\[main.assertion.11\] .* c\[0\]==0: Success$

regression/goto-analyzer/sensitivity-test-constants-pointer-to-constants-array/test.desc

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ sensitivity_test_constants_pointer_to_constants_array.c
55
^SIGNAL=0$
66
^\[main.assertion.1\] .* p==&a\[0\]: Success$
77
^\[main.assertion.2\] .* \*p==1: Success$
8-
^\[main\.assertion\.3\] .* p\[1\]==2: Unknown$
9-
^\[main\.assertion\.4\] .* 1\[p\]==2: Unknown$
10-
^\[main\.assertion\.5\] .* \*\(p\+1\)==2: Unknown$
11-
^\[main\.assertion\.6\] .* \*\(1\+p\)==2: Unknown$
12-
^\[main\.assertion\.7\] .* \*\(p-1\)==1: Unknown$
13-
^\[main\.assertion\.8\] .* q==p\+1: Unknown$
14-
^\[main\.assertion\.9\] .* \*q==2: Unknown$
8+
^\[main\.assertion\.3\] .* p\[1\]==2: Success$
9+
^\[main\.assertion\.4\] .* 1\[p\]==2: Success$
10+
^\[main\.assertion\.5\] .* \*\(p\+1\)==2: Success$
11+
^\[main\.assertion\.6\] .* \*\(1\+p\)==2: Success$
12+
^\[main\.assertion\.7\] .* q==p\+1: Success$
13+
^\[main\.assertion\.8\] .* \*q==2: Success$
14+
^\[main\.assertion\.9\] .* \*\(q-1\)==1: Success$
1515
^\[main\.assertion\.10\] .* q-p==x: Unknown$
16-
^\[main\.assertion\.11\] .* a\[1\]==4: Unknown$
17-
^\[main\.assertion\.12\] .* a\[1\]==5: Unknown$
18-
^\[main\.assertion\.13\] .* a\[1\]==6: Unknown$
19-
^\[main\.assertion\.14\] .* a\[1\]==7: Unknown$
16+
^\[main\.assertion\.11\] .* a\[1\]==4: Success$
17+
^\[main\.assertion\.12\] .* a\[1\]==5: Success$
18+
^\[main\.assertion\.13\] .* a\[1\]==6: Success$
19+
^\[main\.assertion\.14\] .* a\[1\]==7: Success$
2020
^\[main\.assertion\.15\] .* \*r==2: Unknown$
2121
^\[main\.assertion\.16\] .* \*r==1: Unknown$
2222
^\[main\.assertion\.17\] .* \*s==0: Unknown$
Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
1-
KNOWNBUG
1+
CORE
22
sensitivity_test_constants_pointer_to_constants_struct.c
33
--variable --pointers --structs --verify
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main.assertion.1\] .* \(\*p\).a==0: Success$
7-
^\[main.assertion.2\] .* \(\*p\).a==1: Failure \(if reachable\)$
8-
^\[main.assertion.3\] .* p->a==0: Success$
9-
^\[main.assertion.4\] .* p->a==1: Failure \(if reachable\)$
10-
^\[main.assertion.5\] .* p->b==2.0: Success$
11-
^\[main.assertion.6\] .* p->b==1.0: Failure \(if reachable\)$
6+
^\[main\.assertion\.1\] .* \(\*p\).a==0: Success$
7+
^\[main\.assertion\.2\] .* \(\*p\).a==1: Failure \(if reachable\)$
8+
^\[main\.assertion\.3\] .* p->a==0: Success$
9+
^\[main\.assertion\.4\] .* p->a==1: Failure \(if reachable\)$
10+
^\[main\.assertion\.5\] .* p->b==2.0: Success$
11+
^\[main\.assertion\.6\] .* p->b==1.0: Failure \(if reachable\)$
12+
^\[main\.assertion\.9\] .* \*comp_p==0: Success$
13+
^\[main\.assertion\.10\] .* \*comp_p==1: Failure \(if reachable\)$
14+
^\[main\.assertion\.13\] .* \*compb_p==2.0: Success$
15+
^\[main\.assertion\.14\] .* \*compb_p==1.0: Failure \(if reachable\)$
16+
^\[main\.assertion\.17\] .* \*implicit_p==0: Unknown$
17+
^\[main\.assertion\.18\] .* \*implicit_p==1: Unknown$
18+
^\[main\.assertion\.19\] .* x.a==5: Unknown$
19+
^\[main\.assertion\.20\] .* x.a==1: Unknown$
1220
--
1321
^warning: ignoring
1422
--
15-
The final two assertions are the wrong way round as modifying the pointer
16-
does not seem to be propogating through. See #96
23+
The following assertions are not checked since simplify_expr doesn't handle
24+
them. See issue diffblue/cbmc-toyota#145
25+
^\[main\.assertion\.7\] .* comp_p==&x.a: Success
26+
^\[main\.assertion\.8\] .* comp_p==&x.b: Failure \(if reachable\)$
27+
^\[main\.assertion\.11\] .* compb_p==&x.a: Failure \(if reachable\)$
28+
^\[main\.assertion\.12\] .* compb_p==&x.b: Success
29+
^\[main\.assertion\.15\] .* implicit_p==&x.a: Success
30+
^\[main\.assertion\.16\] .* implicit_p==&x: Success

regression/goto-analyzer/sensitivity-test-constants-pointer-to-two-value-array/test.desc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ sensitivity_test_constants_pointer_to_two_value_array.c
99
^\[main\.assertion\.4\] .* 1\[p\]==2: Unknown$
1010
^\[main\.assertion\.5\] .* \*\(p\+1\)==2: Unknown$
1111
^\[main\.assertion\.6\] .* \*\(1\+p\)==2: Unknown$
12-
^\[main\.assertion\.7\] .* \*\(p-1\)==1: Unknown$
13-
^\[main.assertion.8\] .* q==p\+1: Unknown$
14-
^\[main.assertion.9\] .* \*q==2: Unknown$
12+
^\[main.assertion\.7\] .* q==p\+1: Success$
13+
^\[main.assertion\.8\] .* \*q==2: Unknown$
14+
^\[main\.assertion\.9\] .* \*\(q-1\)==1: Unknown$
1515
^\[main.assertion.10\] .* q-p==x: Unknown$
1616
^\[main.assertion.11\] .* a\[1\]==4: Unknown$
1717
^\[main.assertion.12\] .* a\[1\]==5: Unknown$

regression/goto-analyzer/sensitivity-test-constants-pointer-to-two-value-struct/test.desc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,19 @@ sensitivity_test_constants_pointer_to_two_value_struct.c
99
^\[main.assertion.4\] .* p->a==1: Unknown$
1010
^\[main.assertion.5\] .* p->b==2.0: Unknown$
1111
^\[main.assertion.6\] .* p->b==1.0: Unknown$
12+
\[main\.assertion\.7\] .* comp_p==&x\.a: Unknown$
13+
\[main\.assertion\.8\] .* comp_p==&x\.b: Unknown$
14+
\[main\.assertion\.9\] .* \*comp_p==0: Unknown$
15+
\[main\.assertion\.10\] .* \*comp_p==1: Unknown$
16+
\[main\.assertion\.11\] .* compb_p==&x\.a: Unknown$
17+
\[main\.assertion\.12\] .* compb_p==&x\.b: Unknown$
18+
\[main\.assertion\.13\] .* \*compb_p==2\.0: Unknown$
19+
\[main\.assertion\.14\] .* \*compb_p==1\.0: Unknown$
20+
\[main\.assertion\.15\] .* implicit_p==&x\.a: Unknown$
21+
\[main\.assertion\.16\] .* implicit_p==&x: Unknown$
22+
\[main\.assertion\.17\] .* \*implicit_p==0: Unknown$
23+
\[main\.assertion\.18\] .* \*implicit_p==1: Unknown$
24+
\[main\.assertion\.19\] .* x\.a==5: Unknown$
25+
\[main\.assertion\.20\] .* x\.a==1: Unknown$
1226
--
1327
^warning: ignoring

regression/goto-analyzer/sensitivity-test-two-value-pointer-to-two-value-array/test.desc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ sensitivity_test_two_value_pointer_to_two_value_array.c
99
^\[main\.assertion\.4\] .* 1\[p\]==2: Unknown$
1010
^\[main\.assertion\.5\] .* \*\(p\+1\)==2: Unknown$
1111
^\[main\.assertion\.6\] .* \*\(1\+p\)==2: Unknown$
12-
^\[main\.assertion\.7\] .* \*\(p-1\)==1: Unknown$
13-
^\[main\.assertion\.8\] .* q==p\+1: Unknown$
14-
^\[main\.assertion\.9\] .* \*q==2: Unknown$
12+
^\[main\.assertion\.7\] .* q==p\+1: Unknown$
13+
^\[main\.assertion\.8\] .* \*q==2: Unknown$
14+
^\[main\.assertion\.9\] .* \*\(q-1\)==1: Unknown$
1515
^\[main\.assertion\.10\] .* q-p==x: Unknown$
1616
^\[main\.assertion\.11\] .* a\[1\]==4: Unknown$
1717
^\[main\.assertion\.12\] .* a\[1\]==5: Unknown$

0 commit comments

Comments
 (0)