aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-08-13 23:27:29 +0800
committerGitHub <noreply@github.com>2018-08-13 23:27:29 +0800
commit3dd31b704af6c50bc56217fd07266f7872daaa44 (patch)
treea88f8531d6330baff08194dbb77e9dcb1b097f69 /libsolidity
parentae8218543b91a98663ab98de3200a0eec2bfebe3 (diff)
parentdfcfc4c35bca01b6a70c1a03be3997c37ffb5d35 (diff)
downloaddexon-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')
-rw-r--r--libsolidity/analysis/ControlFlowAnalyzer.cpp5
-rw-r--r--libsolidity/analysis/TypeChecker.cpp5
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.");