Skip to content

Commit 42e4253

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 bd02c41 commit 42e4253

File tree

3 files changed

+19
-16
lines changed

3 files changed

+19
-16
lines changed

src/goto-symex/goto_symex_state.cpp

Lines changed: 11 additions & 14 deletions
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(
@@ -277,7 +270,10 @@ ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
277270
ssa = ssa_l0.get();
278271
}
279272
else if(level == L1)
280-
set_l1_indices(ssa, ns);
273+
{
274+
const renamedt<ssa_exprt, L1> ssa_l1 = set_l1_indices(std::move(ssa), ns);
275+
ssa = ssa_l1.get();
276+
}
281277
else
282278
UNREACHABLE;
283279

@@ -312,7 +308,8 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
312308
}
313309
else if(level==L2)
314310
{
315-
set_l1_indices(ssa, ns);
311+
const renamedt<ssa_exprt, L1> ssa_l1 = set_l1_indices(std::move(ssa), ns);
312+
ssa = ssa_l1.get();
316313
rename<level>(expr.type(), ssa.get_identifier(), ns);
317314
ssa.update_type();
318315

@@ -563,8 +560,8 @@ void goto_symex_statet::rename_address(exprt &expr, const namespacet &ns)
563560
ssa_exprt &ssa=to_ssa_expr(expr);
564561

565562
// only do L1!
566-
set_l1_indices(ssa, ns);
567-
563+
const renamedt<ssa_exprt, L1> ssa_l1 = set_l1_indices(std::move(ssa), ns);
564+
ssa = ssa_l1.get();
568565
rename<level>(expr.type(), ssa.get_identifier(), ns);
569566
ssa.update_type();
570567
}

src/goto-symex/goto_symex_state.h

Lines changed: 1 addition & 1 deletion
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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,14 @@ 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+
{
53+
// TODO reaching here means the information that l0_expr was L1 or L2 has
54+
// TODO been lost somewhere during execution, which should be avoided
5055
return renamedt<ssa_exprt, L1>{std::move(l0_expr.value)};
56+
}
5157

5258
const irep_idt l0_name = l0_expr.get().get_l1_object_identifier();
5359

0 commit comments

Comments
 (0)