diff options
author | chriseth <chris@ethereum.org> | 2018-08-13 23:27:29 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-13 23:27:29 +0800 |
commit | 3dd31b704af6c50bc56217fd07266f7872daaa44 (patch) | |
tree | a88f8531d6330baff08194dbb77e9dcb1b097f69 /libsolidity/analysis | |
parent | ae8218543b91a98663ab98de3200a0eec2bfebe3 (diff) | |
parent | dfcfc4c35bca01b6a70c1a03be3997c37ffb5d35 (diff) | |
download | dexon-solidity-3dd31b704af6c50bc56217fd07266f7872daaa44.tar dexon-solidity-3dd31b704af6c50bc56217fd07266f7872daaa44.tar.gz dexon-solidity-3dd31b704af6c50bc56217fd07266f7872daaa44.tar.bz2 dexon-solidity-3dd31b704af6c50bc56217fd07266f7872daaa44.tar.lz dexon-solidity-3dd31b704af6c50bc56217fd07266f7872daaa44.tar.xz dexon-solidity-3dd31b704af6c50bc56217fd07266f7872daaa44.tar.zst dexon-solidity-3dd31b704af6c50bc56217fd07266f7872daaa44.zip |
Merge pull request #4798 from ethereum/mappingArgumentsAndReturns
Mapping arguments and returns
Diffstat (limited to 'libsolidity/analysis')
-rw-r--r-- | libsolidity/analysis/ControlFlowAnalyzer.cpp | 5 | ||||
-rw-r--r-- | libsolidity/analysis/TypeChecker.cpp | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/libsolidity/analysis/ControlFlowAnalyzer.cpp b/libsolidity/analysis/ControlFlowAnalyzer.cpp index 483d08c8..ab6569be 100644 --- a/libsolidity/analysis/ControlFlowAnalyzer.cpp +++ b/libsolidity/analysis/ControlFlowAnalyzer.cpp @@ -75,7 +75,10 @@ void ControlFlowAnalyzer::checkUnassignedStorageReturnValues( { auto& unassignedAtFunctionEntry = unassigned[_functionEntry]; for (auto const& returnParameter: _function.returnParameterList()->parameters()) - if (returnParameter->type()->dataStoredIn(DataLocation::Storage)) + if ( + returnParameter->type()->dataStoredIn(DataLocation::Storage) || + returnParameter->type()->category() == Type::Category::Mapping + ) unassignedAtFunctionEntry.insert(returnParameter.get()); } diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index 660bb828..8ee555ee 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -629,7 +629,10 @@ bool TypeChecker::visit(FunctionDefinition const& _function) } for (ASTPointer<VariableDeclaration> const& var: _function.parameters() + _function.returnParameters()) { - if (!type(*var)->canLiveOutsideStorage()) + if ( + !type(*var)->canLiveOutsideStorage() && + !(_function.visibility() <= FunctionDefinition::Visibility::Internal) + ) m_errorReporter.typeError(var->location(), "Type is required to live outside storage."); if (_function.visibility() >= FunctionDefinition::Visibility::Public && !(type(*var)->interfaceType(isLibraryFunction))) m_errorReporter.fatalTypeError(var->location(), "Internal or recursive type is not allowed for public or external functions."); |