Skip to content

Commit 0bd3e06

Browse files
Make the result of rename be a renamedt
This makes explicit the fact that the expression has been renamed.
1 parent e1aefbf commit 0bd3e06

13 files changed

+154
-146
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
@@ -163,15 +163,16 @@ void goto_symex_statet::assignment(
163163
bool allow_pointer_unsoundness)
164164
{
165165
// identifier should be l0 or l1, make sure it's l1
166-
lhs = rename_ssa<L1>(std::move(lhs), ns);
166+
renamedt<ssa_exprt, L1> l1_lhs = rename_ssa<L1>(std::move(lhs), ns);
167167
irep_idt l1_identifier=lhs.get_identifier();
168168

169169
// the type might need renaming
170-
rename<L2>(lhs.type(), l1_identifier, ns);
171-
lhs.update_type();
170+
rename<L2>(l1_lhs.value.type(), l1_identifier, ns);
171+
l1_lhs.value.update_type();
172172
if(run_validation_checks)
173173
{
174-
DATA_INVARIANT(!check_renaming_l1(lhs), "lhs renaming failed on l1");
174+
DATA_INVARIANT(
175+
!check_renaming_l1(l1_lhs.value), "lhs renaming failed on l1");
175176
}
176177

177178
#if 0
@@ -184,7 +185,8 @@ void goto_symex_statet::assignment(
184185

185186
// do the l2 renaming
186187
const auto level2_it =
187-
level2.current_names.emplace(l1_identifier, std::make_pair(lhs, 0)).first;
188+
level2.current_names.emplace(l1_identifier, std::make_pair(l1_lhs.value, 0))
189+
.first;
188190
symex_renaming_levelt::increase_counter(level2_it);
189191
set_l2_indices(lhs, ns);
190192

@@ -264,7 +266,8 @@ void goto_symex_statet::set_l2_indices(
264266
}
265267

266268
template <levelt level>
267-
ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
269+
renamedt<ssa_exprt, level>
270+
goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
268271
{
269272
static_assert(
270273
level == L0 || level == L1,
@@ -278,15 +281,16 @@ ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
278281

279282
rename<level>(ssa.type(), ssa.get_identifier(), ns);
280283
ssa.update_type();
281-
return ssa;
284+
return renamedt<ssa_exprt, level>{ssa};
282285
}
283286

284287
/// Ensure `rename_ssa` gets compiled for L0
285-
template ssa_exprt
288+
template renamedt<ssa_exprt, L0>
286289
goto_symex_statet::rename_ssa<L0>(ssa_exprt ssa, const namespacet &ns);
287290

288291
template <levelt level>
289-
exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
292+
renamedt<exprt, level>
293+
goto_symex_statet::rename(exprt expr, const namespacet &ns)
290294
{
291295
// rename all the symbols with their last known value
292296

@@ -297,11 +301,11 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
297301

298302
if(level == L0)
299303
{
300-
ssa = rename_ssa<L0>(std::move(ssa), ns);
304+
ssa = rename_ssa<L0>(std::move(ssa), ns).value;
301305
}
302306
else if(level == L1)
303307
{
304-
ssa = rename_ssa<L1>(std::move(ssa), ns);
308+
ssa = rename_ssa<L1>(std::move(ssa), ns).value;
305309
}
306310
else if(level==L2)
307311
{
@@ -336,7 +340,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
336340
if(as_const(expr).type().id() == ID_code)
337341
rename<level>(expr.type(), to_symbol_expr(expr).get_identifier(), ns);
338342
else
339-
expr = rename<level>(ssa_exprt{expr}, ns);
343+
expr = rename<level>(ssa_exprt{expr}, ns).value;
340344
}
341345
else if(expr.id()==ID_address_of)
342346
{
@@ -351,7 +355,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
351355

352356
// do this recursively
353357
Forall_operands(it, expr)
354-
*it = rename<level>(std::move(*it), ns);
358+
*it = rename<level>(std::move(*it), ns).value;
355359

356360
const exprt &c_expr = as_const(expr);
357361
INVARIANT(
@@ -363,7 +367,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
363367
"Type of renamed expr should be the same as operands for with_exprt and "
364368
"if_exprt");
365369
}
366-
return expr;
370+
return renamedt<exprt, level>{expr};
367371
}
368372

369373
/// thread encoding
@@ -573,13 +577,14 @@ void goto_symex_statet::rename_address(exprt &expr, const namespacet &ns)
573577
expr.type() = to_array_type(index_expr.array().type()).subtype();
574578

575579
// the index is not an address
576-
index_expr.index() = rename<level>(std::move(index_expr.index()), ns);
580+
index_expr.index() =
581+
rename<level>(std::move(index_expr.index()), ns).value;
577582
}
578583
else if(expr.id()==ID_if)
579584
{
580585
// the condition is not an address
581586
if_exprt &if_expr=to_if_expr(expr);
582-
if_expr.cond() = rename<level>(std::move(if_expr.cond()), ns);
587+
if_expr.cond() = rename<level>(std::move(if_expr.cond()), ns).value;
583588
rename_address<level>(if_expr.true_case(), ns);
584589
rename_address<level>(if_expr.false_case(), ns);
585590

@@ -718,7 +723,7 @@ void goto_symex_statet::rename(
718723
{
719724
auto &array_type = to_array_type(type);
720725
rename<level>(array_type.subtype(), irep_idt(), ns);
721-
array_type.size() = rename<level>(std::move(array_type.size()), ns);
726+
array_type.size() = rename<level>(std::move(array_type.size()), ns).value;
722727
}
723728
else if(type.id() == ID_struct || type.id() == ID_union)
724729
{
@@ -731,7 +736,8 @@ void goto_symex_statet::rename(
731736
if(component.type().id() == ID_array)
732737
{
733738
auto &array_type = to_array_type(component.type());
734-
array_type.size() = rename<level>(std::move(array_type.size()), ns);
739+
array_type.size() =
740+
rename<level>(std::move(array_type.size()), ns).value;
735741
}
736742
else if(component.type().id() != ID_pointer)
737743
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
@@ -177,12 +177,12 @@ class goto_symex_statet final : public goto_statet
177177
/// A full explanation of SSA (which is why we do this renaming) is in
178178
/// the SSA section of background-concepts.md.
179179
template <levelt level = L2>
180-
exprt rename(exprt expr, const namespacet &ns);
180+
renamedt<exprt, level> rename(exprt expr, const namespacet &ns);
181181

182182
/// Version of rename which is specialized for SSA exprt.
183183
/// Implementation only exists for level L0 and L1.
184184
template <levelt level>
185-
ssa_exprt rename_ssa(ssa_exprt ssa, const namespacet &ns);
185+
renamedt<ssa_exprt, level> rename_ssa(ssa_exprt ssa, const namespacet &ns);
186186

187187
template <levelt level = L2>
188188
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
@@ -212,13 +212,13 @@ void goto_symext::symex_assign_symbol(
212212
tmp_ssa_rhs.swap(ssa_rhs);
213213
}
214214

215-
exprt l2_rhs = state.rename(std::move(ssa_rhs), ns);
216-
do_simplify(l2_rhs);
215+
renamedt<exprt, L2> l2_rhs = state.rename(std::move(ssa_rhs), ns);
216+
do_simplify(l2_rhs.value);
217217

218218
ssa_exprt ssa_lhs=lhs;
219219
state.assignment(
220220
ssa_lhs,
221-
l2_rhs,
221+
l2_rhs.value,
222222
ns,
223223
symex_config.simplify_opt,
224224
symex_config.constant_propagation,
@@ -228,7 +228,7 @@ void goto_symext::symex_assign_symbol(
228228
ssa_full_lhs=add_to_lhs(ssa_full_lhs, ssa_lhs);
229229
const bool record_events=state.record_events;
230230
state.record_events=false;
231-
exprt l2_full_lhs = state.rename(std::move(ssa_full_lhs), ns);
231+
renamedt<exprt, L2> l2_full_lhs = state.rename(std::move(ssa_full_lhs), ns);
232232
state.record_events=record_events;
233233

234234
guardt tmp_guard(state.guard);
@@ -254,9 +254,9 @@ void goto_symext::symex_assign_symbol(
254254
target.assignment(
255255
tmp_guard.as_expr(),
256256
ssa_lhs,
257-
l2_full_lhs,
257+
l2_full_lhs.value,
258258
add_to_lhs(full_lhs, ssa_lhs.get_original_expr()),
259-
l2_rhs,
259+
l2_rhs.value,
260260
state.source,
261261
assignment_type);
262262
}
@@ -407,20 +407,20 @@ void goto_symext::symex_assign_if(
407407

408408
guardt old_guard=guard;
409409

410-
exprt renamed_guard = state.rename(lhs.cond(), ns);
411-
do_simplify(renamed_guard);
410+
renamedt<exprt, L2> renamed_guard = state.rename(lhs.cond(), ns);
411+
do_simplify(renamed_guard.value);
412412

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

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

0 commit comments

Comments
 (0)