Fix expression creation problems.

This commit is contained in:
chriseth 2017-10-05 19:39:29 +02:00
parent 00e252a39f
commit a256983320

View File

@ -207,7 +207,10 @@ void SMTChecker::endVisit(Assignment const& _assignment)
{
Declaration const* decl = identifier->annotation().referencedDeclaration;
if (knownVariable(*decl))
{
assignment(*decl, _assignment.rightHandSide(), _assignment.location());
defineExpr(_assignment, expr(_assignment.rightHandSide()));
}
else
m_errorReporter.warning(
_assignment.location(),
@ -778,13 +781,20 @@ smt::Expression SMTChecker::maxValue(IntegerType const& _t)
smt::Expression SMTChecker::expr(Expression const& _e)
{
solAssert(m_expressions.count(&_e), "");
if (!m_expressions.count(&_e))
{
m_errorReporter.warning(_e.location(), "Internal error: Expression undefined for SMT solver." );
createExpr(_e);
}
return m_expressions.at(&_e);
}
void SMTChecker::createExpr(Expression const& _e)
{
solAssert(!m_expressions.count(&_e), "");
if (m_expressions.count(&_e))
m_errorReporter.warning(_e.location(), "Internal error: Expression created twice in SMT solver." );
else
{
solAssert(_e.annotation().type, "");
switch (_e.annotation().type->category())
{
@ -805,6 +815,7 @@ void SMTChecker::createExpr(Expression const& _e)
solAssert(false, "Type not implemented.");
}
}
}
void SMTChecker::defineExpr(Expression const& _e, smt::Expression _value)
{