Skip to content

Commit 78ad513

Browse files
committed
Interpreter: don't fail if the if-branch not taken can't be evaluated.
1 parent 6bfaf49 commit 78ad513

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/goto-programs/interpreter_evaluate.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -519,20 +519,20 @@ void interpretert::evaluate(
519519
if(expr.operands().size()!=3)
520520
throw "if expects three operands";
521521

522-
std::vector<mp_integer> tmp0, tmp1, tmp2;
522+
std::vector<mp_integer> tmp0, tmp1;
523523
evaluate(expr.op0(), tmp0);
524-
evaluate(expr.op1(), tmp1);
525-
evaluate(expr.op2(), tmp2);
526524

527-
if(tmp0.size()==1 && tmp1.size()==1 && tmp2.size()==1)
525+
if(tmp0.size()==1)
528526
{
529-
const mp_integer &op0=tmp0.front();
530-
const mp_integer &op1=tmp1.front();
531-
const mp_integer &op2=tmp2.front();
532-
533-
dest.push_back(op0!=0?op1:op2);
527+
if(tmp0.front()!=0)
528+
evaluate(expr.op1(), tmp1);
529+
else
530+
evaluate(expr.op2(), tmp1);
534531
}
535532

533+
if(tmp1.size()==1)
534+
dest.push_back(tmp1.front());
535+
536536
return;
537537
}
538538
else if(expr.id()==ID_and)

0 commit comments

Comments
 (0)