Skip to content

Commit b856541

Browse files
Merge pull request #141 from viktormalik/generic-solvers
Generic abstract domains and strategy solvers
2 parents 615a853 + 90c3c63 commit b856541

File tree

114 files changed

+2667
-5655
lines changed

Some content is hidden

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

114 files changed

+2667
-5655
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
sll_min.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$

regression/heap-data/cart/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
THOROUGH
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
THOROUGH
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
KNOWNBUG
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-values-refine
3+
--heap --values-refine
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-interval --no-propagation
3+
--heap --intervals --no-propagation
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$

regression/heap/list_false/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-interval --no-propagation
3+
--heap --intervals --no-propagation
44
^EXIT=5$
55
^SIGNAL=0$
66
^VERIFICATION INCONCLUSIVE$

regression/heap/list_false_kind/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-interval --no-propagation --k-induction
3+
--heap --intervals --no-propagation --k-induction
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$

regression/heap/simple_false/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-interval --no-propagation
3+
--heap --intervals --no-propagation
44
^EXIT=5$
55
^SIGNAL=0$
66
^VERIFICATION INCONCLUSIVE$

regression/heap/simple_false_kind/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-interval --no-propagation --k-induction
3+
--heap --intervals --no-propagation --k-induction
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$

regression/heap/sll_simple/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap --no-propagation --heap-interval
3+
--heap --no-propagation --intervals
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-interval --pointer-check --no-assertions
3+
--heap --intervals --pointer-check --no-assertions
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$

regression/memsafety/built_from_end_false/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-interval --pointer-check --no-assertions --k-induction
3+
--heap --intervals --pointer-check --no-assertions --k-induction
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$

regression/memsafety/simple_false/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-interval --pointer-check --k-induction
3+
--heap --intervals --pointer-check --k-induction
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
main.c
3-
--heap-interval --pointer-check --no-assertions
3+
--heap --intervals --pointer-check --no-assertions
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$

src/2ls/2ls_parse_options.cpp

Lines changed: 66 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -162,55 +162,78 @@ void twols_parse_optionst::get_command_line_options(optionst &options)
162162

163163
if(cmdline.isset("havoc"))
164164
options.set_option("havoc", true);
165-
else if(cmdline.isset("equalities"))
166-
{
167-
options.set_option("equalities", true);
168-
options.set_option("std-invariants", true);
169-
}
170-
else if(cmdline.isset("heap"))
171-
{
172-
options.set_option("heap", true);
173-
}
174-
else if(cmdline.isset("heap-interval"))
175-
{
176-
options.set_option("heap-interval", true);
177-
if(cmdline.isset("sympath"))
178-
options.set_option("sympath", true);
179-
}
180-
else if(cmdline.isset("heap-zones"))
181-
{
182-
options.set_option("heap-zones", true);
183-
if(cmdline.isset("sympath"))
184-
options.set_option("sympath", true);
185-
}
186-
else if(cmdline.isset("heap-values-refine"))
187-
{
188-
options.set_option("heap-values-refine", true);
189-
options.set_option("heap-interval", true);
190-
if(cmdline.isset("sympath"))
191-
options.set_option("sympath", true);
192-
}
193165
else
194166
{
195-
if(cmdline.isset("zones"))
167+
// Options for using simple domains
168+
optionst::value_listt simple_domains;
169+
if(cmdline.isset("equalities"))
170+
{
171+
options.set_option("equalities", true);
172+
options.set_option("std-invariants", true);
173+
simple_domains.push_back("equalities");
174+
}
175+
if(cmdline.isset("heap"))
176+
{
177+
options.set_option("heap", true);
178+
simple_domains.push_back("heap");
179+
}
180+
181+
// Choose only a single value domain
182+
if(cmdline.isset("values-refine"))
183+
{
184+
options.set_option("values-refine", true);
185+
options.set_option("intervals", true);
186+
simple_domains.push_back("intervals");
187+
}
188+
else if(cmdline.isset("zones"))
189+
{
196190
options.set_option("zones", true);
191+
simple_domains.push_back("zones");
192+
}
197193
else if(cmdline.isset("qzones"))
194+
{
198195
options.set_option("qzones", true);
196+
simple_domains.push_back("qzones");
197+
}
199198
else if(cmdline.isset("octagons"))
199+
{
200200
options.set_option("octagons", true);
201-
else // if(cmdline.isset("intervals")) // default
201+
simple_domains.push_back("octagons");
202+
}
203+
else if(cmdline.isset("intervals"))
204+
{
205+
options.set_option("intervals", true);
206+
simple_domains.push_back("intervals");
207+
}
208+
209+
// If no simple domains are specified, use intervals
210+
if(simple_domains.empty())
211+
{
202212
options.set_option("intervals", true);
213+
simple_domains.push_back("intervals");
214+
}
215+
216+
// TODO: due to various modifications of options during verification
217+
// (e.g. in summary_checker_ait or in handle_special_functions), it is not
218+
// possible to rely on the content of this option.
219+
options.set_option("simple-domains", simple_domains);
203220

204-
if(cmdline.isset("enum-solver"))
205-
options.set_option("enum-solver", true);
206-
else // if(cmdline.isset("binsearch-solver")) // default
207-
options.set_option("binsearch-solver", true);
221+
if(options.get_bool_option("values-refine") ||
222+
options.get_bool_option("zones") ||
223+
options.get_bool_option("qzones") ||
224+
options.get_bool_option("octagons") ||
225+
options.get_bool_option("intervals"))
226+
{
227+
// Choose solver for numerical domains
228+
if(cmdline.isset("enum-solver"))
229+
options.set_option("enum-solver", true);
230+
else // if(cmdline.isset("binsearch-solver")) // default
231+
options.set_option("binsearch-solver", true);
232+
}
208233
}
209234

