Skip to content

Commit 2265305

Browse files
Make set_l1_indices return a renamedt
This carries the information about which renaming the expression has been through. This requires a change in symex_level1t::operator() so that it takes care of the non-empty level 2 case.
1 parent b49354d commit 2265305

File tree

3 files changed

+12
-15
lines changed

3 files changed

+12
-15
lines changed

src/goto-symex/goto_symex_state.cpp

+6-13
Original file line numberDiff line numberDiff line change
@@ -241,17 +241,10 @@ goto_symex_statet::set_l0_indices(ssa_exprt ssa_expr, const namespacet &ns)
241241
return level0(std::move(ssa_expr), ns, source.thread_nr);
242242
}
243243

244-
void goto_symex_statet::set_l1_indices(
245-
ssa_exprt &ssa_expr,
246-
const namespacet &ns)
244+
renamedt<ssa_exprt, L1>
245+
goto_symex_statet::set_l1_indices(ssa_exprt ssa_expr, const namespacet &ns)
247246
{
248-
if(!ssa_expr.get_level_2().empty())
249-
return;
250-
if(!ssa_expr.get_level_1().empty())
251-
return;
252-
renamedt<ssa_exprt, L1> l1 =
253-
level1(level0(std::move(ssa_expr), ns, source.thread_nr));
254-
ssa_expr = l1.get();
247+
return level1(level0(std::move(ssa_expr), ns, source.thread_nr));
255248
}
256249

257250
void goto_symex_statet::set_l2_indices(
@@ -274,7 +267,7 @@ ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
274267
if(level == L0)
275268
ssa = set_l0_indices(std::move(ssa), ns).get();
276269
else if(level == L1)
277-
set_l1_indices(ssa, ns);
270+
ssa = set_l1_indices(std::move(ssa), ns).get();
278271
else
279272
UNREACHABLE;
280273

@@ -309,7 +302,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
309302
}
310303
else if(level==L2)
311304
{
312-
set_l1_indices(ssa, ns);
305+
ssa = set_l1_indices(std::move(ssa), ns).get();
313306
rename<level>(expr.type(), ssa.get_identifier(), ns);
314307
ssa.update_type();
315308

@@ -560,7 +553,7 @@ void goto_symex_statet::rename_address(exprt &expr, const namespacet &ns)
560553
ssa_exprt &ssa=to_ssa_expr(expr);
561554

562555
// only do L1!
563-
set_l1_indices(ssa, ns);
556+
ssa = set_l1_indices(std::move(ssa), ns).get();
564557

565558
rename<level>(expr.type(), ssa.get_identifier(), ns);
566559
ssa.update_type();

src/goto-symex/goto_symex_state.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ class goto_symex_statet final : public goto_statet
117117
renamedt<ssa_exprt, L0> set_l0_indices(ssa_exprt expr, const namespacet &ns);
118118

119119
/// Update level 0 and 1 values.
120-
void set_l1_indices(ssa_exprt &expr, const namespacet &ns);
120+
renamedt<ssa_exprt, L1> set_l1_indices(ssa_exprt expr, const namespacet &ns);
121121

122122
/// Update level 0, 1 and 2 values.
123123
void set_l2_indices(ssa_exprt &expr, const namespacet &ns);

src/goto-symex/renaming_level.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,12 @@ operator()(ssa_exprt ssa_expr, const namespacet &ns, unsigned thread_nr) const
4646
renamedt<ssa_exprt, L1> symex_level1t::
4747
operator()(renamedt<ssa_exprt, L0> l0_expr) const
4848
{
49-
if(!l0_expr.get().get_level_1().empty())
49+
if(
50+
!l0_expr.get().get_level_1().empty() ||
51+
!l0_expr.get().get_level_2().empty())
52+
{
5053
return renamedt<ssa_exprt, L1>{std::move(l0_expr.value)};
54+
}
5155

5256
const irep_idt l0_name = l0_expr.get().get_l1_object_identifier();
5357

0 commit comments

Comments
 (0)