Go to the documentation of this file.
25 if(dest.
id()==ID_symbol)
40 else if(dest.
id()==ID_byte_extract_little_endian ||
41 dest.
id()==ID_byte_extract_big_endian)
45 else if(dest.
id()==ID_if)
57 else if(dest.
id()==ID_typecast)
61 else if(dest.
id()==ID_index)
65 else if(dest.
id()==ID_member)
84 if(statement==ID_expression)
88 else if(statement==ID_cpp_delete ||
89 statement==
"cpp_delete[]")
94 else if(statement==ID_printf)
109 else if(statement==ID_decl)
113 else if(statement==ID_nondet)
117 else if(statement==ID_asm)
121 else if(statement==ID_array_copy ||
122 statement==ID_array_replace)
133 "expected array_copy/array_replace statement to have two operands");
144 if(dest_array.
type() != src_array.
type())
146 if(statement==ID_array_copy)
163 else if(statement==ID_array_set)
174 "expected array_set statement to have two operands");
187 if(array_expr.
type().
id() != ID_array)
205 else if(statement==ID_array_equal)
217 "expected array_equal statement to have three operands");
237 else if(statement==ID_user_specified_predicate ||
238 statement==ID_user_specified_parameter_predicates ||
239 statement==ID_user_specified_return_predicates)
243 else if(statement==ID_fence)
247 else if(statement==ID_havoc_object)
251 "expected havoc_object statement to have one operand");
#define UNREACHABLE
This should be used to mark dead code.
exprt clean_expr(exprt expr, statet &state, bool write)
Clean up an expression.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
byte_extract_exprt make_byte_extract(const exprt &_op, const exprt &_offset, const typet &_type)
Construct a byte_extract_exprt with endianness and byte width matching the current configuration.
virtual void memory_barrier(const exprt &guard, const sourcet &source)
Record creating a memory barrier.
const goto_instruction_codet & get_other() const
Get the statement for OTHER.
#define CHECK_RETURN(CONDITION)
goto_programt::const_targett pc
const byte_extract_exprt & to_byte_extract_expr(const exprt &expr)
virtual void symex_printf(statet &state, const exprt &rhs)
Symbolically execute an OTHER instruction that does a CPP printf
const index_exprt & to_index_expr(const exprt &expr)
Cast an exprt to an index_exprt.
const if_exprt & to_if_expr(const exprt &expr)
Cast an exprt to an if_exprt.
symex_target_equationt & target
The equation that this execution is building up.
Central data structure: state.
The trinary if-then-else operator.
guard_managert & guard_manager
Used to create guards.
Base class for all expressions.
symex_targett::sourcet source
const codet & to_code(const exprt &expr)
typet & type()
Return the type of the expression.
Expression classes for byte-level operators.
#define DATA_INVARIANT(CONDITION, REASON)
This condition should be used to document that assumptions that are made on goto_functions,...
void process_array_expr(statet &, exprt &)
Given an expression, find the root object and the offset into it.
virtual void symex_cpp_delete(statet &state, const codet &code)
Symbolically execute an OTHER instruction that does a CPP delete
void add(const exprt &expr)
Array constructor from single element.
virtual void symex_input(statet &state, const codet &code)
Symbolically execute an OTHER instruction that does a CPP input.
const irep_idt & id() const
The Boolean constant false.
virtual void do_simplify(exprt &expr)
bitvector_typet char_type()
bool can_cast_expr< code_outputt >(const exprt &base)
A side_effect_exprt that returns a non-deterministically chosen value.
void havoc_rec(statet &state, const guardt &guard, const exprt &dest)
namespacet ns
Initialized just before symbolic execution begins, to point to both outer_symbol_table and the symbol...
const typecast_exprt & to_typecast_expr(const exprt &expr)
Cast an exprt to a typecast_exprt.
const array_typet & to_array_type(const typet &type)
Cast a typet to an array_typet.
bool can_cast_expr< code_inputt >(const exprt &base)
optionalt< exprt > size_of_expr(const typet &type, const namespacet &ns)
const member_exprt & to_member_expr(const exprt &expr)
Cast an exprt to a member_exprt.
Semantic type conversion.
The Boolean constant true.
const irep_idt & get_statement() const
bitvector_typet c_index_type()
This class represents an instruction in the GOTO intermediate representation.
void symex_assign(statet &state, const exprt &lhs, const exprt &rhs)
Symbolically execute an ASSIGN instruction or simulate such an execution for a synthetic assignment.
virtual void symex_other(statet &state)
Symbolically execute an OTHER instruction.
virtual void symex_output(statet &state, const codet &code)
Symbolically execute an OTHER instruction that does a CPP output.
const typet & element_type() const
The type of the elements of the array.
Data structure for representing an arbitrary statement in a program.