ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
value_set_analysis.h
Go to the documentation of this file.
1#ifndef CPROVER_POINTER_ANALYSIS_VALUE_PROPAGATION_H
2#define CPROVER_POINTER_ANALYSIS_VALUE_PROPAGATION_H
3
7#include <util/base/xml.h>
8
10 public static_analysist<value_set_domaint>
11{
12public:
13 explicit value_set_analysist(const namespacet &_ns)
15 {
16 }
17
19
20 // value_setst and static_analysis_baset each declare a locationt (both
21 // goto_programt::const_targett); name one to keep member declarations
22 // unambiguous.
24
25 // overloading
26 void initialize(const goto_programt &goto_program) override;
27 void initialize(const goto_functionst &goto_functions) override;
28
29 friend void convert(
30 const goto_functionst &goto_functions,
31 const value_set_analysist &value_set_analysis,
32 xmlt &dest);
33
34 friend void convert(
35 const goto_programt &goto_program,
36 const value_set_analysist &value_set_analysis,
37 xmlt &dest);
38
39 void convert(
40 const goto_programt &goto_program,
41 const irep_idt &identifier,
42 xmlt &dest) const;
43
44 void get_globals(std::list<value_sett::entryt> &dest);
45
46 void get_entries_rec(
47 const std::string &identifier,
48 const std::string &suffix,
49 const typet &type,
50 std::list<value_sett::entryt> &dest);
51
52protected:
53 bool check_type(const typet &type);
54 void add_vars(const goto_functionst &goto_functions);
55 void add_vars(const goto_programt &goto_programa);
56
57 void get_entries(const symbolt &symbol, std::list<value_sett::entryt> &dest);
58
59public:
60 // interface value_sets
62 override
63 {
64 (*this)[l].value_set->get_value_set(expr, dest);
65 }
66
67 // Both members already exist on the static_analysist base, but a member
68 // inherited from one base does not override a pure virtual declared in
69 // another, so value_setst needs these explicit forwarders.
71 locationt l,
72 const expr2tc &expr,
73 value_setst::valuest &dest) override
74 {
75 baset::get_reference_set(l, expr, dest);
76 }
77
78 bool has_location(locationt l) const override
79 {
80 return baset::has_location(l);
81 }
82};
83
84#endif
Definition goto_functions.h:56
A generic container class for a control flow graph for one function, in the form of a goto-program.
Definition goto_program.h:63
Definition irep_idt.h:12
Definition namespace.h:10
static_analysist(const namespacet &_ns)
Definition static_analysis.h:214
void get_reference_set(locationt l, const expr2tc &expr, std::list< expr2tc > &dest) override
Definition static_analysis.h:282
goto_programt::const_targett locationt
Definition static_analysis.h:218
bool has_location(locationt l) const override
Definition static_analysis.h:242
Definition symbol.h:12
Definition type.h:9
value_set_analysist(const namespacet &_ns)
Definition value_set_analysis.h:13
void get_globals(std::list< value_sett::entryt > &dest)
Definition value_set_analysis.cpp:132
bool has_location(locationt l) const override
True iff l carries points-to information; consumers must abstain when it does not.
Definition value_set_analysis.h:78
baset::locationt locationt
Definition value_set_analysis.h:23
void get_entries_rec(const std::string &identifier, const std::string &suffix, const typet &type, std::list< value_sett::entryt > &dest)
Definition value_set_analysis.cpp:71
void get_values(locationt l, const expr2tc &expr, value_setst::valuest &dest) override
Definition value_set_analysis.h:61
bool check_type(const typet &type)
Definition value_set_analysis.cpp:141
void get_entries(const symbolt &symbol, std::list< value_sett::entryt > &dest)
Definition value_set_analysis.cpp:64
void add_vars(const goto_functionst &goto_functions)
Definition value_set_analysis.cpp:101
void get_reference_set(locationt l, const expr2tc &expr, value_setst::valuest &dest) override
The objects a dereference-style l-value may refer to, as object_descriptor2ts (or a raw unknown/inval...
Definition value_set_analysis.h:70
friend void convert(const goto_functionst &goto_functions, const value_set_analysist &value_set_analysis, xmlt &dest)
Definition value_set_analysis.cpp:198
static_analysist< value_set_domaint > baset
Definition value_set_analysis.h:18
Definition value_set_domain.h:10
value_setst()=default
std::list< expr2tc > valuest
Definition value_sets.h:15
Definition xml.h:9
irep_container< expr2t > expr2tc
Definition irep2.h:431
@ identifier
Definition nested_func_transform.cpp:62
void initialize()
Definition solidity_misc.c:90