void symex_target_equationt::assignment( const exprt &guard, const ssa_exprt &ssa_lhs, const exprt &ssa_full_lhs, const exprt &original_full_lhs, const exprt &ssa_rhs, const sourcet &source, assignment_typet assignment_type) { assert(ssa_lhs.is_not_nil()); SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=guard; SSA_step.ssa_lhs=ssa_lhs; SSA_step.ssa_full_lhs=ssa_full_lhs; SSA_step.original_full_lhs=original_full_lhs; SSA_step.ssa_rhs=ssa_rhs; SSA_step.assignment_type=assignment_type; SSA_step.cond_expr=equal_exprt(SSA_step.ssa_lhs, SSA_step.ssa_rhs); SSA_step.type=goto_trace_stept::ASSIGNMENT; SSA_step.hidden=(assignment_type!=STATE && assignment_type!=VISIBLE_ACTUAL_PARAMETER); SSA_step.source=source; merge_ireps(SSA_step); }
void symex_target_equationt::assignment( const guardt &guard, const symbol_exprt &ssa_lhs, const symbol_exprt &original_lhs_object, const exprt &ssa_full_lhs, const exprt &original_full_lhs, const exprt &ssa_rhs, const sourcet &source, assignment_typet assignment_type) { assert(ssa_lhs.is_not_nil()); SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard_expr=guard.as_expr(); SSA_step.ssa_lhs=ssa_lhs; SSA_step.original_lhs_object=original_lhs_object; SSA_step.ssa_full_lhs=ssa_full_lhs; SSA_step.original_full_lhs=original_full_lhs; SSA_step.ssa_rhs=ssa_rhs; SSA_step.assignment_type=assignment_type; SSA_step.cond_expr=equal_exprt(SSA_step.ssa_lhs, SSA_step.ssa_rhs); SSA_step.type=goto_trace_stept::ASSIGNMENT; SSA_step.source=source; }
void symex_target_equationt::decl( const exprt &guard, const ssa_exprt &ssa_lhs, const sourcet &source, assignment_typet assignment_type) { assert(ssa_lhs.is_not_nil()); SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=guard; SSA_step.ssa_lhs=ssa_lhs; SSA_step.ssa_full_lhs=ssa_lhs; SSA_step.original_full_lhs=ssa_lhs.get_original_expr(); SSA_step.type=goto_trace_stept::DECL; SSA_step.source=source; SSA_step.hidden=(assignment_type!=STATE); // the condition is trivially true, and only // there so we see the symbols SSA_step.cond_expr=equal_exprt(SSA_step.ssa_lhs, SSA_step.ssa_lhs); merge_ireps(SSA_step); }
void symex_target_equationt::location( const guardt &guard, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard_expr=guard.as_expr(); SSA_step.type=goto_trace_stept::LOCATION; SSA_step.source=source; }
void symex_target_equationt::function_return( const guardt &guard, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard_expr=guard.as_expr(); SSA_step.type=goto_trace_stept::FUNCTION_RETURN; SSA_step.source=source; }
void symex_target_equationt::spawn( const exprt &guard, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=guard; SSA_step.type=goto_trace_stept::SPAWN; SSA_step.source=source; merge_ireps(SSA_step); }
void symex_target_equationt::memory_barrier( const exprt &guard, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=guard; SSA_step.type=goto_trace_stept::MEMORY_BARRIER; SSA_step.source=source; merge_ireps(SSA_step); }
void symex_target_equationt::function_call( const guardt &guard, const irep_idt &identifier, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard_expr=guard.as_expr(); SSA_step.type=goto_trace_stept::FUNCTION_CALL; SSA_step.source=source; SSA_step.identifier=identifier; }
void symex_target_equationt::assumption( const guardt &guard, const exprt &cond, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard_expr=guard.as_expr(); SSA_step.cond_expr=cond; SSA_step.type=goto_trace_stept::ASSUME; SSA_step.source=source; }
void symex_target_equationt::atomic_end( const exprt &guard, unsigned atomic_section_id, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=guard; SSA_step.type=goto_trace_stept::ATOMIC_END; SSA_step.atomic_section_id=atomic_section_id; SSA_step.source=source; merge_ireps(SSA_step); }
void symex_target_equationt::goto_instruction( const exprt &guard, const exprt &cond, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=guard; SSA_step.cond_expr=cond; SSA_step.type=goto_trace_stept::GOTO; SSA_step.source=source; merge_ireps(SSA_step); }
void symex_target_equationt::function_return( const exprt &guard, const irep_idt &identifier, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=guard; SSA_step.type=goto_trace_stept::FUNCTION_RETURN; SSA_step.source=source; SSA_step.identifier=identifier; merge_ireps(SSA_step); }
void symex_target_equationt::input( const guardt &guard, const sourcet &source, const irep_idt &input_id, const std::list<exprt> &args) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard_expr=guard.as_expr(); SSA_step.type=goto_trace_stept::INPUT; SSA_step.source=source; SSA_step.io_args=args; SSA_step.io_id=input_id; }
void symex_target_equationt::assertion( const guardt &guard, const exprt &cond, const std::string &msg, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard_expr=guard.as_expr(); SSA_step.cond_expr=cond; SSA_step.type=goto_trace_stept::ASSERT; SSA_step.source=source; SSA_step.comment=msg; }
void symex_target_equationt::shared_write( const exprt &guard, const ssa_exprt &ssa_object, unsigned atomic_section_id, const sourcet &source) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=guard; SSA_step.ssa_lhs=ssa_object; SSA_step.type=goto_trace_stept::SHARED_WRITE; SSA_step.atomic_section_id=atomic_section_id; SSA_step.source=source; merge_ireps(SSA_step); }
void symex_target_equationt::constraint( const exprt &cond, const std::string &msg, const sourcet &source) { // like assumption, but with global effect SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=true_exprt(); SSA_step.cond_expr=cond; SSA_step.type=goto_trace_stept::CONSTRAINT; SSA_step.source=source; SSA_step.comment=msg; merge_ireps(SSA_step); }
void symex_target_equationt::output( const exprt &guard, const sourcet &source, const irep_idt &output_id, const std::list<exprt> &args) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard=guard; SSA_step.type=goto_trace_stept::OUTPUT; SSA_step.source=source; SSA_step.io_args=args; SSA_step.io_id=output_id; merge_ireps(SSA_step); }
void symex_target_equationt::output_fmt( const guardt &guard, const sourcet &source, const irep_idt &output_id, const irep_idt &fmt, const std::list<exprt> &args) { SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard_expr=guard.as_expr(); SSA_step.type=goto_trace_stept::OUTPUT; SSA_step.source=source; SSA_step.io_args=args; SSA_step.io_id=output_id; SSA_step.formatted=true; SSA_step.format_string=fmt; }
void symex_target_equationt::decl( const guardt &guard, const symbol_exprt &ssa_lhs, const symbol_exprt &original_lhs_object, const sourcet &source) { assert(ssa_lhs.is_not_nil()); SSA_steps.push_back(SSA_stept()); SSA_stept &SSA_step=SSA_steps.back(); SSA_step.guard_expr=guard.as_expr(); SSA_step.ssa_lhs=ssa_lhs; SSA_step.ssa_full_lhs=ssa_lhs; SSA_step.original_lhs_object=original_lhs_object; SSA_step.original_full_lhs=original_lhs_object; SSA_step.type=goto_trace_stept::DECL; SSA_step.source=source; // the condition is trivially true, and only // there so we see the symbols SSA_step.cond_expr=equal_exprt(SSA_step.ssa_lhs, SSA_step.ssa_lhs); }