From 9b34522313e0351d6a18556ba2e73555702e3332 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig <tautschn@amazon.com> Date: Sun, 17 May 2015 18:26:18 +0100 Subject: [PATCH] Slice with respect to select properties --- src/goto-instrument/full_slicer.cpp | 21 +++++++++++++ src/goto-instrument/full_slicer.h | 5 +++ src/goto-instrument/full_slicer_class.h | 31 +++++++++++++++++++ .../goto_instrument_parse_options.cpp | 9 +++++- .../goto_instrument_parse_options.h | 2 +- 5 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/goto-instrument/full_slicer.cpp b/src/goto-instrument/full_slicer.cpp index 6e261d3dbb0..e0741bc24cd 100644 --- a/src/goto-instrument/full_slicer.cpp +++ b/src/goto-instrument/full_slicer.cpp @@ -473,6 +473,27 @@ void full_slicer( /*******************************************************************\ +Function: property_slicer + + Inputs: + + Outputs: + + Purpose: + +\*******************************************************************/ + +void property_slicer( + goto_functionst &goto_functions, + const namespacet &ns, + const std::list<std::string> &properties) +{ + properties_criteriont p(properties); + full_slicert()(goto_functions, ns, p); +} + +/*******************************************************************\ + Function: slicing_criteriont::~slicing_criteriont Inputs: diff --git a/src/goto-instrument/full_slicer.h b/src/goto-instrument/full_slicer.h index 93225ba9880..c361c0ae49b 100644 --- a/src/goto-instrument/full_slicer.h +++ b/src/goto-instrument/full_slicer.h @@ -15,6 +15,11 @@ void full_slicer( goto_functionst &goto_functions, const namespacet &ns); +void property_slicer( + goto_functionst &goto_functions, + const namespacet &ns, + const std::list<std::string> &properties); + class slicing_criteriont { public: diff --git a/src/goto-instrument/full_slicer_class.h b/src/goto-instrument/full_slicer_class.h index 6074128112c..888eeab982d 100644 --- a/src/goto-instrument/full_slicer_class.h +++ b/src/goto-instrument/full_slicer_class.h @@ -118,4 +118,35 @@ class assert_criteriont:public slicing_criteriont } }; +class properties_criteriont:public slicing_criteriont +{ +public: + explicit properties_criteriont( + const std::list<std::string> &properties): + property_ids(properties) + { + } + + virtual bool operator()(goto_programt::const_targett target) + { + if(!target->is_assert()) + return false; + + const std::string &p_id= + id2string(target->source_location.get_property_id()); + + for(std::list<std::string>::const_iterator + it=property_ids.begin(); + it!=property_ids.end(); + ++it) + if(p_id==*it) + return true; + + return false; + } + +protected: + const std::list<std::string> &property_ids; +}; + #endif diff --git a/src/goto-instrument/goto_instrument_parse_options.cpp b/src/goto-instrument/goto_instrument_parse_options.cpp index 4fd004550e2..9578df5e63a 100644 --- a/src/goto-instrument/goto_instrument_parse_options.cpp +++ b/src/goto-instrument/goto_instrument_parse_options.cpp @@ -1216,6 +1216,9 @@ void goto_instrument_parse_optionst::instrument_goto_program() // add loop ids goto_functions.compute_loop_numbers(); + // label the assertions + label_properties(goto_functions); + // nondet volatile? if(cmdline.isset("nondet-volatile")) { @@ -1238,7 +1241,10 @@ void goto_instrument_parse_optionst::instrument_goto_program() symbol_table, goto_functions, cmdline.isset("pointer-check")); status() << "Performing a full slice" << eom; - full_slicer(goto_functions, ns); + if(cmdline.isset("property")) + property_slicer(goto_functions, ns, cmdline.get_values("property")); + else + full_slicer(goto_functions, ns); } // label the assertions @@ -1339,6 +1345,7 @@ void goto_instrument_parse_optionst::help() "Slicing:\n" " --reachability-slice slice away instructions that can't reach assertions\n" " --full-slice slice away instructions that don't affect assertions\n" + " --property id slice with respect to specific property only\n" "\n" "Further transformations:\n" " --constant-propagator propagate constants and simplify expressions\n" diff --git a/src/goto-instrument/goto_instrument_parse_options.h b/src/goto-instrument/goto_instrument_parse_options.h index e0b24cd1ee3..9ea0ead4fbe 100644 --- a/src/goto-instrument/goto_instrument_parse_options.h +++ b/src/goto-instrument/goto_instrument_parse_options.h @@ -49,7 +49,7 @@ Author: Daniel Kroening, kroening@kroening.com "(show-uninitialized)(show-locations)" \ "(full-slice)(reachability-slice)" \ "(inline)" \ - "(show-claims)(show-properties)" \ + "(show-claims)(show-properties)(property):" \ "(show-symbol-table)(show-points-to)(show-rw-set)" \ "(cav11)" \ "(show-natural-loops)(accelerate)(havoc-loops)" \