Skip to content

Commit 424b51a

Browse files
rename_level1 takes a copy instead of reference
This makes the interface clearer as there is no argument that is both an input and an output. This also corresponds to how the function was used in a lot of occurences, in which case the code is now simpler. In the cases where we actually what the transformation to happen in-place, we can use std::move.
1 parent 91e3c35 commit 424b51a

File tree

6 files changed

+17
-17
lines changed

6 files changed

+17
-17
lines changed

src/goto-symex/goto_symex_state.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ void goto_symex_statet::assignment(
162162
bool allow_pointer_unsoundness)
163163
{
164164
// identifier should be l0 or l1, make sure it's l1
165-
rename_level1(lhs, ns);
165+
lhs = rename_level1_ssa(std::move(lhs), ns);
166166
irep_idt l1_identifier=lhs.get_identifier();
167167

168168
// the type might need renaming
@@ -353,7 +353,7 @@ goto_symex_statet::rename_level1_ssa(ssa_exprt ssa, const namespacet &ns)
353353
return ssa;
354354
}
355355

356-
void goto_symex_statet::rename_level1(exprt &expr, const namespacet &ns)
356+
exprt goto_symex_statet::rename_level1(exprt expr, const namespacet &ns)
357357
{
358358
renaming_strategyt strategy;
359359
strategy.rename_ssa = [this](ssa_exprt ssa, const namespacet &ns) -> exprt {
@@ -368,6 +368,7 @@ void goto_symex_statet::rename_level1(exprt &expr, const namespacet &ns)
368368
rename(type, irep_idt(), ns, L1);
369369
};
370370
::rename(expr, strategy, ns);
371+
return expr;
371372
}
372373

373374
void goto_symex_statet::rename_level2(exprt &expr, const namespacet &ns)
@@ -596,7 +597,7 @@ void goto_symex_statet::rename_address(
596597
PRECONDITION(level != L0);
597598
auto rename_expr = [&](exprt &e) {
598599
if(level == L1)
599-
rename_level1(e, ns);
600+
e = rename_level1(e, ns);
600601
else
601602
rename_level2(e, ns);
602603
};
@@ -744,7 +745,7 @@ void goto_symex_statet::rename(
744745
if(level == L0)
745746
rename_level0(e, ns);
746747
else if(level == L1)
747-
rename_level1(e, ns);
748+
e = rename_level1(std::move(e), ns);
748749
else
749750
rename_level2(e, ns);
750751
};

src/goto-symex/goto_symex_state.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class goto_symex_statet final : public goto_statet
181181
/// the SSA section of background-concepts.md.
182182
ssa_exprt rename_level0_ssa(ssa_exprt ssa, const namespacet &ns);
183183
ssa_exprt rename_level1_ssa(ssa_exprt expr, const namespacet &ns);
184-
void rename_level1(exprt &expr, const namespacet &ns);
184+
exprt rename_level1(exprt expr, const namespacet &ns);
185185
void rename_level2(exprt &expr, const namespacet &ns);
186186
void rename(
187187
typet &type,

src/goto-symex/symex_dead.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,11 @@ void goto_symext::symex_dead(statet &state)
3737
else
3838
rhs=exprt(ID_invalid);
3939

40-
state.rename_level1(rhs, ns);
41-
state.value_set.assign(ssa, rhs, ns, true, false);
40+
exprt l1_rhs = state.rename_level1(std::move(rhs), ns);
41+
state.value_set.assign(ssa, l1_rhs, ns, true, false);
4242
}
4343

44-
ssa_exprt ssa_lhs=to_ssa_expr(ssa);
45-
const irep_idt &l1_identifier=ssa_lhs.get_identifier();
44+
const irep_idt &l1_identifier = ssa.get_identifier();
4645

4746
// prevent propagation
4847
state.propagation.erase(l1_identifier);

src/goto-symex/symex_decl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ void goto_symext::symex_decl(statet &state, const symbol_exprt &expr)
5353
else
5454
rhs=exprt(ID_invalid);
5555

56-
state.rename_level1(rhs, ns);
57-
state.value_set.assign(ssa, rhs, ns, true, false);
56+
exprt l1_rhs = state.rename_level1(std::move(rhs), ns);
57+
state.value_set.assign(ssa, l1_rhs, ns, true, false);
5858
}
5959

6060
// prevent propagation

src/goto-symex/symex_dereference.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,11 @@ void goto_symext::dereference(exprt &expr, statet &state)
357357
// from different frames. Would be enough to rename
358358
// symbols whose address is taken.
359359
PRECONDITION(!state.call_stack().empty());
360-
state.rename_level1(expr, ns);
360+
expr = state.rename_level1(std::move(expr), ns);
361361

362362
// start the recursion!
363363
dereference_rec(expr, state);
364364
// dereferencing may introduce new symbol_exprt
365365
// (like __CPROVER_memory)
366-
state.rename_level1(expr, ns);
366+
expr = state.rename_level1(std::move(expr), ns);
367367
}

src/goto-symex/symex_function_call.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -427,17 +427,17 @@ static void locality(
427427
// identifiers may be shared among functions
428428
// (e.g., due to inlining or other code restructuring)
429429

430-
state.rename_level1(ssa, ns);
430+
ssa_exprt ssa_l1 = state.rename_level1_ssa(std::move(ssa), ns);
431431

432-
irep_idt l1_name=ssa.get_identifier();
432+
irep_idt l1_name = ssa_l1.get_identifier();
433433
unsigned offset=0;
434434

435435
while(state.l1_history.find(l1_name)!=state.l1_history.end())
436436
{
437437
symex_renaming_levelt::increase_counter(c_it);
438438
++offset;
439-
ssa.set_level_1(frame_nr+offset);
440-
l1_name=ssa.get_identifier();
439+
ssa_l1.set_level_1(frame_nr + offset);
440+
l1_name = ssa_l1.get_identifier();
441441
}
442442

443443
// now unique -- store

0 commit comments

Comments
 (0)