Skip to content

Commit

Permalink
Symex guards: avoid unnecessary duplicate negation
Browse files Browse the repository at this point in the history
We negated the right-hand side assigned to a guard symbol just so as to
then negate the use of the guard symbol. Remove this duplicate negation.
  • Loading branch information
tautschnig committed Nov 16, 2023
1 parent 74075ec commit 922f564
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,26 @@ test::1::unconditionally_reachable_7[^\s]+ = 7$
test::1::unconditionally_reachable_8[^\s]+ = 7$
test::1::unconditionally_reachable_9[^\s]+ = 7$
test::1::unconditionally_reachable_10[^\s]+ = 7$
test::1::possibly_reachable_1[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::possibly_reachable_1[^\s]+\)$
test::1::possibly_reachable_2[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::possibly_reachable_2[^\s]+\)$
test::1::possibly_reachable_3[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::possibly_reachable_3[^\s]+\)$
test::1::possibly_reachable_4[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::possibly_reachable_4[^\s]+\)$
test::1::possibly_reachable_5[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::possibly_reachable_5[^\s]+\)$
test::1::possibly_reachable_6[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::possibly_reachable_6[^\s]+\)$
test::1::possibly_reachable_7[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::possibly_reachable_7[^\s]+\)$
test::1::possibly_reachable_1[^\s]+ = \(goto_symex::\\guard[^\s]+ \? test::1::possibly_reachable_1[^\s]+ : 7\)$
test::1::possibly_reachable_2[^\s]+ = \(goto_symex::\\guard[^\s]+ \? test::1::possibly_reachable_2[^\s]+ : 7\)$
test::1::possibly_reachable_3[^\s]+ = \(goto_symex::\\guard[^\s]+ \? test::1::possibly_reachable_3[^\s]+ : 7\)$
test::1::possibly_reachable_4[^\s]+ = \(goto_symex::\\guard[^\s]+ \? test::1::possibly_reachable_4[^\s]+ : 7\)$
test::1::possibly_reachable_5[^\s]+ = \(goto_symex::\\guard[^\s]+ \? test::1::possibly_reachable_5[^\s]+ : 7\)$
test::1::possibly_reachable_6[^\s]+ = \(goto_symex::\\guard[^\s]+ \? test::1::possibly_reachable_6[^\s]+ : 7\)$
test::1::possibly_reachable_7[^\s]+ = \(goto_symex::\\guard[^\s]+ \? test::1::possibly_reachable_7[^\s]+ : 7\)$
--
test::1::unconditionally_reachable_1[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_1[^\s]+\)$
test::1::unconditionally_reachable_2[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_2[^\s]+\)$
test::1::unconditionally_reachable_3[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_3[^\s]+\)$
test::1::unconditionally_reachable_4[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_4[^\s]+\)$
test::1::unconditionally_reachable_5[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_5[^\s]+\)$
test::1::unconditionally_reachable_6[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_6[^\s]+\)$
test::1::unconditionally_reachable_7[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_7[^\s]+\)$
test::1::unconditionally_reachable_8[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_8[^\s]+\)$
test::1::unconditionally_reachable_9[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_9[^\s]+\)$
test::1::unconditionally_reachable_10[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_10[^\s]+\)$
test::1::unconditionally_reachable_11[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_11[^\s]+\)$
test::1::unconditionally_reachable_12[^\s]+ = \(goto_symex::\\guard[^\s]+ \? 7 : test::1::unconditionally_reachable_12[^\s]+\)$
test::1::unconditionally_reachable_1[^\s]+ = .+ \?
test::1::unconditionally_reachable_2[^\s]+ = .+ \?
test::1::unconditionally_reachable_3[^\s]+ = .+ \?
test::1::unconditionally_reachable_4[^\s]+ = .+ \?
test::1::unconditionally_reachable_5[^\s]+ = .+ \?
test::1::unconditionally_reachable_6[^\s]+ = .+ \?
test::1::unconditionally_reachable_7[^\s]+ = .+ \?
test::1::unconditionally_reachable_8[^\s]+ = .+ \?
test::1::unconditionally_reachable_9[^\s]+ = .+ \?
test::1::unconditionally_reachable_10[^\s]+ = .+ \?
test::1::unconditionally_reachable_11[^\s]+ = .+ \?
test::1::unconditionally_reachable_12[^\s]+ = .+ \?
test::1::unreachable_1[^\s]+ = 7$
test::1::unreachable_2[^\s]+ = 7$
test::1::unreachable_3[^\s]+ = 7$
Expand Down
2 changes: 1 addition & 1 deletion regression/cbmc/unreachable-goto2/test-vccs.desc
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ CORE paths-lifo-expected-failure
test.c
--show-vcc
^Generated 1 VCC\(s\), 1 remaining after simplification$
^\{1\} goto_symex::\\guard#1$
^\{1\} ¬goto_symex::\\guard#1$
^EXIT=0$
^SIGNAL=0$
--
Expand Down
11 changes: 6 additions & 5 deletions src/goto-symex/symex_goto.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -490,12 +490,11 @@ void goto_symext::symex_goto(statet &state)
{
symbol_exprt guard_symbol_expr =
symbol_exprt(statet::guard_identifier(), bool_typet());
exprt new_rhs = boolean_negate(new_guard);

ssa_exprt new_lhs =
state.rename_ssa<L1>(ssa_exprt{guard_symbol_expr}, ns).get();
new_lhs =
state.assignment(std::move(new_lhs), new_rhs, ns, true, false).get();
state.assignment(std::move(new_lhs), new_guard, ns, true, false).get();

guardt guard{true_exprt{}, guard_manager};

Expand All @@ -509,12 +508,14 @@ void goto_symext::symex_goto(statet &state)

target.assignment(
guard.as_expr(),
new_lhs, new_lhs, guard_symbol_expr,
new_rhs,
new_lhs,
new_lhs,
guard_symbol_expr,
new_guard,
original_source,
symex_targett::assignment_typet::GUARD);

guard_expr = state.rename(boolean_negate(guard_symbol_expr), ns).get();
guard_expr = state.rename(guard_symbol_expr, ns).get();
}

if(state.has_saved_jump_target)
Expand Down

0 comments on commit 922f564

Please sign in to comment.