ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
witnesses.h
Go to the documentation of this file.
1#ifndef CPROVER_GOTO_SYMEX_WITNESSES_H
2#define CPROVER_GOTO_SYMEX_WITNESSES_H
3
4#include <boost/property_tree/xml_parser.hpp>
6#include <irep2/irep2.h>
10#include <goto-symex/waypoint.h>
11#include <string>
12#include <regex>
13#include <vector>
14#include <big-int/bigint.hh>
15#include <yaml-cpp/yaml.h>
16
17typedef boost::property_tree::ptree xmlnodet;
18
19class nodet
20{
21private:
22 static BigInt _id;
23
24public:
25 std::string id;
26 bool entry = false;
27 bool sink = false;
28 bool violation = false;
29 bool cycle_head = false;
30 std::string invariant;
31 std::string invariant_scope;
32 std::string cwe; // comma-separated CWE list (e.g. "CWE-476, CWE-125")
33 nodet(void)
34 {
35 id = "N" + integer2string(_id);
36 _id += 1;
37 }
38};
39
40class edget
41{
42private:
43 static BigInt _id;
44
45public:
46 std::string id;
47 std::string assumption;
48 std::string assumption_scope;
50 std::string enter_function;
52 std::string thread_id;
53 std::string create_thread;
54 std::string origin_file;
59 bool control = false;
60 bool enter_loop_head = false;
63 edget(void)
64 {
65 id = "E" + integer2string(_id);
66 _id += 1;
68 to_node = NULL;
69 }
71 {
72 id = "E" + integer2string(_id);
73 _id += 1;
74 this->from_node = from_node;
75 this->to_node = to_node;
76 }
77};
78
99
101{
102private:
103 std::vector<BigInt> threads;
104 void create_initial_edge();
105
106public:
113 std::string verified_file;
114 std::vector<edget> edges;
116 {
117 witness_type = t;
118 create_initial_edge();
119 }
120
126 void generate_graphml(
127 optionst &options,
128 const std::string &output_path_override = "");
129 void check_create_new_thread(BigInt thread_id, nodet *prev_node);
130};
131
132class yamlt
133{
134public:
141 std::string verified_file;
142 std::vector<waypoint> segments;
143 std::vector<invariant> invariants;
144
146 {
147 witness_type = t;
148 }
149
152 void generate_yaml(
153 optionst &options,
154 const std::string &output_path_override = "");
155};
156
161void create_graphml(xmlnodet &graphml);
162
170 std::string &verifiedfile,
171 optionst &options,
172 xmlnodet &graphnode);
173
180 std::string &verifiedfile,
181 optionst &options,
182 xmlnodet &graphnode);
183
185 std::string &verifiedfile,
186 optionst &options,
187 YAML::Emitter &root);
188
190 std::string &verifiedfile,
191 optionst &options,
192 YAML::Emitter &root);
193
194void create_waypoint(const waypoint &wp, YAML::Emitter &waypoint);
195
202void create_edge_node(edget &edge, xmlnodet &edgenode);
203
207void create_node_node(nodet &node, xmlnodet &nodenode);
208
215bool is_valid_witness_step(const namespacet &ns, const goto_trace_stept &step);
216
222std::string get_formated_assignment(
223 const namespacet &ns,
224 const goto_trace_stept &step,
225 bool yaml);
226
231void check_replace_invalid_assignment(std::string &assignment);
232
234 const namespacet &ns,
236
238 const std::string &verified_file,
239 BigInt relative_line_number,
240 optionst &options);
241
242int generate_sha256_hash_for_file(const char *path, std::string &output);
243
244std::string
245get_invariant(std::string verified_file, BigInt line_number, optionst &options);
246
250bool find_nondet_in_expr(const expr2tc &expr);
251
256 const std::string &file_name,
257 const symex_target_equationt &target,
258 smt_convt &smt_conv);
259
262{
263 std::string symbol_name; // e.g., "nondet$symex::nondet3"
264 expr2tc symbol_expr; // The (renamed) symbol2tc as it appears in the SSA
265 expr2tc value_expr; // The concrete value expression
266 type2tc type; // The type
267};
268
270std::vector<collected_nondet_value> collect_nondet_values(
271 const symex_target_equationt &target,
272 smt_convt &smt_conv);
273
283expr2tc make_blocking_expr(const std::vector<collected_nondet_value> &nondets);
284
285#endif
Definition bigint.hh:58
Definition witnesses.h:41
BigInt end_line
Definition witnesses.h:56
nodet * from_node
Definition witnesses.h:61
std::string thread_id
Definition witnesses.h:52
std::string enter_function
Definition witnesses.h:50
edget(void)
Definition witnesses.h:63
std::string id
Definition witnesses.h:46
bool control
Definition witnesses.h:59
std::string create_thread
Definition witnesses.h:53
bool enter_loop_head
Definition witnesses.h:60
BigInt start_offset
Definition witnesses.h:57
std::string assumption_resultfunction
Definition witnesses.h:49
std::string return_from_function
Definition witnesses.h:51
BigInt start_line
Definition witnesses.h:55
std::string origin_file
Definition witnesses.h:54
nodet * to_node
Definition witnesses.h:62
std::string assumption
Definition witnesses.h:47
edget(nodet *from_node, nodet *to_node)
Definition witnesses.h:70
std::string assumption_scope
Definition witnesses.h:48
BigInt end_offset
Definition witnesses.h:58
Definition goto_trace.h:16
void generate_graphml(optionst &options, const std::string &output_path_override="")
Generate the GraphML witness.
Definition witnesses.cpp:22
std::vector< edget > edges
Definition witnesses.h:114
grapht(typet t)
Definition witnesses.h:115
typet
Definition witnesses.h:108
@ CORRECTNESS
Definition witnesses.h:110
@ VIOLATION
Definition witnesses.h:109
typet witness_type
Definition witnesses.h:112
std::string verified_file
Definition witnesses.h:113
void check_create_new_thread(BigInt thread_id, nodet *prev_node)
Definition witnesses.cpp:70
Definition witnesses.h:80
std::string format
Definition witnesses.h:94
Type type
Definition witnesses.h:91
std::string file
Definition witnesses.h:92
Type
Definition witnesses.h:83
@ unknown
Definition witnesses.h:88
@ location_invariant
Definition witnesses.h:86
@ location_transition_invariant
Definition witnesses.h:87
@ loop_transition_invariant
Definition witnesses.h:85
BigInt line
Definition witnesses.h:95
std::string value
Definition witnesses.h:93
BigInt column
Definition witnesses.h:96
std::string function
Definition witnesses.h:97
Reference counted container for irep2 nodes.
Definition irep2.h:144
Definition namespace.h:10
Definition witnesses.h:20
bool sink
Definition witnesses.h:27
bool cycle_head
Definition witnesses.h:29
bool entry
Definition witnesses.h:26
std::string cwe
Definition witnesses.h:32
std::string invariant_scope
Definition witnesses.h:31
bool violation
Definition witnesses.h:28
nodet(void)
Definition witnesses.h:33
std::string invariant
Definition witnesses.h:30
std::string id
Definition witnesses.h:25
Definition options.h:11
Slim, frontend-facing SMT interface.
Definition smt_conv.h:30
Definition symex_target_equation.h:21
Definition waypoint.h:11
std::string verified_file
Definition witnesses.h:141
typet witness_type
Definition witnesses.h:140
std::vector< invariant > invariants
Definition witnesses.h:143
typet
Definition witnesses.h:136
@ VIOLATION
Definition witnesses.h:137
@ CORRECTNESS
Definition witnesses.h:138
yamlt(typet t)
Definition witnesses.h:145
void generate_yaml(optionst &options, const std::string &output_path_override="")
Generate the YAML witness.
Definition witnesses.cpp:100
std::vector< waypoint > segments
Definition witnesses.h:142
double exp(double x)
Definition exp.c:84
Classes and definitions for non-stringy internal representation.
irep_container< type2t > type2tc
Definition irep2.h:430
irep_container< expr2t > expr2tc
Definition irep2.h:431
const std::string integer2string(const BigInt &n, unsigned base)
Definition mp_arith.cpp:86
Definition goto_loop_invariant.cpp:52
Definition path.py:1
#define NULL
Definition pthread.h:32
Helper structure for collected nondet values.
Definition witnesses.h:262
expr2tc symbol_expr
Definition witnesses.h:264
type2tc type
Definition witnesses.h:266
expr2tc value_expr
Definition witnesses.h:265
std::string symbol_name
Definition witnesses.h:263
#define c_nonset
Definition waypoint.h:8
boost::property_tree::ptree xmlnodet
Definition witnesses.cpp:17
BigInt get_line_number(const std::string &verified_file, BigInt relative_line_number, optionst &options)
Definition witnesses.cpp:985
void create_violation_graph_node(std::string &verifiedfile, optionst &options, xmlnodet &graphnode)
Create a violation graph node.
Definition witnesses.cpp:860
void create_node_node(nodet &node, xmlnodet &nodenode)
Create a node node.
Definition witnesses.cpp:247
bool is_valid_witness_step(const namespacet &ns, const goto_trace_stept &step)
This function checks if the current counterexample step is valid for the GraphML.
Definition witnesses.cpp:961
void create_correctness_graph_node(std::string &verifiedfile, optionst &options, xmlnodet &graphnode)
Create a correctness graph node.
Definition witnesses.cpp:872
expr2tc make_blocking_expr(const std::vector< collected_nondet_value > &nondets)
Build a blocking clause that excludes the given input tuple from future solver queries: NOT (sym_1 ==...
Definition witnesses.cpp:1353
void create_graphml(xmlnodet &graphml)
Create a GraphML node, which is the most external one and includes graph, edges, and nodes.
Definition witnesses.cpp:385
bool find_nondet_in_expr(const expr2tc &expr)
Returns true if any sub-expression of expr is a nondet symbol.
Definition witnesses.cpp:1136
void create_correctness_yaml_emitter(std::string &verifiedfile, optionst &options, YAML::Emitter &root)
Definition witnesses.cpp:884
void create_edge_node(edget &edge, xmlnodet &edgenode)
Create a edge node.
Definition witnesses.cpp:301
int generate_sha256_hash_for_file(const char *path, std::string &output)
Definition witnesses.cpp:143
void generate_testcase(const std::string &file_name, const symex_target_equationt &target, smt_convt &smt_conv)
Definition witnesses.cpp:1408
std::vector< collected_nondet_value > collect_nondet_values(const symex_target_equationt &target, smt_convt &smt_conv)
Collect all nondet values from SSA.
Definition witnesses.cpp:1293
std::string get_invariant(std::string verified_file, BigInt line_number, optionst &options)
Definition witnesses.cpp:1046
void generate_testcase_metadata()
This generates test-cases as described in: https://gitlab.com/sosy-lab/test-comp/test-format/-/tree/m...
Definition witnesses.cpp:1076
void check_replace_invalid_assignment(std::string &assignment)
Clear an assumption a witness validator would reject: one naming an ESBMC-internal object,...
Definition witnesses.cpp:912
void create_waypoint(const waypoint &wp, YAML::Emitter &waypoint)
Definition witnesses.cpp:185
bool is_valid_witness_expr(const namespacet &ns, const irep_container< expr2t > &exp)
Definition witnesses.cpp:974
std::string get_formated_assignment(const namespacet &ns, const goto_trace_stept &step, bool yaml)
If the current step is an assignment, this function will return the lhs and rhs formated in a way exp...
Definition witnesses.cpp:938
void create_violation_yaml_emitter(std::string &verifiedfile, optionst &options, YAML::Emitter &root)
Definition witnesses.cpp:898