210-
if(cmdline.isset("heap") ||
211-
cmdline.isset("heap-interval") ||
212-
cmdline.isset("heap-zones") ||
213-
cmdline.isset("heap-values-refine"))
235+
// Heap domain requires full program inlining and usage of symbolic paths
236+
if(cmdline.isset("heap"))
214237
{
215238
options.set_option("inline", true);
216239
options.set_option("sympath", true);
@@ -379,14 +402,6 @@ int twols_parse_optionst::doit()
379402
return 6;
380403

381404
const namespacet ns(goto_model.symbol_table);
382-
ssa_heap_analysist heap_analysis(ns);
383-
if((options.get_bool_option("heap") ||
384-
options.get_bool_option("heap-interval")) &&
385-
!options.get_bool_option("inline"))
386-
{
387-
heap_analysis(goto_model.goto_functions);
388-
add_dynamic_object_symbols(heap_analysis, goto_model);
389-
}
390405

391406
if(cmdline.isset("show-stats"))
392407
{
@@ -403,7 +418,6 @@ int twols_parse_optionst::doit()
403418
show_ssa(
404419
goto_model,
405420
options,
406-
heap_analysis,
407421
function,
408422
simplify,
409423
std::cout,
@@ -551,18 +565,18 @@ int twols_parse_optionst::doit()
551565
if(!options.get_bool_option("k-induction") &&
552566
!options.get_bool_option("incremental-bmc"))
553567
checker=std::unique_ptr<summary_checker_baset>(
554-
new summary_checker_ait(options, heap_analysis));
568+
new summary_checker_ait(options));
555569
if(options.get_bool_option("k-induction") &&
556570
!options.get_bool_option("incremental-bmc"))
557571
checker=std::unique_ptr<summary_checker_baset>(
558-
new summary_checker_kindt(options, heap_analysis));
572+
new summary_checker_kindt(options));
559573
if(!options.get_bool_option("k-induction") &&
560574
options.get_bool_option("incremental-bmc"))
561575
checker=std::unique_ptr<summary_checker_baset>(
562-
new summary_checker_bmct(options, heap_analysis));
576+
new summary_checker_bmct(options));
563577
if(options.get_bool_option("nontermination"))
564578
checker=std::unique_ptr<summary_checker_baset>(
565-
new summary_checker_nontermt(options, heap_analysis));
579+
new summary_checker_nontermt(options));
566580

567581
checker->set_message_handler(get_message_handler());
568582
checker->simplify=!cmdline.isset("no-simplify");
@@ -1561,11 +1575,7 @@ void twols_parse_optionst::help()
15611575
" --heap use heap domain\n"
15621576
" --zones use zone domain\n"
15631577
" --octagons use octagon domain\n"
1564-
" --heap-interval use heap domain with interval domain for\n"
1565-
" values\n"
1566-
" --heap-zones use heap domain with zones domain for values\n" // NOLINT(*)
1567-
" --heap-values-refine use heap domain with a dynamic refinement\n"
1568-
" of strength of the value domain\n"
1578+
" --values-refine use dynamic refinement of strength of the value domain\n" // NOLINT(*)
15691579
" --sympath compute invariant for each symbolic path\n"
15701580
" (only usable with --heap-* switches)\n"
15711581
" --enum-solver use solver based on model enumeration\n"

src/2ls/2ls_parse_options.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@ class optionst;
4747
"(octagons)" \
4848
"(equalities)" \
4949
"(heap)" \
50-
"(heap-interval)" \
51-
"(heap-zones)" \
52-
"(heap-values-refine)" \
50+
"(values-refine)" \
5351
"(sympath)" \
5452
"(enum-solver)(binsearch-solver)(arrays)"\
5553
"(string-abstraction)(no-arch)(arch):(floatbv)(fixedbv)" \
@@ -192,9 +190,6 @@ class twols_parse_optionst:
192190
void remove_loops_in_entry(goto_modelt &goto_model);
193191
void create_dynamic_objects(goto_modelt &goto_model);
194192
void add_dynamic_object_rec(exprt &expr, symbol_tablet &symbol_table);
195-
void add_dynamic_object_symbols(
196-
const ssa_heap_analysist &heap_analysis,
197-
goto_modelt &goto_model);
198193
void split_same_symbolic_object_assignments(goto_modelt &goto_model);
199194
void remove_dead_goto(goto_modelt &goto_model);
200195
void compute_dynobj_instances(

src/2ls/dynamic_cfg.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Author: Peter Schrammel
1414

1515
#include <util/std_expr.h>
1616
#include <util/graph.h>
17+
#include <util/i2string.h>
1718
#include <goto-programs/goto_program.h>
1819

1920
#include <ssa/ssa_unwinder.h>

src/2ls/horn_encoding.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ void horn_encodingt::translate(
6363
";\n";
6464

6565
// compute SSA
66-
ssa_heap_analysist heap_analysis(ns);
67-
local_SSAt local_SSA(f_it->second, ns, options, heap_analysis, "");
66+
local_SSAt local_SSA(f_it->second, ns, options, "");
6867

6968
const goto_programt &body=f_it->second.body;
7069

0 commit comments

Comments
 (0)