diff options
author | Federico Bond <federicobond@gmail.com> | 2017-10-04 23:09:52 +0800 |
---|---|---|
committer | Federico Bond <federicobond@gmail.com> | 2017-10-05 00:30:26 +0800 |
commit | 76d3d248426994b35c5bc2d92e9ba479cbf44ddc (patch) | |
tree | c3ab8259ae40634a0b6f84ddee37b273c97a7651 | |
parent | 19274c78904632d568bf56e95603d22ef091ce77 (diff) | |
download | dexon-solidity-76d3d248426994b35c5bc2d92e9ba479cbf44ddc.tar.gz dexon-solidity-76d3d248426994b35c5bc2d92e9ba479cbf44ddc.tar.zst dexon-solidity-76d3d248426994b35c5bc2d92e9ba479cbf44ddc.zip |
Do not consider shadowing in variable names inside event declarations
-rw-r--r-- | Changelog.md | 1 | ||||
-rw-r--r-- | libsolidity/analysis/NameAndTypeResolver.cpp | 6 | ||||
-rw-r--r-- | test/libsolidity/SolidityNameAndTypeResolution.cpp | 11 |
3 files changed, 16 insertions, 2 deletions
diff --git a/Changelog.md b/Changelog.md index 8ebc30d0..ea31095d 100644 --- a/Changelog.md +++ b/Changelog.md @@ -11,6 +11,7 @@ Bugfixes: * Type Checker: Properly support overwriting members inherited from ``address`` in a contract (such as ``balance``, ``transfer``, etc.) * Type Checker: Prevent duplicate event declarations. + * Type Checker: Do not mark event parameters as shadowing state variables. ### 0.4.17 (2017-09-21) diff --git a/libsolidity/analysis/NameAndTypeResolver.cpp b/libsolidity/analysis/NameAndTypeResolver.cpp index 523e7176..5d010693 100644 --- a/libsolidity/analysis/NameAndTypeResolver.cpp +++ b/libsolidity/analysis/NameAndTypeResolver.cpp @@ -647,10 +647,12 @@ void DeclarationRegistrationHelper::registerDeclaration(Declaration& _declaratio bool warnAboutShadowing = true; // Do not warn about shadowing for structs and enums because their members are - // not accessible without prefixes. + // not accessible without prefixes. Also do not warn about event parameters + // because they don't participate in any proper scope. if ( dynamic_cast<StructDefinition const*>(m_currentScope) || - dynamic_cast<EnumDefinition const*>(m_currentScope) + dynamic_cast<EnumDefinition const*>(m_currentScope) || + dynamic_cast<EventDefinition const*>(m_currentScope) ) warnAboutShadowing = false; // Do not warn about the constructor shadowing the contract. diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp index ed223678..350d41f1 100644 --- a/test/libsolidity/SolidityNameAndTypeResolution.cpp +++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp @@ -6371,6 +6371,17 @@ BOOST_AUTO_TEST_CASE(function_override_is_not_shadowing) CHECK_SUCCESS_NO_WARNINGS(text); } +BOOST_AUTO_TEST_CASE(event_parameter_cannot_shadow_state_variable) +{ + char const* text = R"( + contract C { + address a; + event E(address a); + } + )"; + CHECK_SUCCESS_NO_WARNINGS(text); +} + BOOST_AUTO_TEST_CASE(callable_crash) { char const* text = R"( |