aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/analysis/ContractLevelChecker.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-11-30 01:33:54 +0800
committerchriseth <chris@ethereum.org>2018-11-30 23:30:19 +0800
commit4f992298c6381b3c7ea41462bce749850b5846e5 (patch)
tree0321eb675b2e8acc7c301221b0d731907443f936 /libsolidity/analysis/ContractLevelChecker.cpp
parent6d1644e55c03850341e6bfcc4ae46f8de264a039 (diff)
downloaddexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar
dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.gz
dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.bz2
dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.lz
dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.xz
dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.zst
dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.zip
Move hash collisions checks.
Diffstat (limited to 'libsolidity/analysis/ContractLevelChecker.cpp')
-rw-r--r--libsolidity/analysis/ContractLevelChecker.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/libsolidity/analysis/ContractLevelChecker.cpp b/libsolidity/analysis/ContractLevelChecker.cpp
index e2208f3f..419ebe93 100644
--- a/libsolidity/analysis/ContractLevelChecker.cpp
+++ b/libsolidity/analysis/ContractLevelChecker.cpp
@@ -43,6 +43,7 @@ bool ContractLevelChecker::check(ContractDefinition const& _contract)
checkConstructor(_contract);
checkFallbackFunction(_contract);
checkExternalTypeClashes(_contract);
+ checkHashCollisions(_contract);
return Error::containsOnlyWarnings(m_errorReporter.errors());
}
@@ -420,3 +421,18 @@ void ContractLevelChecker::checkExternalTypeClashes(ContractDefinition const& _c
"Function overload clash during conversion to external types for arguments."
);
}
+
+void ContractLevelChecker::checkHashCollisions(ContractDefinition const& _contract)
+{
+ set<FixedHash<4>> hashes;
+ for (auto const& it: _contract.interfaceFunctionList())
+ {
+ FixedHash<4> const& hash = it.first;
+ if (hashes.count(hash))
+ m_errorReporter.typeError(
+ _contract.location(),
+ string("Function signature hash collision for ") + it.second->externalSignature()
+ );
+ hashes.insert(hash);
+ }
+}