diff --git a/libsolidity/interface/CompilerStack.cpp b/libsolidity/interface/CompilerStack.cpp index d31561beedc5..6a10f087d684 100644 --- a/libsolidity/interface/CompilerStack.cpp +++ b/libsolidity/interface/CompilerStack.cpp @@ -504,8 +504,6 @@ bool CompilerStack::analyze() if (source->ast && !resolver.performImports(*source->ast, sourceUnitsByName)) return false; - resolver.warnHomonymDeclarations(); - { DocStringTagParser docStringTagParser(m_errorReporter); for (Source const* source: m_sourceOrder) @@ -518,6 +516,8 @@ bool CompilerStack::analyze() if (source->ast && !resolver.resolveNamesAndTypes(*source->ast)) return false; + resolver.warnHomonymDeclarations(); + if (experimentalSolidity) { if (!analyzeExperimental()) diff --git a/test/libsolidity/syntaxTests/scoping/name_shadowing_abstract_base_inherited_state_variable.sol b/test/libsolidity/syntaxTests/scoping/name_shadowing_abstract_base_inherited_state_variable.sol new file mode 100644 index 000000000000..2f76fd581ae4 --- /dev/null +++ b/test/libsolidity/syntaxTests/scoping/name_shadowing_abstract_base_inherited_state_variable.sol @@ -0,0 +1,11 @@ +abstract contract Base { + uint256 value = 10; +} +contract Child is Base { + function f() public pure returns (uint256) { + uint256 value = 99; + return value; + } +} +// ---- +// Warning 2519: (133-146): This declaration shadows an existing declaration. diff --git a/test/libsolidity/syntaxTests/scoping/name_shadowing_function_parameter_vs_inherited_state_variable.sol b/test/libsolidity/syntaxTests/scoping/name_shadowing_function_parameter_vs_inherited_state_variable.sol new file mode 100644 index 000000000000..01d81a414e29 --- /dev/null +++ b/test/libsolidity/syntaxTests/scoping/name_shadowing_function_parameter_vs_inherited_state_variable.sol @@ -0,0 +1,10 @@ +contract Base { + uint256 value = 10; +} +contract Child is Base { + function f(uint256 value) public pure returns (uint256) { + return value; + } +} +// ---- +// Warning 2519: (82-95): This declaration shadows an existing declaration. diff --git a/test/libsolidity/syntaxTests/scoping/name_shadowing_local_variable_vs_inherited_state_variable.sol b/test/libsolidity/syntaxTests/scoping/name_shadowing_local_variable_vs_inherited_state_variable.sol new file mode 100644 index 000000000000..95de5bc558fa --- /dev/null +++ b/test/libsolidity/syntaxTests/scoping/name_shadowing_local_variable_vs_inherited_state_variable.sol @@ -0,0 +1,11 @@ +contract Base { + uint256 value = 10; +} +contract Child is Base { + function f() public pure returns (uint256) { + uint256 value = 99; + return value; + } +} +// ---- +// Warning 2519: (124-137): This declaration shadows an existing declaration. diff --git a/test/libsolidity/syntaxTests/scoping/name_shadowing_named_return_vs_inherited_state_variable.sol b/test/libsolidity/syntaxTests/scoping/name_shadowing_named_return_vs_inherited_state_variable.sol new file mode 100644 index 000000000000..883039e639bd --- /dev/null +++ b/test/libsolidity/syntaxTests/scoping/name_shadowing_named_return_vs_inherited_state_variable.sol @@ -0,0 +1,10 @@ +contract Base { + uint256 value = 10; +} +contract Child is Base { + function f() public pure returns (uint256 value) { + return 42; + } +} +// ---- +// Warning 2519: (105-118): This declaration shadows an existing declaration. diff --git a/test/libsolidity/syntaxTests/scoping/name_shadowing_transitive_inheritance.sol b/test/libsolidity/syntaxTests/scoping/name_shadowing_transitive_inheritance.sol new file mode 100644 index 000000000000..4b9c96d99452 --- /dev/null +++ b/test/libsolidity/syntaxTests/scoping/name_shadowing_transitive_inheritance.sol @@ -0,0 +1,12 @@ +contract A { + uint256 value = 10; +} +contract B is A {} +contract C is B { + function f() public pure returns (uint256) { + uint256 value = 99; + return value; + } +} +// ---- +// Warning 2519: (133-146): This declaration shadows an existing declaration.