diff --git a/libsolidity/analysis/NameAndTypeResolver.cpp b/libsolidity/analysis/NameAndTypeResolver.cpp index 2d55b46fc9f7..a0a4ec008efd 100644 --- a/libsolidity/analysis/NameAndTypeResolver.cpp +++ b/libsolidity/analysis/NameAndTypeResolver.cpp @@ -260,6 +260,9 @@ void NameAndTypeResolver::warnHomonymDeclarations() const for (Declaration const* outerDeclaration: outerDeclarations) { solAssert(outerDeclaration, ""); + if (auto const* varDecl = dynamic_cast(outerDeclaration)) + if (varDecl->isLocalVariable() && outerDeclaration->location().start >= innerLocation->start) + continue; if (dynamic_cast(outerDeclaration)) magicShadowed = true; else if (!outerDeclaration->isVisibleInContract()) diff --git a/test/libsolidity/syntaxTests/scoping/double_variable_declaration_disjoint_scope_activation.sol b/test/libsolidity/syntaxTests/scoping/double_variable_declaration_disjoint_scope_activation.sol index e6beef51aec7..2e997016375b 100644 --- a/test/libsolidity/syntaxTests/scoping/double_variable_declaration_disjoint_scope_activation.sol +++ b/test/libsolidity/syntaxTests/scoping/double_variable_declaration_disjoint_scope_activation.sol @@ -5,6 +5,5 @@ contract test { } } // ---- -// Warning 2519: (57-63): This declaration shadows an existing declaration. // Warning 2072: (57-63): Unused local variable. // Warning 2072: (75-81): Unused local variable.