Skip to content

Commit fbb40a0

Browse files
committed
Add a test for the new preorder linearisation
when setting the order in which to initialise the variables from a snapshot. This test is designed to be failing slightly more often than the `dynamic-array-int` test by inserting extra variables in between the preordered ones. They cannot be named `array` because that irep-name already exists.
1 parent dc06c3b commit fbb40a0

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include <assert.h>
2+
#include <malloc.h>
3+
4+
int a;
5+
int *a1;
6+
int *iterator1;
7+
int *a2;
8+
int *a3;
9+
int *iterator2;
10+
int *a4;
11+
int *a5;
12+
int *iterator3;
13+
int *a6;
14+
int *a7;
15+
int *array2;
16+
int *a8;
17+
18+
void initialize()
19+
{
20+
array2 = (int *)malloc(sizeof(int) * 10);
21+
array2[0] = 1;
22+
array2[1] = 2;
23+
array2[2] = 3;
24+
array2[3] = 4;
25+
array2[4] = 5;
26+
array2[5] = 6;
27+
array2[6] = 7;
28+
array2[7] = 8;
29+
array2[8] = 9;
30+
array2[9] = 10;
31+
iterator1 = (int *)array2;
32+
iterator2 = &array2[1];
33+
iterator3 = array2 + 1;
34+
a1 = &a;
35+
a2 = a1;
36+
a3 = a2;
37+
a4 = a3;
38+
a5 = a4;
39+
a6 = a5;
40+
a7 = a6;
41+
a8 = a7;
42+
}
43+
44+
void checkpoint()
45+
{
46+
}
47+
48+
int main()
49+
{
50+
initialize();
51+
checkpoint();
52+
53+
assert(*iterator1 == 1);
54+
assert(iterator1 != iterator2);
55+
assert(iterator2 == iterator3);
56+
assert(iterator2 == &array2[1]);
57+
assert(*iterator3 == array2[1]);
58+
assert(*iterator3 == 2);
59+
iterator3 = &array2[9];
60+
iterator3++;
61+
assert(*iterator3 == 0);
62+
63+
return 0;
64+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
CORE
2+
main.c
3+
a,a1,iterator1,a2,a3,iterator2,a4,a5,iterator3,a6,a7,array2,a8 --harness-type initialise-with-memory-snapshot --initial-goto-location main:4
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
\[main.assertion.1\] line [0-9]+ assertion \*iterator1 == 1: SUCCESS
7+
\[main.assertion.2\] line [0-9]+ assertion iterator1 != iterator2: SUCCESS
8+
\[main.assertion.3\] line [0-9]+ assertion iterator2 == iterator3: SUCCESS
9+
\[main.assertion.4\] line [0-9]+ assertion iterator2 == \&array2\[1\]: SUCCESS
10+
\[main.assertion.5\] line [0-9]+ assertion \*iterator3 == array2\[1\]: SUCCESS
11+
\[main.assertion.6\] line [0-9]+ assertion \*iterator3 == 2: SUCCESS
12+
\[main.pointer_dereference.27\] line [0-9]+ dereference failure: pointer outside object bounds in \*iterator3: FAILURE
13+
\[main.assertion.7\] line [0-9]+ assertion \*iterator3 == 0: FAILURE
14+
VERIFICATION FAILED
15+
--
16+
unwinding assertion loop \d+: FAILURE

0 commit comments

Comments
 (0)