CBMC
goto_program_dereference.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Value Set
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_POINTER_ANALYSIS_GOTO_PROGRAM_DEREFERENCE_H
13 #define CPROVER_POINTER_ANALYSIS_GOTO_PROGRAM_DEREFERENCE_H
14 
15 #include <util/message.h>
16 
17 #include "dereference_callback.h"
18 #include "value_set_dereference.h"
19 
20 class exprt;
21 class goto_functionst;
22 class goto_modelt;
23 class namespacet;
24 class optionst;
25 class symbol_tablet;
26 class symbolt;
27 class value_setst;
28 
32 {
33 public:
34  // Note: this currently doesn't specify a source language
35  // for the final argument to value_set_dereferencet.
36  // This means that language-inappropriate values such as
37  // (struct A*)some_integer_value in Java, may be returned.
38  // Note: value_set_dereferencet requires a messaget instance
39  // as on of its arguments to display the points-to set
40  // during symex. Display is not done during goto-program
41  // conversion. To ensure this the display_points_to_sets
42  // parameter in value_set_dereferencet::dereference()
43  // is set to false by default and is not changed by the
44  // goto program conversion modules. Similarly, here we set
45  // _log to be a default messaget instance.
47  const namespacet &_ns,
48  symbol_tablet &_new_symbol_table,
49  const optionst &_options,
50  value_setst &_value_sets,
51  const messaget &_log = messaget())
52  : options(_options),
53  ns(_ns),
54  value_sets(_value_sets),
55  dereference(_ns, _new_symbol_table, *this, ID_nil, false, _log)
56  {
57  }
58 
60  goto_programt &goto_program,
61  bool checks_only=false);
62 
64  goto_functionst &goto_functions,
65  bool checks_only=false);
66 
68  const irep_idt &function_id,
70  exprt &expr);
71 
73  {
74  }
75 
76 protected:
77  const optionst &options;
78  const namespacet &ns;
81 
82  const symbolt *get_or_create_failed_symbol(const exprt &expr) override;
83 
84  std::vector<exprt> get_value_set(const exprt &expr) const override;
85 
88  bool checks_only=false);
89 
90 protected:
91  void dereference_rec(exprt &expr);
92  void dereference_expr(exprt &expr, const bool checks_only);
93 
97 };
98 
99 void dereference(
100  const irep_idt &function_id,
102  exprt &expr,
103  const namespacet &,
104  value_setst &);
105 
106 void remove_pointers(
107  goto_modelt &,
108  value_setst &);
109 
110 #define OPT_REMOVE_POINTERS "(remove-pointers)"
111 
112 // clang-format off
113 #define HELP_REMOVE_POINTERS \
114  " --remove-pointers converts pointer arithmetic to base+offset expressions\n" /* NOLINT(whitespace/line_length) */
115 
116 // clang-format on
117 
118 #endif // CPROVER_POINTER_ANALYSIS_GOTO_PROGRAM_DEREFERENCE_H
messaget
Class that provides messages with a built-in verbosity 'level'.
Definition: message.h:154
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
symbol_tablet
The symbol table.
Definition: symbol_table.h:13
goto_program_dereferencet::goto_program_dereferencet
goto_program_dereferencet(const namespacet &_ns, symbol_tablet &_new_symbol_table, const optionst &_options, value_setst &_value_sets, const messaget &_log=messaget())
Definition: goto_program_dereference.h:46
goto_program_dereferencet::dereference_expression
void dereference_expression(const irep_idt &function_id, goto_programt::const_targett target, exprt &expr)
Set the current target to target and remove derefence from expr.
Definition: goto_program_dereference.cpp:247
remove_pointers
void remove_pointers(goto_modelt &, value_setst &)
Remove dereferences in all expressions contained in the program goto_model.
Definition: goto_program_dereference.cpp:260
optionst
Definition: options.h:22
value_set_dereference.h
dereference_callbackt
Base class for pointer value set analysis.
Definition: dereference_callback.h:27
dereference
void dereference(const irep_idt &function_id, goto_programt::const_targett target, exprt &expr, const namespacet &, value_setst &)
Remove dereferences in expr using value_sets to determine to what objects the pointers may be pointin...
Definition: goto_program_dereference.cpp:278
goto_program_dereferencet::options
const optionst & options
Definition: goto_program_dereference.h:77
exprt
Base class for all expressions.
Definition: expr.h:55
goto_modelt
Definition: goto_model.h:25
goto_program_dereferencet::value_sets
value_setst & value_sets
Definition: goto_program_dereference.h:79
goto_program_dereferencet::dereference_expr
void dereference_expr(exprt &expr, const bool checks_only)
Remove dereference expressions contained in expr.
Definition: goto_program_dereference.cpp:145
goto_program_dereferencet::dereference
value_set_dereferencet dereference
Definition: goto_program_dereference.h:80
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:90
goto_program_dereferencet::get_value_set
std::vector< exprt > get_value_set(const exprt &expr) const override
Gets the value set corresponding to the current target and expression expr.
Definition: goto_program_dereference.cpp:135
goto_program_dereferencet
Wrapper for functions removing dereferences in expressions contained in a goto program.
Definition: goto_program_dereference.h:31
value_set_dereferencet
Wrapper for a function dereferencing pointer expressions using a value set.
Definition: value_set_dereference.h:22
goto_functionst
A collection of goto functions.
Definition: goto_functions.h:24
value_setst
Definition: value_sets.h:21
goto_program_dereferencet::dereference_instruction
void dereference_instruction(goto_programt::targett target, bool checks_only=false)
Remove dereference from expressions contained in the instruction at target.
Definition: goto_program_dereference.cpp:195
goto_program_dereferencet::get_or_create_failed_symbol
const symbolt * get_or_create_failed_symbol(const exprt &expr) override
Definition: goto_program_dereference.cpp:25
symbolt
Symbol table entry.
Definition: symbol.h:27
dereference_callback.h
goto_program_dereferencet::dereference_program
void dereference_program(goto_programt &goto_program, bool checks_only=false)
Definition: goto_program_dereference.cpp:158
goto_program_dereferencet::new_code
goto_programt new_code
Definition: goto_program_dereference.h:96
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition: goto_program.h:72
goto_programt::const_targett
instructionst::const_iterator const_targett
Definition: goto_program.h:587
goto_program_dereferencet::current_target
goto_programt::const_targett current_target
Definition: goto_program_dereference.h:95
goto_program_dereferencet::current_function
irep_idt current_function
Definition: goto_program_dereference.h:94
message.h
goto_program_dereferencet::dereference_rec
void dereference_rec(exprt &expr)
Turn subexpression of expr of the form &*p into p and use dereference on subexpressions of the form *...
Definition: goto_program_dereference.cpp:50
goto_programt::targett
instructionst::iterator targett
Definition: goto_program.h:586
goto_program_dereferencet::ns
const namespacet & ns
Definition: goto_program_dereference.h:78
goto_program_dereferencet::~goto_program_dereferencet
virtual ~goto_program_dereferencet()
Definition: goto_program_dereference.h:72