File tree Expand file tree Collapse file tree 6 files changed +104
-0
lines changed
regression/goto-instrument Expand file tree Collapse file tree 6 files changed +104
-0
lines changed Original file line number Diff line number Diff line change 1+ #include <assert.h>
2+
3+ volatile int a ;
4+ volatile int b ;
5+
6+ int model ()
7+ {
8+ int value ;
9+ __CPROVER_assume (value >= 0 );
10+ return value ;
11+ }
12+
13+ void main ()
14+ {
15+ assert (a == 0 );
16+
17+ assert (b >= 0 );
18+ assert (b == 0 );
19+ assert (b != 0 );
20+ }
Original file line number Diff line number Diff line change 1+ CORE
2+ test.c
3+ --nondet-volatile-model b:model
4+ \[main.assertion.1\] line \d+ assertion a == 0: SUCCESS
5+ \[main.assertion.2\] line \d+ assertion b >= 0: SUCCESS
6+ \[main.assertion.3\] line \d+ assertion b == 0: FAILURE
7+ \[main.assertion.4\] line \d+ assertion b != 0: FAILURE
8+ ^EXIT=10$
9+ ^SIGNAL=0$
10+ --
11+ --
12+ Checks that the read from b is modelled via the given model
Original file line number Diff line number Diff line change 1+ #include <assert.h>
2+
3+ volatile int a ;
4+ volatile int b ;
5+ volatile int c ;
6+
7+ int model ()
8+ {
9+ int value ;
10+ __CPROVER_assume (value >= 0 );
11+ return value ;
12+ }
13+
14+ void main ()
15+ {
16+ assert (a == 0 );
17+
18+ assert (b >= 0 );
19+ assert (b == 0 );
20+ assert (b != 0 );
21+
22+ assert (c >= 0 );
23+ assert (c == 0 );
24+ assert (c != 0 );
25+ }
Original file line number Diff line number Diff line change 1+ CORE
2+ test.c
3+ --nondet-volatile-variable b --nondet-volatile-model c:model
4+ \[main.assertion.1\] line \d+ assertion a == 0: SUCCESS
5+ \[main.assertion.2\] line \d+ assertion b >= 0: FAILURE
6+ \[main.assertion.3\] line \d+ assertion b == 0: FAILURE
7+ \[main.assertion.4\] line \d+ assertion b != 0: FAILURE
8+ \[main.assertion.5\] line \d+ assertion c >= 0: SUCCESS
9+ \[main.assertion.6\] line \d+ assertion c == 0: FAILURE
10+ \[main.assertion.7\] line \d+ assertion c != 0: FAILURE
11+ ^EXIT=10$
12+ ^SIGNAL=0$
13+ --
14+ --
15+ Checks that both options for selectively havocking/modelling volatile reads can
16+ be used together
Original file line number Diff line number Diff line change 1+ #include <assert.h>
2+
3+ volatile int a ;
4+ volatile int b ;
5+
6+ int model_a ()
7+ {
8+ return 1 ;
9+ }
10+
11+ int model_b ()
12+ {
13+ return 2 ;
14+ }
15+
16+ void main ()
17+ {
18+ int result = a + b ;
19+ assert (result == 3 );
20+ }
Original file line number Diff line number Diff line change 1+ CORE
2+ test.c
3+ --nondet-volatile-model a:model_a --nondet-volatile-model b:model_b
4+ \[main.assertion.1\] line \d+ assertion result == 3: SUCCESS
5+ ^EXIT=0$
6+ ^SIGNAL=0$
7+ VERIFICATION SUCCESSFUL
8+ --
9+ --
10+ Checks that two volatile reads in the same expression can both be modelled by
11+ given functions
You can’t perform that action at this time.
0 commit comments