Skip to content

Commit dad8ceb

Browse files
committed
fix for nondeterministic structs
1 parent 8e04241 commit dad8ceb

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
KNOWNBUG
1+
CORE
22
call_no_body2.c
33
--text
44
^EXIT=0$
55
^SIGNAL=0$
6+
^\(\d+\) ∀ ς : state \. S21\(ς\) ⇒ S22\(ς\[❝main::\$tmp::return_value_function_without_body❞\.❝x❞:=nondet::S22-0\]\)$
67
--

regression/cprover/structs/nondet_struct1.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ struct S nondet_S();
88
int main()
99
{
1010
s = nondet_S();
11+
return 0;
1112
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
KNOWNBUG
1+
CORE
22
nondet_struct1.c
33
--text
44
^EXIT=0$
55
^SIGNAL=0$
6+
^\(\d+\) ∀ ς : state \. S20\(ς\) ⇒ S21\(ς\[❝s❞\.❝x❞:=nondet::S21-0\]\[❝s❞\.❝y❞:=nondet::S21-1\]\)$
67
--

src/cprover/state_encoding.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,11 @@ exprt state_encodingt::evaluate_expr_rec(
292292
evaluate_expr_rec(loc, state, is_cstring_expr.op(), bound_symbols);
293293
return binary_predicate_exprt(state, ID_state_is_cstring, pointer);
294294
}
295+
else if(what.id() == ID_side_effect)
296+
{
297+
// leave as is
298+
return what;
299+
}
295300
else
296301
{
297302
exprt tmp = what;
@@ -436,6 +441,13 @@ exprt state_encodingt::assignment_constraint_rec(
436441

437442
if(rhs.id() == ID_struct)
438443
rhs_member = simplify_expr(rhs_member, ns);
444+
else if(
445+
rhs.id() == ID_side_effect &&
446+
to_side_effect_expr(rhs).get_statement() == ID_nondet)
447+
{
448+
rhs_member =
449+
side_effect_expr_nondett(rhs_member.type(), rhs.source_location());
450+
}
439451

440452
new_state = assignment_constraint_rec(
441453
loc, new_state, lhs_member, rhs_member, nondet_symbols);

0 commit comments

Comments
 (0)