@@ -147,8 +147,8 @@ class ai_baset
147
147
{
148
148
goto_functionst goto_functions;
149
149
initialize (function_id, goto_program);
150
- entry_state (goto_program);
151
- fixedpoint (function_id, goto_program, goto_functions, ns);
150
+ trace_ptrt p = entry_state (goto_program);
151
+ fixedpoint (p, function_id, goto_program, goto_functions, ns);
152
152
finalize ();
153
153
}
154
154
@@ -158,8 +158,8 @@ class ai_baset
158
158
const namespacet &ns)
159
159
{
160
160
initialize (goto_functions);
161
- entry_state (goto_functions);
162
- fixedpoint (goto_functions, ns);
161
+ trace_ptrt p = entry_state (goto_functions);
162
+ fixedpoint (p, goto_functions, ns);
163
163
finalize ();
164
164
}
165
165
@@ -168,8 +168,8 @@ class ai_baset
168
168
{
169
169
const namespacet ns (goto_model.get_symbol_table ());
170
170
initialize (goto_model.get_goto_functions ());
171
- entry_state (goto_model.get_goto_functions ());
172
- fixedpoint (goto_model.get_goto_functions (), ns);
171
+ trace_ptrt p = entry_state (goto_model.get_goto_functions ());
172
+ fixedpoint (p, goto_model.get_goto_functions (), ns);
173
173
finalize ();
174
174
}
175
175
@@ -181,8 +181,8 @@ class ai_baset
181
181
{
182
182
goto_functionst goto_functions;
183
183
initialize (function_id, goto_function);
184
- entry_state (goto_function.body );
185
- fixedpoint (function_id, goto_function.body , goto_functions, ns);
184
+ trace_ptrt p = entry_state (goto_function.body );
185
+ fixedpoint (p, function_id, goto_function.body , goto_functions, ns);
186
186
finalize ();
187
187
}
188
188
@@ -378,11 +378,11 @@ class ai_baset
378
378
379
379
// / Set the abstract state of the entry location of a single function to the
380
380
// / entry state required by the analysis
381
- void entry_state (const goto_programt &goto_program);
381
+ trace_ptrt entry_state (const goto_programt &goto_program);
382
382
383
383
// / Set the abstract state of the entry location of a whole program to the
384
384
// / entry state required by the analysis
385
- void entry_state (const goto_functionst &goto_functions);
385
+ trace_ptrt entry_state (const goto_functionst &goto_functions);
386
386
387
387
// / Output the abstract states for a single function as JSON
388
388
// / \param ns: The namespace
@@ -420,13 +420,16 @@ class ai_baset
420
420
// / Run the fixedpoint algorithm until it reaches a fixed point
421
421
// / \return True if we found something new
422
422
virtual bool fixedpoint (
423
+ trace_ptrt starting_trace,
423
424
const irep_idt &function_id,
424
425
const goto_programt &goto_program,
425
426
const goto_functionst &goto_functions,
426
427
const namespacet &ns);
427
428
428
- virtual void
429
- fixedpoint (const goto_functionst &goto_functions, const namespacet &ns);
429
+ virtual void fixedpoint (
430
+ trace_ptrt starting_trace,
431
+ const goto_functionst &goto_functions,
432
+ const namespacet &ns);
430
433
431
434
// / Perform one step of abstract interpretation from trace t
432
435
// / Depending on the instruction type it may compute a number of "edges"
@@ -660,10 +663,11 @@ class concurrency_aware_ait:public ait<domainT>
660
663
using working_sett = ai_baset::working_sett;
661
664
662
665
void fixedpoint (
666
+ ai_baset::trace_ptrt start_trace,
663
667
const goto_functionst &goto_functions,
664
668
const namespacet &ns) override
665
669
{
666
- ai_baset::fixedpoint (goto_functions, ns);
670
+ ai_baset::fixedpoint (start_trace, goto_functions, ns);
667
671
668
672
is_threadedt is_threaded (goto_functions);
669
673
0 commit comments