From 996d282aab909eafd952b07e2cd02ca57198a263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Martinez=20Trevi=C3=B1o?= Date: Wed, 17 Jun 2026 12:37:20 -0600 Subject: [PATCH] Fix shadowing warning (2519) to cover inherited state variables --- libsolidity/interface/CompilerStack.cpp | 4 ++-- ...dowing_abstract_base_inherited_state_variable.sol | 11 +++++++++++ ...unction_parameter_vs_inherited_state_variable.sol | 10 ++++++++++ ...ng_local_variable_vs_inherited_state_variable.sol | 11 +++++++++++ ...wing_named_return_vs_inherited_state_variable.sol | 10 ++++++++++ .../name_shadowing_transitive_inheritance.sol | 12 ++++++++++++ 6 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 test/libsolidity/syntaxTests/scoping/name_shadowing_abstract_base_inherited_state_variable.sol create mode 100644 test/libsolidity/syntaxTests/scoping/name_shadowing_function_parameter_vs_inherited_state_variable.sol create mode 100644 test/libsolidity/syntaxTests/scoping/name_shadowing_local_variable_vs_inherited_state_variable.sol create mode 100644 test/libsolidity/syntaxTests/scoping/name_shadowing_named_return_vs_inherited_state_variable.sol create mode 100644 test/libsolidity/syntaxTests/scoping/name_shadowing_transitive_inheritance.sol 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.