本文整理汇总了C++中goto_functionst::update方法的典型用法代码示例。如果您正苦于以下问题:C++ goto_functionst::update方法的具体用法?C++ goto_functionst::update怎么用?C++ goto_functionst::update使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类goto_functionst
的用法示例。
在下文中一共展示了goto_functionst::update方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: stack_depth
void stack_depth(
symbol_tablet &symbol_table,
goto_functionst &goto_functions,
const int depth)
{
const symbol_exprt sym=add_stack_depth_symbol(symbol_table);
const exprt depth_expr(from_integer(depth, sym.type()));
Forall_goto_functions(f_it, goto_functions)
if(f_it->second.body_available &&
f_it->first!=CPROVER_PREFIX "initialize" &&
f_it->first!=ID_main)
stack_depth(f_it->second.body, sym, depth, depth_expr);
// initialize depth to 0
goto_functionst::function_mapt::iterator
i_it=goto_functions.function_map.find(CPROVER_PREFIX "initialize");
assert(i_it!=goto_functions.function_map.end());
goto_programt &init=i_it->second.body;
goto_programt::targett first=init.instructions.begin();
goto_programt::targett it=init.insert_before(first);
it->make_assignment();
it->code=code_assignt(sym, from_integer(0, sym.type()));
it->location=first->location;
it->function=first->function;
// update counters etc.
goto_functions.update();
}
示例2: nondet_static
void nondet_static(
const namespacet &ns,
goto_functionst &goto_functions)
{
nondet_static(ns, goto_functions, CPROVER_PREFIX "initialize");
// update counters etc.
goto_functions.update();
}
示例3: add_cegis_library
void add_cegis_library(symbol_tablet &st, goto_functionst &gf,
message_handlert &msg, const size_t num_vars, const size_t num_consts,
const size_t max_solution_size, const std::string &func_name)
{
add_execute_placeholder(st, func_name, cegis_execute_type());
std::set<irep_idt> functions;
functions.insert(func_name);
const std::string library_src(
get_cegis_library_text(num_vars, num_consts, max_solution_size,
func_name));
add_library(library_src, st, msg);
goto_convert(func_name, st, gf, msg);
gf.compute_loop_numbers();
gf.update();
set_init_values(st, gf);
}
示例4: skip_loops
bool skip_loops(
goto_functionst &goto_functions,
const std::string &loop_ids,
message_handlert &message_handler)
{
messaget message(message_handler);
loop_mapt loop_map;
if(parse_loop_ids(loop_ids, loop_map))
{
message.error() << "Failed to parse loop ids" << messaget::eom;
return true;
}
loop_mapt::const_iterator it=loop_map.begin();
Forall_goto_functions(f_it, goto_functions)
{
if(it==loop_map.end() || it->first<f_it->first)
break; // possible error handled below
else if(it->first==f_it->first)
{
if(skip_loops(f_it->second.body, it->second, message))
return true;
++it;
}
}
if(it!=loop_map.end())
{
message.error() << "No function " << it->first << " in goto program"
<< messaget::eom;
return true;
}
// update counters etc.
goto_functions.update();
return false;
}
示例5: process_goto_program
bool symex_parseoptionst::process_goto_program(
const optionst &options,
goto_functionst &goto_functions)
{
try
{
namespacet ns(symbol_table);
// do partial inlining
status() << "Partial Inlining" << eom;
goto_partial_inline(goto_functions, ns, ui_message_handler);
// add generic checks
status() << "Generic Property Instrumentation" << eom;
goto_check(ns, options, goto_functions);
// recalculate numbers, etc.
goto_functions.update();
// add loop ids
goto_functions.compute_loop_numbers();
// if we aim to cover, replace
// all assertions by false to prevent simplification
if(cmdline.isset("cover-assertions"))
make_assertions_false(goto_functions);
// show it?
if(cmdline.isset("show-loops"))
{
show_loop_ids(get_ui(), goto_functions);
return true;
}
// show it?
if(cmdline.isset("show-goto-functions"))
{
goto_functions.output(ns, std::cout);
return true;
}
}
catch(const char *e)
{
error(e);
return true;
}
catch(const std::string e)
{
error(e);
return true;
}
catch(int)
{
return true;
}
catch(std::bad_alloc)
{
error() << "Out of memory" << eom;
return true;
}
return false;
}
示例6: process_goto_program
bool cbmc_parseoptionst::process_goto_program(
const optionst &options,
goto_functionst &goto_functions)
{
try
{
namespacet ns(context);
if(cmdline.isset("string-abstraction"))
string_instrumentation(
context, get_message_handler(), goto_functions);
status("Function Pointer Removal");
remove_function_pointers(ns, goto_functions,
cmdline.isset("pointer-check"));
status("Partial Inlining");
// do partial inlining
goto_partial_inline(goto_functions, ns, ui_message_handler);
status("Generic Property Instrumentation");
// add generic checks
goto_check(ns, options, goto_functions);
if(cmdline.isset("string-abstraction"))
{
status("String Abstraction");
string_abstraction(context,
get_message_handler(), goto_functions);
}
// add failed symbols
// needs to be done before pointer analysis
add_failed_symbols(context);
if(cmdline.isset("pointer-check") ||
cmdline.isset("show-value-sets"))
{
status("Pointer Analysis");
value_set_analysist value_set_analysis(ns);
value_set_analysis(goto_functions);
// show it?
if(cmdline.isset("show-value-sets"))
{
show_value_sets(get_ui(), goto_functions, value_set_analysis);
return true;
}
status("Adding Pointer Checks");
// add pointer checks
pointer_checks(
goto_functions, context, options, value_set_analysis);
}
// recalculate numbers, etc.
goto_functions.update();
// add loop ids
goto_functions.compute_loop_numbers();
// if we aim to cover, replace
// all assertions by false to prevent simplification
if(cmdline.isset("cover-assertions"))
make_assertions_false(goto_functions);
// show it?
if(cmdline.isset("show-loops"))
{
show_loop_numbers(get_ui(), goto_functions);
return true;
}
// show it?
if(cmdline.isset("show-goto-functions"))
{
goto_functions.output(ns, std::cout);
return true;
}
}
catch(const char *e)
{
error(e);
return true;
}
catch(const std::string e)
{
error(e);
return true;
}
catch(int)
{
return true;
}
//.........这里部分代码省略.........
示例7: process_goto_program
bool cbmc_parse_optionst::process_goto_program(
const optionst &options,
goto_functionst &goto_functions)
{
try
{
namespacet ns(symbol_table);
// Remove inline assembler; this needs to happen before
// adding the library.
remove_asm(symbol_table, goto_functions);
// add the library
status() << "Adding CPROVER library ("
<< config.ansi_c.arch << ")" << eom;
link_to_library(symbol_table, goto_functions, ui_message_handler);
if(cmdline.isset("string-abstraction"))
string_instrumentation(
symbol_table, get_message_handler(), goto_functions);
// remove function pointers
status() << "Function Pointer Removal" << eom;
remove_function_pointers(symbol_table, goto_functions,
cmdline.isset("pointer-check"));
// full slice?
if(cmdline.isset("full-slice"))
{
status() << "Performing a full slice" << eom;
full_slicer(goto_functions, ns);
}
// do partial inlining
status() << "Partial Inlining" << eom;
goto_partial_inline(goto_functions, ns, ui_message_handler);
// remove returns, gcc vectors, complex
remove_returns(symbol_table, goto_functions);
remove_vector(symbol_table, goto_functions);
remove_complex(symbol_table, goto_functions);
// add generic checks
status() << "Generic Property Instrumentation" << eom;
goto_check(ns, options, goto_functions);
if(cmdline.isset("string-abstraction"))
{
status() << "String Abstraction" << eom;
string_abstraction(symbol_table,
get_message_handler(), goto_functions);
}
// add failed symbols
// needs to be done before pointer analysis
add_failed_symbols(symbol_table);
// recalculate numbers, etc.
goto_functions.update();
// add loop ids
goto_functions.compute_loop_numbers();
// if we aim to cover assertions, replace
// all assertions by false to prevent simplification
if(cmdline.isset("cover") &&
cmdline.get_value("cover")=="assertions")
make_assertions_false(goto_functions);
// show it?
if(cmdline.isset("show-loops"))
{
show_loop_ids(get_ui(), goto_functions);
return true;
}
// show it?
if(cmdline.isset("show-goto-functions"))
{
goto_functions.output(ns, std::cout);
return true;
}
}
catch(const char *e)
{
error() << e << eom;
return true;
}
catch(const std::string e)
{
error() << e << eom;
return true;
}
catch(int)
{
return true;
//.........这里部分代码省略.........
示例8: instrument_goto_program
void goto_fence_inserter_parse_optionst::instrument_goto_program(
goto_functionst &goto_functions)
{
optionst options;
// unwind loops
if(cmdline.isset("unwind"))
{
status() << "Unwinding loops" << eom;
options.set_option("unwind", cmdline.get_value("unwind"));
}
// we add the library, as some analyses benefit
status() << "Adding CPROVER library" << eom;
link_to_library(symbol_table, goto_functions, ui_message_handler);
namespacet ns(symbol_table);
if( cmdline.isset("mm")
|| cmdline.isset("all-shared")
|| cmdline.isset("volatile")
|| cmdline.isset("pensieve")
|| cmdline.isset("naive")
|| cmdline.isset("all-shared-aeg") )
{
if(cmdline.isset("remove-function-pointers"))
{
status() << "remove soundly function pointers" << eom;
remove_function_pointers(symbol_table, goto_functions,
cmdline.isset("pointer-check"));
}
if(cmdline.isset("async"))
{
status() << "Replace pthread_creates by __CPROVER_ASYNC_0:" << eom;
replace_async(ns, goto_functions);
goto_functions.update();
}
// do partial inlining
status() << "Partial Inlining" << eom;
goto_partial_inline(goto_functions, ns, ui_message_handler);
if(cmdline.isset("const-function-pointer-propagation"))
{
/* propagate const pointers to functions */
status() << "Propagate Constant Function Pointers" << eom;
propagate_const_function_pointers(symbol_table, goto_functions,
get_message_handler());
}
// goto_functions.output(ns, std::cout);
// return;
#if 0
status() << "Function Pointer Removal" << eom;
remove_function_pointers(symbol_table, goto_functions,
cmdline.isset("pointer-check"));
#endif
#if 0
// do partial inlining
status() << "Partial Inlining" << eom;
goto_partial_inline(goto_functions, ns, ui_message_handler);
#endif
status() << "Pointer Analysis" << eom;
#ifdef POINTER_ANALYSIS_FI
value_set_analysis_fit value_set_analysis(ns);
#else
value_set_analysist value_set_analysis(ns);
#endif
#ifndef LOCAL_MAY
value_set_analysis(goto_functions);
#endif
status() << "Removing asm code" << eom;
remove_asm(symbol_table, goto_functions);
goto_functions.update();
if(cmdline.isset("all-shared"))
{
status() << "Shared variables accesses detection" << eom;
fence_all_shared(get_message_handler(), value_set_analysis, symbol_table,
goto_functions);
// simple analysis, coupled with script to insert;
// does not transform the goto-binary
return;
}
if(cmdline.isset("all-shared-aeg"))
{
status() << "Shared variables accesses detection (CF)" << eom;
fence_all_shared_aeg(get_message_handler(), value_set_analysis,
symbol_table, goto_functions);
// simple analysis, coupled with script to insert;
// does not transform the goto-binary
return;
}
else if(cmdline.isset("volatile"))
//.........这里部分代码省略.........