aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/analysis/TypeChecker.cpp
diff options
context:
space:
mode:
authorFederico Bond <federicobond@gmail.com>2017-06-22 21:59:00 +0800
committerchriseth <chris@ethereum.org>2017-06-23 17:19:57 +0800
commit0fb1621a983025d41ef05d1156bc167ce4490259 (patch)
treefa6fd548c9445329cdd8aff735c2ec59e77bb647 /libsolidity/analysis/TypeChecker.cpp
parentb86a4cad5702896068459f54993d59a7cd1c889f (diff)
downloaddexon-solidity-0fb1621a983025d41ef05d1156bc167ce4490259.tar
dexon-solidity-0fb1621a983025d41ef05d1156bc167ce4490259.tar.gz
dexon-solidity-0fb1621a983025d41ef05d1156bc167ce4490259.tar.bz2
dexon-solidity-0fb1621a983025d41ef05d1156bc167ce4490259.tar.lz
dexon-solidity-0fb1621a983025d41ef05d1156bc167ce4490259.tar.xz
dexon-solidity-0fb1621a983025d41ef05d1156bc167ce4490259.tar.zst
dexon-solidity-0fb1621a983025d41ef05d1156bc167ce4490259.zip
Fix address literals not being treated as compile-time constants
The early return implemented for address literals in TypeChecker was preventing the isPure annotation from getting applied. Closes #2441
Diffstat (limited to 'libsolidity/analysis/TypeChecker.cpp')
-rw-r--r--libsolidity/analysis/TypeChecker.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp
index 4194e1c2..40853608 100644
--- a/libsolidity/analysis/TypeChecker.cpp
+++ b/libsolidity/analysis/TypeChecker.cpp
@@ -1726,10 +1726,7 @@ void TypeChecker::endVisit(Literal const& _literal)
if (_literal.looksLikeAddress())
{
if (_literal.passesAddressChecksum())
- {
_literal.annotation().type = make_shared<IntegerType>(0, IntegerType::Modifier::Address);
- return;
- }
else
m_errorReporter.warning(
_literal.location(),
@@ -1737,10 +1734,13 @@ void TypeChecker::endVisit(Literal const& _literal)
"If this is not used as an address, please prepend '00'."
);
}
- _literal.annotation().type = Type::forLiteral(_literal);
- _literal.annotation().isPure = true;
+ if (!_literal.annotation().type)
+ _literal.annotation().type = Type::forLiteral(_literal);
+
if (!_literal.annotation().type)
m_errorReporter.fatalTypeError(_literal.location(), "Invalid literal value.");
+
+ _literal.annotation().isPure = true;
}
bool TypeChecker::contractDependenciesAreCyclic(