Skip to content

Commit bfe355c

Browse files
authored
Merge pull request #4031 from tautschnig/loop-utils-cleanup
Remove code copies in havoc_loops
2 parents ab29b8d + 13f393d commit bfe355c

File tree

5 files changed

+11
-105
lines changed

5 files changed

+11
-105
lines changed

src/goto-instrument/function_modifies.cpp

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,7 @@ Author: Daniel Kroening, [email protected]
1313

1414
#include <util/std_expr.h>
1515

16-
void function_modifiest::get_modifies_lhs(
17-
const local_may_aliast &local_may_alias,
18-
const goto_programt::const_targett t,
19-
const exprt &lhs,
20-
modifiest &modifies)
21-
{
22-
if(lhs.id()==ID_symbol)
23-
modifies.insert(lhs);
24-
else if(lhs.id()==ID_dereference)
25-
{
26-
modifiest m=local_may_alias.get(t, to_dereference_expr(lhs).pointer());
27-
for(modifiest::const_iterator m_it=m.begin();
28-
m_it!=m.end(); m_it++)
29-
get_modifies_lhs(local_may_alias, t, *m_it, modifies);
30-
}
31-
else if(lhs.id()==ID_member)
32-
{
33-
}
34-
else if(lhs.id()==ID_index)
35-
{
36-
}
37-
else if(lhs.id()==ID_if)
38-
{
39-
get_modifies_lhs(local_may_alias, t, to_if_expr(lhs).true_case(), modifies);
40-
get_modifies_lhs(
41-
local_may_alias, t, to_if_expr(lhs).false_case(), modifies);
42-
}
43-
}
16+
#include "loop_utils.h"
4417

4518
void function_modifiest::get_modifies(
4619
const local_may_aliast &local_may_alias,

src/goto-instrument/function_modifies.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,6 @@ class function_modifiest
3030
const goto_programt::const_targett,
3131
modifiest &);
3232

33-
void get_modifies_lhs(
34-
const local_may_aliast &,
35-
const goto_programt::const_targett,
36-
const exprt &lhs,
37-
modifiest &);
38-
3933
void get_modifies_function(
4034
const exprt &,
4135
modifiest &);

src/goto-instrument/havoc_loops.cpp

Lines changed: 3 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Author: Daniel Kroening, [email protected]
1919
#include <goto-programs/remove_skip.h>
2020

2121
#include "function_modifies.h"
22+
#include "loop_utils.h"
2223

2324
class havoc_loopst
2425
{
@@ -51,57 +52,11 @@ class havoc_loopst
5152
const goto_programt::targett loop_head,
5253
const loopt &);
5354

54-
void build_havoc_code(
55-
const goto_programt::targett loop_head,
56-
const modifiest &modifies,
57-
goto_programt &dest);
58-
5955
void get_modifies(
6056
const loopt &,
6157
modifiest &);
62-
63-
goto_programt::targett get_loop_exit(const loopt &);
6458
};
6559

66-
goto_programt::targett havoc_loopst::get_loop_exit(const loopt &loop)
67-
{
68-
assert(!loop.empty());
69-
70-
// find the last instruction in the loop
71-
std::map<unsigned, goto_programt::targett> loop_map;
72-
73-
for(loopt::const_iterator l_it=loop.begin();
74-
l_it!=loop.end();
75-
l_it++)
76-
loop_map[(*l_it)->location_number]=*l_it;
77-
78-
// get the one with the highest number
79-
goto_programt::targett last=(--loop_map.end())->second;
80-
81-
return ++last;
82-
}
83-
84-
void havoc_loopst::build_havoc_code(
85-
const goto_programt::targett loop_head,
86-
const modifiest &modifies,
87-
goto_programt &dest)
88-
{
89-
for(modifiest::const_iterator
90-
m_it=modifies.begin();
91-
m_it!=modifies.end();
92-
m_it++)
93-
{
94-
exprt lhs=*m_it;
95-
exprt rhs =
96-
side_effect_expr_nondett(lhs.type(), loop_head->source_location);
97-
98-
goto_programt::targett t = dest.add(goto_programt::make_assignment(
99-
code_assignt(lhs, rhs), loop_head->source_location));
100-
t->function=loop_head->function;
101-
t->code.add_source_location()=loop_head->source_location;
102-
}
103-
}
104-
10560
void havoc_loopst::havoc_loop(
10661
const goto_programt::targett loop_head,
10762
const loopt &loop)
@@ -150,30 +105,8 @@ void havoc_loopst::get_modifies(
150105
const loopt &loop,
151106
modifiest &modifies)
152107
{
153-
for(loopt::const_iterator
154-
i_it=loop.begin(); i_it!=loop.end(); i_it++)
155-
{
156-
const goto_programt::instructiont &instruction=**i_it;
157-
158-
if(instruction.is_assign())
159-
{
160-
const exprt &lhs=to_code_assign(instruction.code).lhs();
161-
function_modifies.get_modifies_lhs(local_may_alias, *i_it, lhs, modifies);
162-
}
163-
else if(instruction.is_function_call())
164-
{
165-
const code_function_callt &code_function_call=
166-
to_code_function_call(instruction.code);
167-
const exprt &lhs=code_function_call.lhs();
168-
169-
// return value assignment
170-
if(lhs.is_not_nil())
171-
function_modifies.get_modifies_lhs(
172-
local_may_alias, *i_it, lhs, modifies);
173-
174-
function_modifies(code_function_call.function(), modifies);
175-
}
176-
}
108+
for(const auto &instruction_it : loop)
109+
function_modifies.get_modifies(local_may_alias, instruction_it, modifies);
177110
}
178111

179112
void havoc_loopst::havoc_loops()

src/goto-instrument/loop_utils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ void build_havoc_code(
5555
}
5656
}
5757

58-
static void get_modifies_lhs(
58+
void get_modifies_lhs(
5959
const local_may_aliast &local_may_alias,
6060
goto_programt::const_targett t,
6161
const exprt &lhs,

src/goto-instrument/loop_utils.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ void get_modifies(
2424
const loopt &loop,
2525
modifiest &modifies);
2626

27+
void get_modifies_lhs(
28+
const local_may_aliast &local_may_alias,
29+
goto_programt::const_targett t,
30+
const exprt &lhs,
31+
modifiest &modifies);
32+
2733
void build_havoc_code(
2834
const goto_programt::targett loop_head,
2935
const modifiest &modifies,

0 commit comments

Comments
 (0)