CBMC
havoc_utils.cpp
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Utilities for building havoc code for expressions.
4 
5 Author: Saswat Padhi, saspadhi@amazon.com
6 
7 Date: July 2021
8 
9 \*******************************************************************/
10 
13 
14 #include "havoc_utils.h"
15 
16 #include <util/arith_tools.h>
17 #include <util/c_types.h>
18 #include <util/pointer_expr.h>
19 #include <util/std_code.h>
20 
22  const source_locationt location,
23  goto_programt &dest) const
24 {
25  for(const auto &expr : assigns)
26  append_havoc_code_for_expr(location, expr, dest);
27 }
28 
30  const source_locationt location,
31  const exprt &expr,
32  goto_programt &dest) const
33 {
34  if(expr.id() == ID_index || expr.id() == ID_dereference)
35  {
36  address_of_exprt address_of_expr(expr);
37  if(!is_constant(address_of_expr))
38  {
39  append_object_havoc_code_for_expr(location, address_of_expr, dest);
40  return;
41  }
42  }
43  append_scalar_havoc_code_for_expr(location, expr, dest);
44 }
45 
47  const source_locationt location,
48  const exprt &expr,
49  goto_programt &dest) const
50 {
51  codet havoc(ID_havoc_object);
52  havoc.add_source_location() = location;
53  havoc.add_to_operands(expr);
54  dest.add(goto_programt::make_other(havoc, location));
55 }
56 
58  const source_locationt location,
59  const exprt &expr,
60  goto_programt &dest) const
61 {
62  side_effect_expr_nondett rhs(expr.type(), location);
64  dest.add(goto_programt::make_assignment(expr, std::move(rhs), location));
65  t->code_nonconst().add_source_location() = location;
66 }
goto_programt::make_other
static instructiont make_other(const goto_instruction_codet &_code, const source_locationt &l=source_locationt::nil())
Definition: goto_program.h:948
arith_tools.h
havoc_utilst::append_scalar_havoc_code_for_expr
virtual void append_scalar_havoc_code_for_expr(const source_locationt location, const exprt &expr, goto_programt &dest) const
Append goto instructions to havoc the value of expr
Definition: havoc_utils.cpp:57
goto_programt::add
targett add(instructiont &&instruction)
Adds a given instruction at the end.
Definition: goto_program.h:709
exprt
Base class for all expressions.
Definition: expr.h:55
havoc_utils.h
havoc_utilst::is_constant
const havoc_utils_is_constantt is_constant
Definition: havoc_utils.h:103
havoc_utilst::append_havoc_code_for_expr
virtual void append_havoc_code_for_expr(const source_locationt location, const exprt &expr, goto_programt &dest) const
Append goto instructions to havoc a single expression expr
Definition: havoc_utils.cpp:29
goto_programt::make_assignment
static instructiont make_assignment(const code_assignt &_code, const source_locationt &l=source_locationt::nil())
Create an assignment instruction.
Definition: goto_program.h:1056
exprt::type
typet & type()
Return the type of the expression.
Definition: expr.h:84
havoc_utilst::append_object_havoc_code_for_expr
virtual void append_object_havoc_code_for_expr(const source_locationt location, const exprt &expr, goto_programt &dest) const
Append goto instructions to havoc the underlying object of expr
Definition: havoc_utils.cpp:46
pointer_expr.h
havoc_utilst::append_full_havoc_code
void append_full_havoc_code(const source_locationt location, goto_programt &dest) const
Append goto instructions to havoc the full assigns set.
Definition: havoc_utils.cpp:21
irept::id
const irep_idt & id() const
Definition: irep.h:396
havoc_utilst::assigns
const assignst & assigns
Definition: havoc_utils.h:102
std_code.h
source_locationt
Definition: source_location.h:18
side_effect_expr_nondett
A side_effect_exprt that returns a non-deterministically chosen value.
Definition: std_code.h:1519
exprt::add_to_operands
void add_to_operands(const exprt &expr)
Add the given argument to the end of exprt's operands.
Definition: expr.h:162
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition: goto_program.h:72
address_of_exprt
Operator to return the address of an object.
Definition: pointer_expr.h:370
exprt::add_source_location
source_locationt & add_source_location()
Definition: expr.h:216
c_types.h
goto_programt::targett
instructionst::iterator targett
Definition: goto_program.h:586
codet
Data structure for representing an arbitrary statement in a program.
Definition: std_code_base.h:28