cprover
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/namespace.h>
16 
18 
19 #include "value_sets.h"
20 #include "value_set_dereference.h"
21 
25 {
26 public:
27  // Note: this currently doesn't specify a source language
28  // for the final argument to value_set_dereferencet.
29  // This means that language-inappropriate values such as
30  // (struct A*)some_integer_value in Java, may be returned.
32  const namespacet &_ns,
33  symbol_tablet &_new_symbol_table,
34  const optionst &_options,
35  value_setst &_value_sets)
36  : options(_options),
37  ns(_ns),
38  value_sets(_value_sets),
39  dereference(_ns, _new_symbol_table, *this, ID_nil, false)
40  {
41  }
42 
44  goto_programt &goto_program,
45  bool checks_only=false);
46 
48  goto_functionst &goto_functions,
49  bool checks_only=false);
50 
52  const irep_idt &function_id,
54  exprt &expr);
55 
57  {
58  }
59 
60 protected:
61  const optionst &options;
62  const namespacet &ns;
65 
66  const symbolt *get_or_create_failed_symbol(const exprt &expr) override;
67 
68  DEPRECATED(SINCE(2019, 05, 22, "use vector returning version instead"))
69  void
70  get_value_set(const exprt &expr, value_setst::valuest &dest) const override;
71 
72  std::vector<exprt> get_value_set(const exprt &expr) const override;
73 
75  goto_programt::targett target,
76  bool checks_only=false);
77 
78 protected:
79  void dereference_rec(exprt &expr);
80  void dereference_expr(exprt &expr, const bool checks_only);
81 
83  goto_programt::const_targett current_target;
85 };
86 
87 void dereference(
88  const irep_idt &function_id,
89  goto_programt::const_targett target,
90  exprt &expr,
91  const namespacet &,
92  value_setst &);
93 
94 void remove_pointers(
95  goto_modelt &,
96  value_setst &);
97 
98 #endif // CPROVER_POINTER_ANALYSIS_GOTO_PROGRAM_DEREFERENCE_H
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:37
symbol_tablet
The symbol table.
Definition: symbol_table.h:20
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:272
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:285
optionst
Definition: options.h:23
value_set_dereference.h
Pointer Dereferencing.
dereference_callbackt
Base class for pointer value set analysis.
Definition: dereference_callback.h:28
goto_program_dereferencet::options
const optionst & options
Definition: goto_program_dereference.h:61
goto_model.h
Symbol Table + CFG.
exprt
Base class for all expressions.
Definition: expr.h:53
goto_modelt
Definition: goto_model.h:26
goto_program_dereferencet::value_sets
value_setst & value_sets
Definition: goto_program_dereference.h:63
namespace.h
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:154
goto_program_dereferencet::dereference
value_set_dereferencet dereference
Definition: goto_program_dereference.h:64
goto_program_dereferencet::get_value_set
void get_value_set(const exprt &expr, value_setst::valuest &dest) const override
Gets the value set corresponding to the current target and expression expr.
Definition: goto_program_dereference.cpp:132
value_sets.h
Value Set Propagation.
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:92
goto_program_dereferencet
Wrapper for functions removing dereferences in expressions contained in a goto program.
Definition: goto_program_dereference.h:25
SINCE
#define SINCE(year, month, day, msg)
Definition: deprecate.h:26
value_set_dereferencet
Wrapper for a function dereferencing pointer expressions using a value set.
Definition: value_set_dereference.h:27
goto_functionst
A collection of goto functions.
Definition: goto_functions.h:23
value_setst
Definition: value_sets.h:22
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:204
DEPRECATED
#define DEPRECATED(msg)
Definition: deprecate.h:23
goto_program_dereferencet::goto_program_dereferencet
goto_program_dereferencet(const namespacet &_ns, symbol_tablet &_new_symbol_table, const optionst &_options, value_setst &_value_sets)
Definition: goto_program_dereference.h:31
goto_program_dereferencet::get_or_create_failed_symbol
const symbolt * get_or_create_failed_symbol(const exprt &expr) override
Definition: goto_program_dereference.cpp:23
symbolt
Symbol table entry.
Definition: symbol.h:28
goto_program_dereferencet::dereference_program
void dereference_program(goto_programt &goto_program, bool checks_only=false)
Definition: goto_program_dereference.cpp:167
goto_program_dereferencet::new_code
goto_programt new_code
Definition: goto_program_dereference.h:84
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition: goto_program.h:73
goto_programt::const_targett
instructionst::const_iterator const_targett
Definition: goto_program.h:580
goto_program_dereferencet::current_target
goto_programt::const_targett current_target
Definition: goto_program_dereference.h:83
goto_program_dereferencet::current_function
irep_idt current_function
Definition: goto_program_dereference.h:82
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:48
goto_program_dereferencet::ns
const namespacet & ns
Definition: goto_program_dereference.h:62
goto_program_dereferencet::~goto_program_dereferencet
virtual ~goto_program_dereferencet()
Definition: goto_program_dereference.h:56