diff --git a/.gitignore b/.gitignore index c10ff2decde..7cbe1dcb4dd 100644 --- a/.gitignore +++ b/.gitignore @@ -96,6 +96,8 @@ src/memory-models/mm_y.tab.h # binaries src/cbmc/cbmc src/cbmc/cbmc.exe +src/ccover/ccover +src/ccover/ccover.exe src/goto-analyzer/goto-analyzer src/goto-analyzer/goto-analyzer.exe src/goto-cc/goto-cc diff --git a/CMakeLists.txt b/CMakeLists.txt index fea650dbac1..8e844c398ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,8 @@ set_target_properties( big-int cbmc cbmc-lib + ccover + ccover-lib cpp driver goto-analyzer diff --git a/jbmc/src/jbmc/Makefile b/jbmc/src/jbmc/Makefile index ab8c2c962aa..32a1b8d4681 100644 --- a/jbmc/src/jbmc/Makefile +++ b/jbmc/src/jbmc/Makefile @@ -40,7 +40,6 @@ OBJ += ../$(CPROVER_DIR)/src/ansi-c/ansi-c$(LIBEXT) \ ../$(CPROVER_DIR)/src/json/json$(LIBEXT) \ ../$(CPROVER_DIR)/src/cbmc/all_properties$(OBJEXT) \ ../$(CPROVER_DIR)/src/cbmc/bmc$(OBJEXT) \ - ../$(CPROVER_DIR)/src/cbmc/bmc_cover$(OBJEXT) \ ../$(CPROVER_DIR)/src/cbmc/bv_cbmc$(OBJEXT) \ ../$(CPROVER_DIR)/src/cbmc/cbmc_dimacs$(OBJEXT) \ ../$(CPROVER_DIR)/src/cbmc/cbmc_solvers$(OBJEXT) \ diff --git a/jbmc/src/jbmc/jbmc_parse_options.cpp b/jbmc/src/jbmc/jbmc_parse_options.cpp index a4474d1edd5..8173c707693 100644 --- a/jbmc/src/jbmc/jbmc_parse_options.cpp +++ b/jbmc/src/jbmc/jbmc_parse_options.cpp @@ -121,9 +121,6 @@ void jbmc_parse_optionst::get_command_line_options(optionst &options) if(cmdline.isset("show-vcc")) options.set_option("show-vcc", true); - if(cmdline.isset("cover")) - parse_cover_options(cmdline, options); - if(cmdline.isset("nondet-static")) options.set_option("nondet-static", true); @@ -189,14 +186,9 @@ void jbmc_parse_optionst::get_command_line_options(optionst &options) options.set_option("assumptions", false); // generate unwinding assertions - if(cmdline.isset("cover")) - options.set_option("unwinding-assertions", false); - else - { - options.set_option( - "unwinding-assertions", - cmdline.isset("unwinding-assertions")); - } + options.set_option( + "unwinding-assertions", + cmdline.isset("unwinding-assertions")); // generate unwinding assumptions otherwise options.set_option( @@ -916,17 +908,9 @@ bool jbmc_parse_optionst::process_goto_functions( remove_unused_functions(goto_model, get_message_handler()); } - // remove skips such that trivial GOTOs are deleted and not considered - // for coverage annotation: + // remove skips such that trivial GOTOs are deleted remove_skip(goto_model); - // instrument cover goals - if(cmdline.isset("cover")) - { - if(instrument_cover_goals(options, goto_model, get_message_handler())) - return true; - } - // label the assertions // This must be done after adding assertions and // before using the argument of the "property" option. @@ -970,7 +954,7 @@ bool jbmc_parse_optionst::process_goto_functions( full_slicer(goto_model); } - // remove any skips introduced since coverage instrumentation + // remove any skips remove_skip(goto_model); } @@ -1079,7 +1063,6 @@ void jbmc_parse_optionst::help() " --no-assertions ignore user assertions\n" " --no-assumptions ignore user assumptions\n" " --error-label label check that label is unreachable\n" - " --cover CC create test-suite with coverage criterion CC\n" // NOLINT(*) " --mm MM memory consistency model for concurrent programs\n" // NOLINT(*) HELP_REACHABILITY_SLICER " --full-slice run full slicer (experimental)\n" // NOLINT(*) diff --git a/regression/cbmc-cover/Makefile b/regression/cbmc-cover/Makefile index 486a8c750f7..f2c4e334c5a 100644 --- a/regression/cbmc-cover/Makefile +++ b/regression/cbmc-cover/Makefile @@ -1,10 +1,10 @@ default: tests.log test: - @../test.pl -p -c ../../../src/cbmc/cbmc + @../test.pl -p -c ../../../src/ccover/ccover tests.log: ../test.pl - @../test.pl -p -c ../../../src/cbmc/cbmc + @../test.pl -p -c ../../../src/ccover/ccover show: @for dir in *; do \ diff --git a/regression/ccover/Makefile b/regression/ccover/Makefile new file mode 100644 index 00000000000..6ecfb9d1c97 --- /dev/null +++ b/regression/ccover/Makefile @@ -0,0 +1,19 @@ +default: tests.log + +test: + @../test.pl -p -c ../../../src/ccover/ccover -X smt-backend + +tests.log: ../test.pl + @../test.pl -p -c ../../../src/ccover/ccover -X smt-backend + +show: + @for dir in *; do \ + if [ -d "$$dir" ]; then \ + vim -o "$$dir/*.c" "$$dir/*.out"; \ + fi; \ + done; + +clean: + find -name '*.out' -execdir $(RM) '{}' \; + find -name '*.gb' -execdir $(RM) '{}' \; + $(RM) tests.log diff --git a/regression/cbmc/pointer-function-parameters-2/main.c b/regression/ccover/pointer-function-parameters-2/main.c similarity index 100% rename from regression/cbmc/pointer-function-parameters-2/main.c rename to regression/ccover/pointer-function-parameters-2/main.c diff --git a/regression/cbmc/pointer-function-parameters-2/test.desc b/regression/ccover/pointer-function-parameters-2/test.desc similarity index 100% rename from regression/cbmc/pointer-function-parameters-2/test.desc rename to regression/ccover/pointer-function-parameters-2/test.desc diff --git a/regression/cbmc/pointer-function-parameters/main.c b/regression/ccover/pointer-function-parameters/main.c similarity index 100% rename from regression/cbmc/pointer-function-parameters/main.c rename to regression/ccover/pointer-function-parameters/main.c diff --git a/regression/cbmc/pointer-function-parameters/test.desc b/regression/ccover/pointer-function-parameters/test.desc similarity index 100% rename from regression/cbmc/pointer-function-parameters/test.desc rename to regression/ccover/pointer-function-parameters/test.desc diff --git a/regression/cbmc/reachability-slice/test.c b/regression/ccover/reachability-slice/test.c similarity index 100% rename from regression/cbmc/reachability-slice/test.c rename to regression/ccover/reachability-slice/test.c diff --git a/regression/cbmc/reachability-slice/test.desc b/regression/ccover/reachability-slice/test.desc similarity index 100% rename from regression/cbmc/reachability-slice/test.desc rename to regression/ccover/reachability-slice/test.desc diff --git a/regression/cbmc/reachability-slice/test2.desc b/regression/ccover/reachability-slice/test2.desc similarity index 100% rename from regression/cbmc/reachability-slice/test2.desc rename to regression/ccover/reachability-slice/test2.desc diff --git a/regression/cbmc/reachability-slice/test3.desc b/regression/ccover/reachability-slice/test3.desc similarity index 100% rename from regression/cbmc/reachability-slice/test3.desc rename to regression/ccover/reachability-slice/test3.desc diff --git a/regression/cbmc/simple_assert/main.c b/regression/ccover/simple_assert/main.c similarity index 100% rename from regression/cbmc/simple_assert/main.c rename to regression/ccover/simple_assert/main.c diff --git a/regression/cbmc/simple_assert/test.desc b/regression/ccover/simple_assert/test.desc similarity index 100% rename from regression/cbmc/simple_assert/test.desc rename to regression/ccover/simple_assert/test.desc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4022889e456..6111649f6de 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -97,6 +97,7 @@ add_subdirectory(util) add_subdirectory(xmllang) add_subdirectory(cbmc) +add_subdirectory(ccover) add_subdirectory(goto-cc) add_subdirectory(goto-instrument) add_subdirectory(goto-analyzer) diff --git a/src/Makefile b/src/Makefile index a75535d49bc..beffa777260 100644 --- a/src/Makefile +++ b/src/Makefile @@ -3,6 +3,7 @@ DIRS = analyses \ assembler \ big-int \ cbmc \ + ccover \ cpp \ goto-analyzer \ goto-cc \ @@ -21,6 +22,7 @@ DIRS = analyses \ # Empty last line all: cbmc.dir \ + ccover.dir \ goto-analyzer.dir \ goto-cc.dir \ goto-diff.dir \ @@ -53,6 +55,8 @@ cbmc.dir: languages solvers.dir goto-symex.dir analyses.dir \ pointer-analysis.dir goto-programs.dir linking.dir \ goto-instrument.dir +ccover.dir: cbmc.dir + goto-analyzer.dir: languages analyses.dir goto-programs.dir linking.dir \ json.dir goto-instrument.dir diff --git a/src/cbmc/Makefile b/src/cbmc/Makefile index e1045b7bc9c..78d57081039 100644 --- a/src/cbmc/Makefile +++ b/src/cbmc/Makefile @@ -1,6 +1,5 @@ SRC = all_properties.cpp \ bmc.cpp \ - bmc_cover.cpp \ bv_cbmc.cpp \ cbmc_dimacs.cpp \ cbmc_languages.cpp \ diff --git a/src/cbmc/bmc.cpp b/src/cbmc/bmc.cpp index 0fbc50aaa15..2b096a33135 100644 --- a/src/cbmc/bmc.cpp +++ b/src/cbmc/bmc.cpp @@ -380,12 +380,6 @@ safety_checkert::resultt bmct::execute( return safety_checkert::resultt::SAFE; // to indicate non-error } - if(!options.get_list_option("cover").empty()) - { - return cover(goto_functions)? - safety_checkert::resultt::ERROR:safety_checkert::resultt::SAFE; - } - if(options.get_option("localize-faults")!="") { fault_localizationt fault_localization( diff --git a/src/cbmc/bmc.h b/src/cbmc/bmc.h index 8e812e8e1da..1068e5ff066 100644 --- a/src/cbmc/bmc.h +++ b/src/cbmc/bmc.h @@ -223,12 +223,7 @@ class bmct:public safety_checkert void slice(); void show(); - bool cover(const goto_functionst &goto_functions); - friend class bmc_all_propertiest; - friend class bmc_covert; - template