Skip to content

Commit 23c4945

Browse files
Add a rename_level1 function
1 parent 21184db commit 23c4945

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/goto-symex/goto_symex_state.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,45 @@ void goto_symex_statet::rename_level0(exprt &expr, const namespacet &ns)
320320
}
321321
}
322322

323+
void goto_symex_statet::rename_level1(exprt &expr, const namespacet &ns)
324+
{
325+
// rename all the symbols with their last known value
326+
if(auto ssa = expr_try_dynamic_cast<ssa_exprt>(expr))
327+
{
328+
set_l1_indices(level0, level1, *ssa, source.thread_nr, ns);
329+
rename(expr.type(), ssa->get_identifier(), ns, L1);
330+
ssa->update_type();
331+
}
332+
else if(expr.id() == ID_symbol)
333+
{
334+
// we never rename function symbols
335+
if(expr.type().id() == ID_code)
336+
{
337+
rename(expr.type(), to_symbol_expr(expr).get_identifier(), ns, L1);
338+
return;
339+
}
340+
341+
expr = ssa_exprt(expr);
342+
rename_level1(expr, ns);
343+
}
344+
else if(auto address_of_expr = expr_try_dynamic_cast<address_of_exprt>(expr))
345+
{
346+
rename_address(address_of_expr->object(), ns, L1);
347+
to_pointer_type(expr.type()).subtype() = address_of_expr->object().type();
348+
}
349+
else
350+
{
351+
// this could go wrong, but we would have to re-typecheck ...
352+
rename(expr.type(), irep_idt(), ns, L1);
353+
354+
// do this recursively
355+
for(auto &op : expr.operands())
356+
rename_level1(op, ns);
357+
358+
fix_type(expr);
359+
}
360+
}
361+
323362
void goto_symex_statet::rename(
324363
exprt &expr,
325364
const namespacet &ns,

src/goto-symex/goto_symex_state.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class goto_symex_statet final
7373
// performs renaming _up to_ the given level
7474
void rename(exprt &expr, const namespacet &ns, levelt level=L2);
7575
void rename_level0(exprt &expr, const namespacet &ns);
76+
void rename_level1(exprt &expr, const namespacet &ns);
7677
void rename(
7778
typet &type,
7879
const irep_idt &l1_identifier,

0 commit comments

Comments
 (0)