Skip to content

Commit 24deb62

Browse files
Peter Schrammelpeterschrammel
Peter Schrammel
authored andcommitted
Incremental BMC
1 parent 01c44b0 commit 24deb62

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1749
-270
lines changed

regression/Makefile

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
DIRS = ansi-c cbmc cpp goto-instrument goto-instrument-unwind
1+
DIRS = ansi-c cbmc cpp goto-instrument goto-instrument-unwind \
2+
cbmc-incr-oneloop cbmc-incr cbmc-with-incr
23

34
test:
4-
$(foreach var,$(DIRS), $(MAKE) -C $(var) test || exit 1;)
5+
$(foreach var,$(DIRS), make -C $(var) test;)
6+
7+
clean:
8+
$(foreach var,$(DIRS), make -C $(var) clean;)

regression/array-refinement-with-incr/Array_UF9/main.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ unsigned int SIZE;
1111
int linear_search(int *a, int n, int q) {
1212
unsigned int j=0;
1313
while (j<n && a[j]!=q) {
14-
j;
14+
j++;
1515
if (j==20) j=-1;
1616
}
1717
if (j<SIZE) return 1;

regression/cbmc-incr-oneloop/unwind-forever1/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CORE
1+
THOROUGH
22
main.c
33
--incremental-check main.0
44
^EXIT=142$

regression/cbmc-incr-oneloop/unwind-forever2/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CORE
1+
THOROUGH
22
main.c
33
--incremental-check main.0
44
^EXIT=142$

regression/cbmc-incr-oneloop/unwinding-assertion1/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--unwind-max 10 --incremental-check main.0
3+
--unwind-max 10 --incremental-check main.0 --unwinding-assertions
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$

regression/cbmc-incr/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
default: tests.log
22

3-
PARAM = --incremental --magic-numbers
3+
PARAM = --incremental
44
# --refine --slice-formula
55

66
test:

regression/cbmc-incr/unwinding-assertion1/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--unwind-max 10
3+
--unwind-max 10 --unwinding-assertions
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$

regression/cbmc-with-incr/Free1/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--pointer-check
3+
--pointer-check --stop-on-fail
44
^EXIT=10$
55
^SIGNAL=0$
66
^Counterexample:$

regression/cbmc-with-incr/Free2/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--pointer-check
3+
--pointer-check --stop-on-fail
44
^EXIT=10$
55
^SIGNAL=0$
66
^Counterexample:$

regression/cbmc-with-incr/Free3/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--pointer-check
3+
--pointer-check --stop-on-fail
44
^SIGNAL=0$
55
^Counterexample:$
66
^VERIFICATION FAILED$

regression/cbmc-with-incr/Free4/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--pointer-check
3+
--pointer-check --stop-on-fail
44
^SIGNAL=0$
55
^Counterexample:$
66
^VERIFICATION FAILED$

regression/cbmc-with-incr/Function5/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--pointer-check --bounds-check
3+
--pointer-check --bounds-check --stop-on-fail
44
^SIGNAL=0$
55
^EXIT=10$
66
^Counterexample:$

regression/cbmc-with-incr/Multi_Dimensional_Array6/test.desc

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ main.c
33
--unwind-max 3 --no-unwinding-assertions --all-properties
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[main\.assertion\.1\] assertion matriz\[(signed long int)j\]\[(signed long int)k\] <= maior: OK$
7-
^\[main\.assertion\.2\] assertion matriz\[(signed long int)0\]\[(signed long int)0\] < maior: FAILED$
6+
^\[main\.assertion\.1\] assertion matriz\[(signed long int)j\]\[(signed long int)k\] <= maior:
7+
SUCCESS$
8+
^\[main\.assertion\.2\] assertion matriz\[(signed long int)0\]\[(signed long int)0\] < maior:
9+
FAILURE$
810
^\*\* 1 of 2 failed (2 iterations)$
911
--
1012
^warning: ignoring

regression/cbmc-with-incr/Overflow_Addition1/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--signed-overflow-check
3+
--signed-overflow-check --stop-on-fail
44
^SIGNAL=0$
55
^Counterexample:$
66
^VERIFICATION FAILED$

regression/cbmc-with-incr/Pointer_Arithmetic5/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--pointer-check --bounds-check --function f
3+
--pointer-check --bounds-check --function f --stop-on-fail
44
^SIGNAL=0$
55
^Counterexample:$
66
^VERIFICATION FAILED$

regression/cbmc-with-incr/Pointer_Arithmetic8/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--pointer-check --bounds-check
3+
--pointer-check --bounds-check --stop-on-fail
44
^SIGNAL=0$
55
^Counterexample:$
66
^VERIFICATION FAILED$

regression/cbmc-with-incr/Pointer_byte_extract2/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--all-properties --little-endian
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[main\.assertion\.2\] .*: FAILED$
6+
^\[main\.assertion\.2\] .*: FAILURE$
77
^\*\* 1 of 2 failed (2 iterations)$
88
--
99
^warning: ignoring

regression/cbmc-with-incr/Pointer_byte_extract5/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--all-properties --bounds-check --32
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[main\.array_bounds\.5\] array.List upper bound in .*: FAILED$
6+
^\[main\.array_bounds\.5\] array.List upper bound in .*: FAILURE$
77
^\*\* 1 of 9 failed (2 iterations)$
88
--
99
^warning: ignoring

regression/cbmc-with-incr/Pointer_byte_extract8/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--all-properties --bounds-check --32 --no-simplify
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main\.array_bounds\.5\] array.List upper bound: FAILED$
6+
^\[main\.array_bounds\.5\] array.List upper bound: FAILURE$
77
^\*\* 1 of 9 failed (2 iterations)$
88
--
99
^warning: ignoring

