File tree Expand file tree Collapse file tree 5 files changed +16
-16
lines changed
cbmc-primitives/pointer-offset-01
contracts/no_redudant_checks Expand file tree Collapse file tree 5 files changed +16
-16
lines changed Original file line number Diff line number Diff line change 44^EXIT=10$
55^SIGNAL=0$
66\[main.assertion.1\] line \d+ assertion __CPROVER_POINTER_OFFSET\(p\) >= 0: FAILURE
7- \[main.assertion.2\] line \d+ assertion __CPROVER_POINTER_OFFSET\(p\) < 0: FAILURE
7+ \[main.assertion.2\] line \d+ assertion __CPROVER_POINTER_OFFSET\(p\) < 0: SUCCESS
88--
99^warning: ignoring
1010--
11- Check that both positive and negative offsets can be chosen for uninitialized
12- pointers. We use --no-simplify and --no-propagation to ensure that the case is
13- not solved by the constant propagation and thus tests the constraint encoding.
11+ Check that positive offsets can be chosen for uninitialized pointers. We
12+ use --no-simplify and --no-propagation to ensure that the case is not solved
13+ by the constant propagation and thus tests the constraint encoding.
Original file line number Diff line number Diff line change 44^EXIT=10$
55^SIGNAL=0$
66\[main.assertion.1\] line \d+ assertion __CPROVER_POINTER_OFFSET\(p\) >= 0: FAILURE
7- \[main.assertion.2\] line \d+ assertion __CPROVER_POINTER_OFFSET\(p\) < 0: FAILURE
7+ \[main.assertion.2\] line \d+ assertion __CPROVER_POINTER_OFFSET\(p\) < 0: SUCCESS
88--
99^warning: ignoring
1010--
11- For uninitialised pointers, CBMC chooses a nondeterministic value (though no memory
12- is allocated). Since the offset of pointers is signed, negative offsets should be
13- able to be chosen (along with positive ones) non-deterministically.
14- `__CPROVER_POINTER_OFFSET` is the CBMC primitive that gets the pointer offset
15- from the base address of the object. This test guards this, and especially
16- against the case where we could only observe some cases where offsets were only
17- positive (in some CI configurations, for instance).
11+ For uninitialised pointers, CBMC chooses a nondeterministic value (though no
12+ memory is allocated). Since the offset of pointers is unsigned, negative
13+ offsets cannot be chosen. `__CPROVER_POINTER_OFFSET` is the CBMC primitive
14+ that gets the pointer offset from the base address of the object. This test
15+ guards this.
Original file line number Diff line number Diff line change 2323^\[main.pointer_arithmetic.15\].*: SUCCESS
2424^\[main.pointer_arithmetic.16\].*: SUCCESS
2525^\[main.pointer_arithmetic.17\].*: SUCCESS
26- ^\*\* 0 of 20 failed \(1 iterations\)
26+ ^\[main.pointer_arithmetic.18\].*: SUCCESS
27+ ^\*\* 0 of 21 failed \(1 iterations\)
2728^VERIFICATION SUCCESSFUL$
2829--
2930^\[main.overflow.\d+\].*: FAILURE
@@ -35,7 +36,7 @@ Checks that assertions generated by the first --pointer-overflow-check:
3536We expect 20 assertions to be generated:
3637In the goto-instrument run:
3738- 2 for using malloc
38- - 17 caused by --pointer-overflow-check
39+ - 18 caused by --pointer-overflow-check
3940
4041In the final cbmc run:
4142- 0 caused by --pointer-overflow-check
Original file line number Diff line number Diff line change @@ -43,7 +43,7 @@ void __CPROVER_loop_entry(const void *);
4343
4444// pointers
4545__CPROVER_size_t __CPROVER_POINTER_OBJECT (const void * );
46- __CPROVER_ssize_t __CPROVER_POINTER_OFFSET (const void * );
46+ __CPROVER_size_t __CPROVER_POINTER_OFFSET (const void * );
4747__CPROVER_size_t __CPROVER_OBJECT_SIZE (const void * );
4848__CPROVER_bool __CPROVER_DYNAMIC_OBJECT (const void * );
4949void __CPROVER_allocated_memory (__CPROVER_size_t address , __CPROVER_size_t extent );
Original file line number Diff line number Diff line change @@ -195,13 +195,14 @@ literalt bv_pointerst::convert_rest(const exprt &expr)
195195 if (same_object_lit.is_false ())
196196 return same_object_lit;
197197
198+ // The comparison is UNSIGNED, to match the type of pointer_offsett
198199 return prop.land (
199200 same_object_lit,
200201 bv_utils.rel (
201202 offset_bv0,
202203 expr.id (),
203204 offset_bv1,
204- bv_utilst::representationt::SIGNED ));
205+ bv_utilst::representationt::UNSIGNED ));
205206 }
206207 }
207208
You can’t perform that action at this time.
0 commit comments