Skip to content

Commit ed51462

Browse files
authored
Merge pull request #8261 from tautschnig/generalise-dealloc-tracking
Make DFCC is_dead_object_update less restrictive
2 parents 0a0879f + 16c619b commit ed51462

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

src/goto-instrument/contracts/dynamic-frames/dfcc_instrument.cpp

+12-10
Original file line numberDiff line numberDiff line change
@@ -757,19 +757,21 @@ dfcc_instrumentt::is_dead_object_update(const exprt &lhs, const exprt &rhs)
757757
{
758758
if(
759759
lhs.id() == ID_symbol &&
760-
to_symbol_expr(lhs).get_identifier() == CPROVER_PREFIX "dead_object")
760+
to_symbol_expr(lhs).get_identifier() == CPROVER_PREFIX "dead_object" &&
761+
rhs.id() == ID_if)
761762
{
762-
// error out if rhs is different from `if_exprt(nondet, ptr, dead_object)`
763-
PRECONDITION(rhs.id() == ID_if);
763+
// only handle `if_exprt(nondet, ptr, dead_object)`
764764
auto &if_expr = to_if_expr(rhs);
765-
PRECONDITION(can_cast_expr<side_effect_expr_nondett>(if_expr.cond()));
766-
PRECONDITION(if_expr.false_case() == lhs);
767-
return if_expr.true_case();
768-
}
769-
else
770-
{
771-
return {};
765+
if(
766+
if_expr.cond().id() == ID_side_effect &&
767+
to_side_effect_expr(if_expr.cond()).get_statement() == ID_nondet &&
768+
if_expr.false_case() == lhs)
769+
{
770+
return if_expr.true_case();
771+
}
772772
}
773+
774+
return {};
773775
}
774776

775777
void dfcc_instrumentt::instrument_assign(

0 commit comments

Comments
 (0)