regression/cbmc-with-incr/String2/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--pointer-check --bounds-check
3+
--pointer-check --bounds-check --stop-on-fail
44
^EXIT=10$
55
^SIGNAL=0$
66
^Counterexample:$

regression/cbmc-with-incr/Undefined_Function1/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
3+
--stop-on-fail
44
^SIGNAL=0$
55
^\*\*\*\* WARNING: no body for function f$
66
^Counterexample:$

regression/cbmc-with-incr/pipe1/test.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--all-properties
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[main\.assertion\.4\] assertion data\[1\]==31: FAILED$
6+
^\[main\.assertion\.4\] assertion data\[1\]==31: FAILURE$
77
^\*\* 1 of 5 failed (2 iterations)$
88
--
99
^warning: ignoring

src/cbmc/Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ SRC = cbmc_main.cpp cbmc_parse_options.cpp bmc.cpp cbmc_dimacs.cpp \
22
cbmc_languages.cpp counterexample_beautification.cpp \
33
bv_cbmc.cpp symex_bmc.cpp show_vcc.cpp cbmc_solvers.cpp \
44
xml_interface.cpp bmc_cover.cpp all_properties.cpp \
5-
fault_localization.cpp
5+
symex_bmc_incremental_one_loop.cpp bmc_incremental_one_loop.cpp \
6+
symex_bmc_incremental.cpp bmc_incremental.cpp fault_localization.cpp
67

78
OBJ += ../ansi-c/ansi-c$(LIBEXT) \
89
../cpp/cpp$(LIBEXT) \

src/cbmc/all_properties.cpp

+14-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ safety_checkert::resultt bmc_all_propertiest::operator()()
9797
it!=bmc.equation.SSA_steps.end();
9898
it++)
9999
{
100-
if(it->is_assert())
100+
if(it->is_assert() &&
101+
it->comment!=SYMEX_CONTINUATION_CHECK)
101102
{
102103
irep_idt property_id;
103104

@@ -114,6 +115,9 @@ safety_checkert::resultt bmc_all_propertiest::operator()()
114115
else
115116
continue;
116117

118+
//need to convert again as the context of the expression
119+
// may have changed
120+
it->cond_literal=solver.convert(it->cond_expr);
117121
goal_map[property_id].instances.push_back(it);
118122
}
119123
}
@@ -122,6 +126,14 @@ safety_checkert::resultt bmc_all_propertiest::operator()()
122126

123127
cover_goalst cover_goals(solver);
124128

129+
//set activation literal for incremental checking
130+
cover_goals.activation_literal=bmc.equation.current_activation_literal();
131+
132+
#if 0
133+
std::cout << "cover_goals.activation_literal = "
134+
<< cover_goals.activation_literal << std::endl;
135+
#endif
136+
125137
cover_goals.set_message_handler(get_message_handler());
126138
cover_goals.register_observer(*this);
127139

@@ -137,6 +149,7 @@ safety_checkert::resultt bmc_all_propertiest::operator()()
137149

138150
bool error=false;
139151

152+
solver.set_assumptions(bmc.equation.activate_assertions);
140153
decision_proceduret::resultt result=cover_goals();
141154

142155
if(result==decision_proceduret::D_ERROR)

0 commit comments

Comments
 (0)