mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Fix problem with non-value-typed variables.
This commit is contained in:
parent
19d5c42429
commit
8538a25f8d
@ -592,21 +592,17 @@ smt::CheckResult SMTChecker::checkSatisifable()
|
||||
void SMTChecker::initializeLocalVariables(FunctionDefinition const& _function)
|
||||
{
|
||||
for (auto const& variable: _function.localVariables())
|
||||
{
|
||||
createVariable(*variable);
|
||||
setZeroValue(*variable);
|
||||
}
|
||||
if (createVariable(*variable))
|
||||
setZeroValue(*variable);
|
||||
|
||||
for (auto const& param: _function.parameters())
|
||||
{
|
||||
createVariable(*param);
|
||||
setUnknownValue(*param);
|
||||
}
|
||||
if (createVariable(*param))
|
||||
setUnknownValue(*param);
|
||||
|
||||
if (_function.returnParameterList())
|
||||
for (auto const& retParam: _function.returnParameters())
|
||||
{
|
||||
createVariable(*retParam);
|
||||
setZeroValue(*retParam);
|
||||
}
|
||||
if (createVariable(*retParam))
|
||||
setZeroValue(*retParam);
|
||||
}
|
||||
|
||||
void SMTChecker::resetVariables(vector<Declaration const*> _variables)
|
||||
@ -618,7 +614,7 @@ void SMTChecker::resetVariables(vector<Declaration const*> _variables)
|
||||
}
|
||||
}
|
||||
|
||||
void SMTChecker::createVariable(VariableDeclaration const& _varDecl)
|
||||
bool SMTChecker::createVariable(VariableDeclaration const& _varDecl)
|
||||
{
|
||||
if (dynamic_cast<IntegerType const*>(_varDecl.type().get()))
|
||||
{
|
||||
@ -628,12 +624,16 @@ void SMTChecker::createVariable(VariableDeclaration const& _varDecl)
|
||||
m_currentSequenceCounter[&_varDecl] = 0;
|
||||
m_nextFreeSequenceCounter[&_varDecl] = 1;
|
||||
m_variables.emplace(&_varDecl, m_interface->newFunction(uniqueSymbol(_varDecl), smt::Sort::Int, smt::Sort::Int));
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_errorReporter.warning(
|
||||
_varDecl.location(),
|
||||
"Assertion checker does not yet support the type of this variable."
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
string SMTChecker::uniqueSymbol(Declaration const& _decl)
|
||||
|
@ -96,7 +96,9 @@ private:
|
||||
|
||||
void initializeLocalVariables(FunctionDefinition const& _function);
|
||||
void resetVariables(std::vector<Declaration const*> _variables);
|
||||
void createVariable(VariableDeclaration const& _varDecl);
|
||||
/// Tries to create an uninitialized variable and returns true on success.
|
||||
/// This fails if the type is not supported.
|
||||
bool createVariable(VariableDeclaration const& _varDecl);
|
||||
|
||||
static std::string uniqueSymbol(Declaration const& _decl);
|
||||
static std::string uniqueSymbol(Expression const& _expr);
|
||||
|
Loading…
Reference in New Issue
Block a user