|
41 | 41 | #include <goto-checker/multi_path_symex_checker.h>
|
42 | 42 | #include <goto-checker/multi_path_symex_only_checker.h>
|
43 | 43 | #include <goto-checker/properties.h>
|
| 44 | +#include <goto-checker/single_loop_incremental_symex_checker.h> |
44 | 45 | #include <goto-checker/single_path_symex_checker.h>
|
45 | 46 | #include <goto-checker/single_path_symex_only_checker.h>
|
46 | 47 | #include <goto-checker/stop_on_fail_verifier.h>
|
@@ -329,6 +330,29 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options)
|
329 | 330 | "max-node-refinement",
|
330 | 331 | cmdline.get_value("max-node-refinement"));
|
331 | 332 |
|
| 333 | + if(cmdline.isset("incremental-loop")) |
| 334 | + { |
| 335 | + options.set_option( |
| 336 | + "incremental-loop", cmdline.get_value("incremental-loop")); |
| 337 | + options.set_option("refine", true); |
| 338 | + options.set_option("refine-arrays", true); |
| 339 | + |
| 340 | + if(cmdline.isset("unwind-min")) |
| 341 | + options.set_option("unwind-min", cmdline.get_value("unwind-min")); |
| 342 | + |
| 343 | + if(cmdline.isset("unwind-max")) |
| 344 | + options.set_option("unwind-max", cmdline.get_value("unwind-max")); |
| 345 | + |
| 346 | + if(cmdline.isset("ignore-properties-before-unwind-min")) |
| 347 | + options.set_option("ignore-properties-before-unwind-min", true); |
| 348 | + |
| 349 | + if(cmdline.isset("paths")) |
| 350 | + { |
| 351 | + error() << "--paths not supported with --incremental-loop" << eom; |
| 352 | + exit(CPROVER_EXIT_USAGE_ERROR); |
| 353 | + } |
| 354 | + } |
| 355 | + |
332 | 356 | // SMT Options
|
333 | 357 |
|
334 | 358 | if(cmdline.isset("smt1"))
|
@@ -609,7 +633,22 @@ int cbmc_parse_optionst::doit()
|
609 | 633 |
|
610 | 634 | std::unique_ptr<goto_verifiert> verifier = nullptr;
|
611 | 635 |
|
612 |
| - if( |
| 636 | + if(options.is_set("incremental-loop")) |
| 637 | + { |
| 638 | + if(options.get_bool_option("stop-on-fail")) |
| 639 | + { |
| 640 | + verifier = util_make_unique< |
| 641 | + stop_on_fail_verifiert<single_loop_incremental_symex_checkert>>( |
| 642 | + options, ui_message_handler, goto_model); |
| 643 | + } |
| 644 | + else |
| 645 | + { |
| 646 | + verifier = util_make_unique<all_properties_verifier_with_trace_storaget< |
| 647 | + single_loop_incremental_symex_checkert>>( |
| 648 | + options, ui_message_handler, goto_model); |
| 649 | + } |
| 650 | + } |
| 651 | + else if( |
613 | 652 | options.get_bool_option("stop-on-fail") && options.get_bool_option("paths"))
|
614 | 653 | {
|
615 | 654 | verifier =
|
|
0 commit comments