CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
havoc_utils.cpp
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: Utilities for building havoc code for expressions.
4
5Author: Saswat Padhi, saspadhi@amazon.com
6
7Date: July 2021
8
9\*******************************************************************/
10
13
14#include "havoc_utils.h"
15
16#include <util/pointer_expr.h>
17#include <util/std_code.h>
18
20
22 const source_locationt location,
23 goto_programt &dest)
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)
33{
34 if(expr.id() == ID_index || expr.id() == ID_dereference)
35 {
38 {
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{
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 code_assignt{expr, std::move(rhs), location}, location));
65}
Operator to return the address of an object.
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
A goto_instruction_codet representing an assignment in the program.
Data structure for representing an arbitrary statement in a program.
Base class for all expressions.
Definition expr.h:56
typet & type()
Return the type of the expression.
Definition expr.h:84
source_locationt & add_source_location()
Definition expr.h:236
void add_to_operands(const exprt &expr)
Add the given argument to the end of exprt's operands.
Definition expr.h:170
A generic container class for the GOTO intermediate representation of one function.
static instructiont make_assignment(const code_assignt &_code, const source_locationt &l=source_locationt::nil())
Create an assignment instruction.
static instructiont make_other(const goto_instruction_codet &_code, const source_locationt &l=source_locationt::nil())
targett add(instructiont &&instruction)
Adds a given instruction at the end.
virtual void append_havoc_code_for_expr(const source_locationt location, const exprt &expr, goto_programt &dest)
Append goto instructions to havoc a single expression expr
const havoc_utils_can_forward_propagatet is_constant
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
const assignst & assigns
void append_full_havoc_code(const source_locationt location, goto_programt &dest)
Append goto instructions to havoc the full assigns set.
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
const irep_idt & id() const
Definition irep.h:388
A side_effect_exprt that returns a non-deterministically chosen value.
Definition std_code.h:1520
Concrete Goto Program.
Utilities for building havoc code for expressions.
API to expression classes for Pointers.