Fix ICE in constants

This commit is contained in:
Leo Alt
2021-08-12 10:53:01 +02:00
parent cc4e24c200
commit 10397e440c
23 changed files with 497 additions and 350 deletions
+1 -1
View File
@@ -80,7 +80,7 @@ void BMC::analyze(SourceUnit const& _source, map<ASTNode const*, set<Verificatio
{
m_solvedTargets = move(_solvedTargets);
m_context.setSolver(m_interface.get());
m_context.clear();
m_context.reset();
m_context.setAssertionAccumulation(true);
m_variableUsage.setFunctionInlining(shouldInlineFunctionCall);
createFreeConstants(sourceDependencies(_source));
+1 -1
View File
@@ -967,7 +967,7 @@ void CHC::resetSourceAnalysis()
m_context.setSolver(smtlib2Interface->smtlib2Interface());
}
m_context.clear();
m_context.reset();
m_context.resetUniqueId();
m_context.setAssertionAccumulation(false);
}
-6
View File
@@ -49,12 +49,6 @@ unsigned EncodingContext::newUniqueId()
return m_nextUniqueId++;
}
void EncodingContext::clear()
{
m_variables.clear();
reset();
}
/// Variables.
shared_ptr<SymbolicVariable> EncodingContext::variable(frontend::VariableDeclaration const& _varDecl)
+9
View File
@@ -3034,6 +3034,15 @@ void SMTEncoder::createFreeConstants(set<SourceUnit const*, ASTNode::CompareByID
for (auto node: source->nodes())
if (auto var = dynamic_cast<VariableDeclaration const*>(node.get()))
createVariable(*var);
else if (
auto contract = dynamic_cast<ContractDefinition const*>(node.get());
contract && contract->isLibrary()
)
for (auto var: contract->stateVariables())
{
solAssert(var->isConstant(), "");
createVariable(*var);
}
}
smt::SymbolicState& SMTEncoder::state()