Skip to content

Commit 012b2e0

Browse files
Make symex_level::rename functions return a value
This is so that the returned type can eventually reflect the renaming.
1 parent 43eb277 commit 012b2e0

File tree

3 files changed

+24
-19
lines changed

3 files changed

+24
-19
lines changed

src/goto-symex/goto_symex_state.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ void goto_symex_statet::set_l0_indices(
237237
ssa_exprt &ssa_expr,
238238
const namespacet &ns)
239239
{
240-
level0(ssa_expr, ns, source.thread_nr);
240+
ssa_expr = level0(std::move(ssa_expr), ns, source.thread_nr);
241241
}
242242

243243
void goto_symex_statet::set_l1_indices(
@@ -248,8 +248,8 @@ void goto_symex_statet::set_l1_indices(
248248
return;
249249
if(!ssa_expr.get_level_1().empty())
250250
return;
251-
level0(ssa_expr, ns, source.thread_nr);
252-
level1(ssa_expr);
251+
ssa_exprt l0 = level0(std::move(ssa_expr), ns, source.thread_nr);
252+
ssa_expr = level1(std::move(l0));
253253
}
254254

255255
void goto_symex_statet::set_l2_indices(
@@ -258,9 +258,9 @@ void goto_symex_statet::set_l2_indices(
258258
{
259259
if(!ssa_expr.get_level_2().empty())
260260
return;
261-
level0(ssa_expr, ns, source.thread_nr);
262-
level1(ssa_expr);
263-
level2(ssa_expr);
261+
ssa_exprt l0 = level0(std::move(ssa_expr), ns, source.thread_nr);
262+
ssa_exprt l1 = level1(std::move(l0));
263+
ssa_expr = level2(std::move(l1));
264264
}
265265

266266
template <goto_symex_statet::levelt level>

src/goto-symex/renaming_level.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,50 +17,53 @@ Author: Romain Brenguier, [email protected]
1717

1818
#include "goto_symex_state.h"
1919

20-
void symex_level0t::
21-
operator()(ssa_exprt &ssa_expr, const namespacet &ns, unsigned thread_nr) const
20+
ssa_exprt symex_level0t::
21+
operator()(ssa_exprt ssa_expr, const namespacet &ns, unsigned thread_nr) const
2222
{
2323
// already renamed?
2424
if(!ssa_expr.get_level_0().empty())
25-
return;
25+
return ssa_expr;
2626

2727
const irep_idt &obj_identifier = ssa_expr.get_object_name();
2828

2929
// guards are not L0-renamed
3030
if(obj_identifier == goto_symex_statet::guard_identifier())
31-
return;
31+
return ssa_expr;
3232

3333
const symbolt *s;
3434
const bool found_l0 = !ns.lookup(obj_identifier, s);
3535
INVARIANT(found_l0, "level0: failed to find " + id2string(obj_identifier));
3636

3737
// don't rename shared variables or functions
3838
if(s->type.id() == ID_code || s->is_shared())
39-
return;
39+
return ssa_expr;
4040

4141
// rename!
4242
ssa_expr.set_level_0(thread_nr);
43+
return ssa_expr;
4344
}
4445

45-
void symex_level1t::operator()(ssa_exprt &ssa_expr) const
46+
ssa_exprt symex_level1t::operator()(ssa_exprt ssa_expr) const
4647
{
4748
// already renamed?
4849
if(!ssa_expr.get_level_1().empty())
49-
return;
50+
return ssa_expr;
5051

5152
const irep_idt l0_name = ssa_expr.get_l1_object_identifier();
5253

5354
const auto it = current_names.find(l0_name);
5455
if(it == current_names.end())
55-
return;
56+
return ssa_expr;
5657

5758
// rename!
5859
ssa_expr.set_level_1(it->second.second);
60+
return ssa_expr;
5961
}
6062

61-
void symex_level2t::operator()(ssa_exprt &ssa_expr) const
63+
ssa_exprt symex_level2t::operator()(ssa_exprt ssa_expr) const
6264
{
6365
ssa_expr.set_level_2(current_count(ssa_expr.get_identifier()));
66+
return ssa_expr;
6467
}
6568

6669
void symex_level1t::restore_from(

src/goto-symex/renaming_level.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@ struct symex_renaming_levelt
5656
/// The renaming is built for one particular interleaving.
5757
struct symex_level0t : public symex_renaming_levelt
5858
{
59-
void operator()(ssa_exprt &ssa_expr, const namespacet &ns, unsigned thread_nr)
60-
const;
59+
ssa_exprt operator()(
60+
ssa_exprt ssa_expr,
61+
const namespacet &ns,
62+
unsigned thread_nr) const;
6163

6264
symex_level0t() = default;
6365
~symex_level0t() override = default;
@@ -68,7 +70,7 @@ struct symex_level0t : public symex_renaming_levelt
6870
/// This is to preserve locality in case of recursion
6971
struct symex_level1t : public symex_renaming_levelt
7072
{
71-
void operator()(ssa_exprt &ssa_expr) const;
73+
ssa_exprt operator()(ssa_exprt ssa_expr) const;
7274

7375
/// Insert the content of \p other into this renaming
7476
void restore_from(const current_namest &other);
@@ -82,7 +84,7 @@ struct symex_level1t : public symex_renaming_levelt
8284
/// This is to ensure each variable is only assigned once.
8385
struct symex_level2t : public symex_renaming_levelt
8486
{
85-
void operator()(ssa_exprt &ssa_expr) const;
87+
ssa_exprt operator()(ssa_exprt ssa_expr) const;
8688

8789
symex_level2t() = default;
8890
~symex_level2t() override = default;

0 commit comments

Comments
 (0)