File tree Expand file tree Collapse file tree 9 files changed +107
-37
lines changed
assigns_validity_pointer_01
quantifiers-exists-ensures-enforce
quantifiers-exists-requires-enforce
quantifiers-forall-ensures-enforce
quantifiers-forall-requires-enforce Expand file tree Collapse file tree 9 files changed +107
-37
lines changed Original file line number Diff line number Diff line change 8
8
// bar
9
9
ASSERT \*foo::x > 0
10
10
IF ¬\(\*foo::x = 3\) THEN GOTO \d
11
- IF ¬\(.*0.* = NULL\) THEN GOTO \d
12
11
ASSIGN .*::tmp_if_expr := \(\*\(.*0.*\) = 5 \? true : false\)
13
12
ASSIGN .*::tmp_if_expr\$\d := .*::tmp_if_expr \? true : false
14
13
ASSUME .*::tmp_if_expr\$\d
@@ -23,4 +22,4 @@ Verification:
23
22
This test checks support for a NULL pointer that is assigned to by
24
23
a function (bar and baz). Both functions bar and baz are being replaced by
25
24
their function contracts, while the calling function foo is being checked
26
- (by enforcing it's function contracts).
25
+ (by enforcing its function contracts).
Original file line number Diff line number Diff line change @@ -15,10 +15,16 @@ int initialize(int *arr)
15
15
)
16
16
// clang-format on
17
17
{
18
- for (int i = 0 ; i < 10 ; i ++ )
19
- {
20
- arr [i ] = i ;
21
- }
18
+ arr [0 ] = 0 ;
19
+ arr [1 ] = 1 ;
20
+ arr [2 ] = 2 ;
21
+ arr [3 ] = 3 ;
22
+ arr [4 ] = 4 ;
23
+ arr [5 ] = 5 ;
24
+ arr [6 ] = 6 ;
25
+ arr [7 ] = 7 ;
26
+ arr [8 ] = 8 ;
27
+ arr [9 ] = 9 ;
22
28
23
29
return 0 ;
24
30
}
Original file line number Diff line number Diff line change @@ -7,10 +7,16 @@ int f1(int *arr)
7
7
})
8
8
// clang-format on
9
9
{
10
- for (int i = 0 ; i < 10 ; i ++ )
11
- {
12
- arr [i ] = i ;
13
- }
10
+ arr [0 ] = 0 ;
11
+ arr [1 ] = 1 ;
12
+ arr [2 ] = 2 ;
13
+ arr [3 ] = 3 ;
14
+ arr [4 ] = 4 ;
15
+ arr [5 ] = 5 ;
16
+ arr [6 ] = 6 ;
17
+ arr [7 ] = 7 ;
18
+ arr [8 ] = 8 ;
19
+ arr [9 ] = 9 ;
14
20
15
21
return 0 ;
16
22
}
@@ -24,10 +30,16 @@ int f2(int *arr)
24
30
})
25
31
// clang-format on
26
32
{
27
- for (int i = 0 ; i < 10 ; i ++ )
28
- {
29
- arr [i ] = 0 ;
30
- }
33
+ arr [0 ] = 0 ;
34
+ arr [1 ] = 1 ;
35
+ arr [2 ] = 2 ;
36
+ arr [3 ] = 3 ;
37
+ arr [4 ] = 4 ;
38
+ arr [5 ] = 5 ;
39
+ arr [6 ] = 6 ;
40
+ arr [7 ] = 7 ;
41
+ arr [8 ] = 8 ;
42
+ arr [9 ] = 9 ;
31
43
32
44
return 0 ;
33
45
}
Original file line number Diff line number Diff line change 1
1
#include <stdbool.h>
2
2
#include <stdlib.h>
3
3
4
- #define MAX_LEN 64
4
+ #define MAX_LEN 10
5
5
6
6
// clang-format off
7
7
bool f1 (int * arr , int len )
@@ -18,11 +18,27 @@ bool f1(int *arr, int len)
18
18
// clang-format on
19
19
{
20
20
bool found_four = false;
21
- for (int i = 0 ; i <= MAX_LEN ; i ++ )
22
- {
23
- if (i < len )
24
- found_four |= (arr [i ] == 4 );
25
- }
21
+ if (0 < len )
22
+ found_four |= (arr [0 ] == 4 );
23
+ if (1 < len )
24
+ found_four |= (arr [1 ] == 4 );
25
+ if (2 < len )
26
+ found_four |= (arr [2 ] == 4 );
27
+ if (3 < len )
28
+ found_four |= (arr [3 ] == 4 );
29
+ if (4 < len )
30
+ found_four |= (arr [4 ] == 4 );
31
+ if (5 < len )
32
+ found_four |= (arr [5 ] == 4 );
33
+ if (6 < len )
34
+ found_four |= (arr [6 ] == 4 );
35
+ if (7 < len )
36
+ found_four |= (arr [7 ] == 4 );
37
+ if (8 < len )
38
+ found_four |= (arr [8 ] == 4 );
39
+
40
+ if (9 < len )
41
+ found_four |= (arr [9 ] == 4 );
26
42
27
43
// clang-format off
28
44
return (len > 0 == > found_four );
Original file line number Diff line number Diff line change 1
1
#include <stdlib.h>
2
2
3
- #define MAX_LEN 16
3
+ #define MAX_LEN 10
4
4
5
5
// clang-format off
6
6
int f1 (int * arr , int len )
@@ -12,11 +12,27 @@ int f1(int *arr, int len)
12
12
})
13
13
// clang-format on
14
14
{
15
- for (int i = 0 ; i < MAX_LEN ; i ++ )
16
- {
17
- if (i < len )
18
- arr [i ] = 0 ;
19
- }
15
+ if (0 < len )
16
+ arr [0 ] = 0 ;
17
+ if (1 < len )
18
+ arr [1 ] = 0 ;
19
+ if (2 < len )
20
+ arr [2 ] = 0 ;
21
+ if (3 < len )
22
+ arr [3 ] = 0 ;
23
+ if (4 < len )
24
+ arr [4 ] = 0 ;
25
+ if (5 < len )
26
+ arr [5 ] = 0 ;
27
+ if (6 < len )
28
+ arr [6 ] = 0 ;
29
+ if (7 < len )
30
+ arr [7 ] = 0 ;
31
+ if (8 < len )
32
+ arr [8 ] = 0 ;
33
+ if (9 < len )
34
+ arr [9 ] = 0 ;
35
+
20
36
return 0 ;
21
37
}
22
38
Original file line number Diff line number Diff line change 4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
6
^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
7
- ^\[f1.\d+\] line \d+ Check that arr\[\(.*\)i \] is assignable: SUCCESS$
7
+ ^\[f1.\d+\] line \d+ Check that arr\[\(.*\)\d \] is assignable: SUCCESS$
8
8
^VERIFICATION SUCCESSFUL$
9
9
--
10
10
^warning: ignoring
11
+ ^\[f1.\d+\] line \d+ Check that arr\[\(.*\)\d\] is assignable: FAILURE$
11
12
--
12
13
The purpose of this test is to ensure that we can safely use __CPROVER_forall
13
14
within positive contexts (enforced ENSURES clauses).
Original file line number Diff line number Diff line change @@ -12,8 +12,16 @@ bool f1(int *arr)
12
12
// clang-format on
13
13
{
14
14
bool is_identity = true;
15
- for (int i = 0 ; i < 10 ; ++ i )
16
- is_identity &= (arr [i ] == i );
15
+ is_identity &= (arr [0 ] == 0 );
16
+ is_identity &= (arr [1 ] == 1 );
17
+ is_identity &= (arr [2 ] == 2 );
18
+ is_identity &= (arr [3 ] == 3 );
19
+ is_identity &= (arr [4 ] == 4 );
20
+ is_identity &= (arr [5 ] == 5 );
21
+ is_identity &= (arr [6 ] == 6 );
22
+ is_identity &= (arr [7 ] == 7 );
23
+ is_identity &= (arr [8 ] == 8 );
24
+ is_identity &= (arr [9 ] == 9 );
17
25
return is_identity ;
18
26
}
19
27
Original file line number Diff line number Diff line change @@ -11,10 +11,16 @@ int f1(int *arr)
11
11
})
12
12
// clang-format on
13
13
{
14
- for (int i = 0 ; i < 10 ; i ++ )
15
- {
16
- arr [i ] = i ;
17
- }
14
+ arr [0 ] = 0 ;
15
+ arr [1 ] = 1 ;
16
+ arr [2 ] = 2 ;
17
+ arr [3 ] = 3 ;
18
+ arr [4 ] = 4 ;
19
+ arr [5 ] = 5 ;
20
+ arr [6 ] = 6 ;
21
+ arr [7 ] = 7 ;
22
+ arr [8 ] = 8 ;
23
+ arr [9 ] = 9 ;
18
24
19
25
return 0 ;
20
26
}
Original file line number Diff line number Diff line change @@ -10,10 +10,16 @@ __CPROVER_assigns(__CPROVER_POINTER_OBJECT(arr))
10
10
)
11
11
// clang-format on
12
12
{
13
- for (int i = 0 ; i < 10 ; i ++ )
14
- {
15
- arr [i ] = i ;
16
- }
13
+ arr [0 ] = 0 ;
14
+ arr [1 ] = 1 ;
15
+ arr [2 ] = 2 ;
16
+ arr [3 ] = 3 ;
17
+ arr [4 ] = 4 ;
18
+ arr [5 ] = 5 ;
19
+ arr [6 ] = 6 ;
20
+ arr [7 ] = 7 ;
21
+ arr [8 ] = 8 ;
22
+ arr [9 ] = 9 ;
17
23
18
24
return 0 ;
19
25
}
You can’t perform that action at this time.
0 commit comments