mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
added warning for noninitialized references in storage.
This commit is contained in:
@@ -45,7 +45,7 @@ namespace
|
||||
{
|
||||
|
||||
pair<ASTPointer<SourceUnit>, shared_ptr<Exception const>>
|
||||
parseAnalyseAndReturnError(string const& _source)
|
||||
parseAnalyseAndReturnError(string const& _source, bool _warning = false)
|
||||
{
|
||||
Parser parser;
|
||||
ASTPointer<SourceUnit> sourceUnit;
|
||||
@@ -74,7 +74,19 @@ parseAnalyseAndReturnError(string const& _source)
|
||||
TypeChecker typeChecker;
|
||||
if (!typeChecker.checkTypeRequirements(*contract))
|
||||
{
|
||||
err = typeChecker.errors().front();
|
||||
for (auto const& firstError: typeChecker.errors())
|
||||
{
|
||||
if (!dynamic_pointer_cast<Warning const>(firstError))
|
||||
{
|
||||
err = firstError;
|
||||
break;
|
||||
}
|
||||
else if (_warning)
|
||||
{
|
||||
err = firstError;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -101,9 +113,9 @@ ASTPointer<SourceUnit> parseAndAnalyse(string const& _source)
|
||||
return sourceAndError.first;
|
||||
}
|
||||
|
||||
shared_ptr<Exception const> parseAndAnalyseReturnError(std::string const& _source)
|
||||
shared_ptr<Exception const> parseAndAnalyseReturnError(std::string const& _source, bool _warning = false)
|
||||
{
|
||||
auto sourceAndError = parseAnalyseAndReturnError(_source);
|
||||
auto sourceAndError = parseAnalyseAndReturnError(_source, _warning);
|
||||
BOOST_REQUIRE(!!sourceAndError.second);
|
||||
return sourceAndError.second;
|
||||
}
|
||||
@@ -119,8 +131,10 @@ static ContractDefinition const* retrieveContract(ASTPointer<SourceUnit> _source
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static FunctionTypePointer const& retrieveFunctionBySignature(ContractDefinition const* _contract,
|
||||
std::string const& _signature)
|
||||
static FunctionTypePointer const& retrieveFunctionBySignature(
|
||||
ContractDefinition const* _contract,
|
||||
std::string const& _signature
|
||||
)
|
||||
{
|
||||
FixedHash<4> hash(dev::sha3(_signature));
|
||||
return _contract->interfaceFunctions()[hash];
|
||||
@@ -155,8 +169,8 @@ BOOST_AUTO_TEST_CASE(double_stateVariable_declaration)
|
||||
BOOST_AUTO_TEST_CASE(double_function_declaration)
|
||||
{
|
||||
char const* text = "contract test {\n"
|
||||
" function fun() { var x; }\n"
|
||||
" function fun() { var x; }\n"
|
||||
" function fun() { uint x; }\n"
|
||||
" function fun() { uint x; }\n"
|
||||
"}\n";
|
||||
SOLIDITY_CHECK_ERROR_TYPE(parseAndAnalyseReturnError(text), DeclarationError);
|
||||
}
|
||||
@@ -2333,7 +2347,7 @@ BOOST_AUTO_TEST_CASE(non_initialized_references)
|
||||
}
|
||||
}
|
||||
)";
|
||||
SOLIDITY_CHECK_ERROR_TYPE(parseAndAnalyseReturnError(text), TypeError);
|
||||
SOLIDITY_CHECK_ERROR_TYPE(parseAndAnalyseReturnError(text, true), Warning);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
Reference in New Issue
Block a user