Skip to content

Commit 7c56091

Browse files
author
Daniel Kroening
authored
Merge pull request #2634 from qaphla/local_bitvector_analysis_regression
Added a regression test for local_bitvector_analysis
2 parents 44ef8d5 + 432dcf1 commit 7c56091

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <assert.h>
2+
#include <stdlib.h>
3+
4+
int main()
5+
{
6+
{
7+
int *p = 0x0;
8+
9+
// Since local_bitvector_analysis can tell that p is NULL, this should
10+
// generate only a NULL check, and not any of the other pointer checks.
11+
*p = 1;
12+
}
13+
14+
{
15+
int i;
16+
int *q = &i;
17+
18+
// This should only generate a not-dead check and a bounds-check.
19+
*q = 2;
20+
}
21+
22+
{
23+
int *r = __CPROVER_allocate(sizeof(int), 1);
24+
25+
// This should generate a not-deallocated check and a bounds-check.
26+
*r = 5;
27+
}
28+
29+
{
30+
int *s;
31+
32+
// This should generate an invalid pointer check (labelled uninitialized).
33+
*s = 14;
34+
}
35+
36+
return 0;
37+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
CORE
2+
main.c
3+
--pointer-check
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^\[main.pointer_dereference.1\] dereference failure: pointer NULL in \*p: FAILURE$
7+
^\[main.pointer_dereference.2\] dereference failure: dead object in \*q: SUCCESS$
8+
^\[main.pointer_dereference.3\] dereference failure: pointer outside object bounds in \*q: SUCCESS$
9+
^\[main.pointer_dereference.4\] dereference failure: deallocated dynamic object in \*r: SUCCESS$
10+
^\[main.pointer_dereference.5\] dereference failure: pointer outside dynamic object bounds in \*r: SUCCESS$
11+
^\[main.pointer_dereference.6\] dereference failure: pointer uninitialized in \*s: FAILURE$
12+
^VERIFICATION FAILED$
13+
--
14+
^warning: ignoring
15+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer invalid in \*p:
16+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer uninitialized in \*p:
17+
^\[main.pointer_dereference.[0-9]+\] dereference failure: deallocated dynamic object in \*p:
18+
^\[main.pointer_dereference.[0-9]+\] dereference failure: dead object in \*p:
19+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer outside dynamic object bounds in \*p:
20+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer outside object bounds in \*p:
21+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer NULL in \*q:
22+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer invalid in \*q:
23+
^\[main.pointer_dereference.[0-9]+\] dereference failure: deallocated dynamic object in \*q:
24+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer outside dynamic object bounds in \*q:
25+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer uninitialized in \*q:
26+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer NULL in \*r:
27+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer invalid in \*r:
28+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer uninitialized in \*r:
29+
^\[main.pointer_dereference.[0-9]+\] dereference failure: dead object in \*r:
30+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer outside object bounds in \*r:
31+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer NULL in \*s:
32+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer invalid in \*s:
33+
^\[main.pointer_dereference.[0-9]+\] dereference failure: deallocated dynamic object in \*s:
34+
^\[main.pointer_dereference.[0-9]+\] dereference failure: dead object in \*s:
35+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer outside dynamic object bounds in \*s:
36+
^\[main.pointer_dereference.[0-9]+\] dereference failure: pointer outside object bounds in \*s:
37+
--
38+
This test ensures that local_bitvector_analysis is correctly labelling obvious
39+
cases of pointers and that --pointer-check is not generating excess assertions.

0 commit comments

Comments
 (0)