Skip to content

Commit 95a8dbc

Browse files
Make the result of rename be a renamedt
This makes explicit the fact that the expression has been renamed.
1 parent 9eb9d70 commit 95a8dbc

13 files changed

+152
-142
lines changed

src/goto-instrument/accelerate/scratch_program.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ bool scratch_programt::check_sat(bool do_slice)
6969

7070
exprt scratch_programt::eval(const exprt &e)
7171
{
72-
return checker->get(symex_state->rename<L2>(e, ns));
72+
return checker->get(symex_state->rename<L2>(e, ns).value);
7373
}
7474

7575
void scratch_programt::append(goto_programt::instructionst &new_instructions)

src/goto-symex/goto_symex_state.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,16 @@ void goto_symex_statet::assignment(
165165
bool allow_pointer_unsoundness)
166166
{
167167
// identifier should be l0 or l1, make sure it's l1
168-
lhs = rename_ssa<L1>(std::move(lhs), ns);
168+
renamedt<ssa_exprt, L1> l1_lhs = rename_ssa<L1>(std::move(lhs), ns);
169169
irep_idt l1_identifier=lhs.get_identifier();
170170

171171
// the type might need renaming
172-
rename<L2>(lhs.type(), l1_identifier, ns);
173-
lhs.update_type();
172+
rename<L2>(l1_lhs.value.type(), l1_identifier, ns);
173+
l1_lhs.value.update_type();
174174
if(run_validation_checks)
175175
{
176-
DATA_INVARIANT(!check_renaming_l1(lhs), "lhs renaming failed on l1");
176+
DATA_INVARIANT(
177+
!check_renaming_l1(l1_lhs.value), "lhs renaming failed on l1");
177178
}
178179

179180
#if 0
@@ -186,7 +187,8 @@ void goto_symex_statet::assignment(
186187

187188
// do the l2 renaming
188189
const auto level2_it =
189-
level2.current_names.emplace(l1_identifier, std::make_pair(lhs, 0)).first;
190+
level2.current_names.emplace(l1_identifier, std::make_pair(l1_lhs.value, 0))
191+
.first;
190192
symex_renaming_levelt::increase_counter(level2_it);
191193
set_l2_indices(lhs, ns);
192194

@@ -269,7 +271,8 @@ void goto_symex_statet::set_l2_indices(
269271
}
270272

271273
template <levelt level>
272-
ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
274+
renamedt<ssa_exprt, level>
275+
goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
273276
{
274277
static_assert(
275278
level == L0 || level == L1,
@@ -283,17 +286,18 @@ ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
283286

284287
rename<level>(ssa.type(), ssa.get_identifier(), ns);
285288
ssa.update_type();
286-
return ssa;
289+
return renamedt<ssa_exprt, level>{ssa};
287290
}
288291

289292
/// Ensure `rename_ssa` gets compiled for L0
290-
template ssa_exprt
293+
template renamedt<ssa_exprt, L0>
291294
goto_symex_statet::rename_ssa<L0>(ssa_exprt ssa, const namespacet &ns);
292295
template ssa_exprt
293296
goto_symex_statet::rename_ssa<L1>(ssa_exprt ssa, const namespacet &ns);
294297

295298
template <levelt level>
296-
exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
299+
renamedt<exprt, level>
300+
goto_symex_statet::rename(exprt expr, const namespacet &ns)
297301
{
298302
// rename all the symbols with their last known value
299303

@@ -304,11 +308,11 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
304308

305309
if(level == L0)
306310
{
307-
ssa = rename_ssa<L0>(std::move(ssa), ns);
311+
ssa = rename_ssa<L0>(std::move(ssa), ns).value;
308312
}
309313
else if(level == L1)
310314
{
311-
ssa = rename_ssa<L1>(std::move(ssa), ns);
315+
ssa = rename_ssa<L1>(std::move(ssa), ns).value;
312316
}
313317
else if(level==L2)
314318
{
@@ -345,7 +349,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
345349
if(type.id() == ID_code || type.id() == ID_mathematical_function)
346350
rename<level>(expr.type(), to_symbol_expr(expr).get_identifier(), ns);
347351
else
348-
expr = rename<level>(ssa_exprt{expr}, ns);
352+
expr = rename<level>(ssa_exprt{expr}, ns).value;
349353
}
350354
else if(expr.id()==ID_address_of)
351355
{
@@ -360,7 +364,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
360364

361365
// do this recursively
362366
Forall_operands(it, expr)
363-
*it = rename<level>(std::move(*it), ns);
367+
*it = rename<level>(std::move(*it), ns).value;
364368

365369
const exprt &c_expr = as_const(expr);
366370
INVARIANT(
@@ -372,7 +376,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
372376
"Type of renamed expr should be the same as operands for with_exprt and "
373377
"if_exprt");
374378
}
375-
return expr;
379+
return renamedt<exprt, level>{expr};
376380
}
377381

378382
template exprt goto_symex_statet::rename<L1>(exprt expr, const namespacet &ns);
@@ -584,13 +588,14 @@ void goto_symex_statet::rename_address(exprt &expr, const namespacet &ns)
584588
expr.type() = to_array_type(index_expr.array().type()).subtype();
585589

586590
// the index is not an address
587-
index_expr.index() = rename<level>(std::move(index_expr.index()), ns);
591+
index_expr.index() =
592+
rename<level>(std::move(index_expr.index()), ns).value;
588593
}
589594
else if(expr.id()==ID_if)
590595
{
591596
// the condition is not an address
592597
if_exprt &if_expr=to_if_expr(expr);
593-
if_expr.cond() = rename<level>(std::move(if_expr.cond()), ns);
598+
if_expr.cond() = rename<level>(std::move(if_expr.cond()), ns).value;
594599
rename_address<level>(if_expr.true_case(), ns);
595600
rename_address<level>(if_expr.false_case(), ns);
596601

@@ -723,7 +728,7 @@ void goto_symex_statet::rename(
723728
{
724729
auto &array_type = to_array_type(type);
725730
rename<level>(array_type.subtype(), irep_idt(), ns);
726-
array_type.size() = rename<level>(std::move(array_type.size()), ns);
731+
array_type.size() = rename<level>(std::move(array_type.size()), ns).value;
727732
}
728733
else if(type.id() == ID_struct || type.id() == ID_union)
729734
{
@@ -736,7 +741,8 @@ void goto_symex_statet::rename(
736741
if(component.type().id() == ID_array)
737742
{
738743
auto &array_type = to_array_type(component.type());
739-
array_type.size() = rename<level>(std::move(array_type.size()), ns);
744+
array_type.size() =
745+
rename<level>(std::move(array_type.size()), ns).value;
740746
}
741747
else if(component.type().id() != ID_pointer)
742748
rename<level>(component.type(), irep_idt(), ns);

src/goto-symex/goto_symex_state.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@ class goto_symex_statet final : public goto_statet
9191
/// A full explanation of SSA (which is why we do this renaming) is in
9292
/// the SSA section of background-concepts.md.
9393
template <levelt level = L2>
94-
exprt rename(exprt expr, const namespacet &ns);
94+
renamedt<exprt, level> rename(exprt expr, const namespacet &ns);
9595

9696
/// Version of rename which is specialized for SSA exprt.
9797
/// Implementation only exists for level L0 and L1.
9898
template <levelt level>
99-
ssa_exprt rename_ssa(ssa_exprt ssa, const namespacet &ns);
99+
renamedt<ssa_exprt, level> rename_ssa(ssa_exprt ssa, const namespacet &ns);
100100

101101
template <levelt level = L2>
102102
void rename(typet &type, const irep_idt &l1_identifier, const namespacet &ns);

src/goto-symex/symex_assign.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -210,13 +210,13 @@ void goto_symext::symex_assign_symbol(
210210
tmp_ssa_rhs.swap(ssa_rhs);
211211
}
212212

213-
exprt l2_rhs = state.rename(std::move(ssa_rhs), ns);
214-
do_simplify(l2_rhs);
213+
renamedt<exprt, L2> l2_rhs = state.rename(std::move(ssa_rhs), ns);
214+
do_simplify(l2_rhs.value);
215215

216216
ssa_exprt ssa_lhs=lhs;
217217
state.assignment(
218218
ssa_lhs,
219-
l2_rhs,
219+
l2_rhs.value,
220220
ns,
221221
symex_config.simplify_opt,
222222
symex_config.constant_propagation,
@@ -226,7 +226,7 @@ void goto_symext::symex_assign_symbol(
226226
ssa_full_lhs=add_to_lhs(ssa_full_lhs, ssa_lhs);
227227
const bool record_events=state.record_events;
228228
state.record_events=false;
229-
exprt l2_full_lhs = state.rename(std::move(ssa_full_lhs), ns);
229+
renamedt<exprt, L2> l2_full_lhs = state.rename(std::move(ssa_full_lhs), ns);
230230
state.record_events=record_events;
231231

232232
guardt tmp_guard(state.guard);
@@ -252,9 +252,9 @@ void goto_symext::symex_assign_symbol(
252252
target.assignment(
253253
tmp_guard.as_expr(),
254254
ssa_lhs,
255-
l2_full_lhs,
255+
l2_full_lhs.value,
256256
add_to_lhs(full_lhs, ssa_lhs.get_original_expr()),
257-
l2_rhs,
257+
l2_rhs.value,
258258
state.source,
259259
assignment_type);
260260
}
@@ -405,20 +405,20 @@ void goto_symext::symex_assign_if(
405405

406406
guardt old_guard=guard;
407407

408-
exprt renamed_guard = state.rename(lhs.cond(), ns);
409-
do_simplify(renamed_guard);
408+
renamedt<exprt, L2> renamed_guard = state.rename(lhs.cond(), ns);
409+
do_simplify(renamed_guard.value);
410410

411-
if(!renamed_guard.is_false())
411+
if(!renamed_guard.value.is_false())
412412
{
413-
guard.add(renamed_guard);
413+
guard.add(renamed_guard.value);
414414
symex_assign_rec(
415415
state, lhs.true_case(), full_lhs, rhs, guard, assignment_type);
416416
guard = std::move(old_guard);
417417
}
418418

419-
if(!renamed_guard.is_true())
419+
if(!renamed_guard.value.is_true())
420420
{
421-
guard.add(not_exprt(renamed_guard));
421+
guard.add(not_exprt(renamed_guard.value));
422422
symex_assign_rec(
423423
state, lhs.false_case(), full_lhs, rhs, guard, assignment_type);
424424
guard = std::move(old_guard);

0 commit comments

Comments
 (0)