[SMTChecker] Support mod

This commit is contained in:
Leonardo Alt
2019-04-12 12:39:25 +02:00
parent 65991c0922
commit af9f16e014
6 changed files with 55 additions and 4 deletions
+8 -4
View File
@@ -347,7 +347,8 @@ void SMTChecker::endVisit(Assignment const& _assignment)
{Token::AssignAdd, Token::Add},
{Token::AssignSub, Token::Sub},
{Token::AssignMul, Token::Mul},
{Token::AssignDiv, Token::Div}
{Token::AssignDiv, Token::Div},
{Token::AssignMod, Token::Mod}
};
Token op = _assignment.assignmentOperator();
if (op != Token::Assign && !compoundToArithmetic.count(op))
@@ -1041,6 +1042,7 @@ void SMTChecker::arithmeticOperation(BinaryOperation const& _op)
case Token::Sub:
case Token::Mul:
case Token::Div:
case Token::Mod:
{
defineExpr(_op, arithmeticOperation(
_op.getOperator(),
@@ -1071,7 +1073,8 @@ smt::Expression SMTChecker::arithmeticOperation(
Token::Add,
Token::Sub,
Token::Mul,
Token::Div
Token::Div,
Token::Mod
};
solAssert(validOperators.count(_op), "");
solAssert(_commonType, "");
@@ -1082,10 +1085,11 @@ smt::Expression SMTChecker::arithmeticOperation(
_op == Token::Add ? _left + _right :
_op == Token::Sub ? _left - _right :
_op == Token::Div ? division(_left, _right, intType) :
/*op == Token::Mul*/ _left * _right
_op == Token::Mul ? _left * _right :
/*_op == Token::Mod*/ _left % _right
);
if (_op == Token::Div)
if (_op == Token::Div || _op == Token::Mod)
{
checkCondition(_right == 0, _location, "Division by zero", "<result>", &_right);
m_interface->addAssertion(_right != 0);