Skip to content

Commit c9244d9

Browse files
danpoetautschnig
authored andcommitted
Do not assign a non-ssa expr to an object that is accessed via an ssa_exprt ref
Previously a variable `expr` of type `exprt &` was cast to `ssa_exprt &` and assigned to variable `ssa`. Later the object was modified via assigning a non-ssa expression to `expr`, violating the invariants of `ssa_exprt`.
1 parent 6c39035 commit c9244d9

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/goto-symex/goto_symex_state.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -285,13 +285,10 @@ goto_symex_statet::rename(exprt expr, const namespacet &ns)
285285
rename<level>(expr.type(), ssa.get_identifier(), ns);
286286
ssa.update_type();
287287

288-
if(l2_thread_read_encoding(ssa, ns))
288+
// renaming taken care of by l2_thread_encoding, or already at L2
289+
if(l2_thread_read_encoding(ssa, ns) || !ssa.get_level_2().empty())
289290
{
290-
// renaming taken care of by l2_thread_encoding
291-
}
292-
else if(!ssa.get_level_2().empty())
293-
{
294-
// already at L2
291+
return renamedt<exprt, level>(std::move(ssa));
295292
}
296293
else
297294
{
@@ -300,11 +297,15 @@ goto_symex_statet::rename(exprt expr, const namespacet &ns)
300297
auto p_it = propagation.find(ssa.get_identifier());
301298

302299
if(p_it.has_value())
303-
expr = *p_it; // already L2
300+
{
301+
return renamedt<exprt, level>(*p_it); // already L2
302+
}
304303
else
304+
{
305305
ssa = set_indices<L2>(std::move(ssa), ns).get();
306+
return renamedt<exprt, level>(std::move(ssa));
307+
}
306308
}
307-
return renamedt<exprt, level>(std::move(ssa));
308309
}
309310
}
310311
else if(expr.id()==ID_symbol)

0 commit comments

Comments
 (0)