From a6faa5acf324a127aad11b354e48d7bb2bcf0fbc Mon Sep 17 00:00:00 2001 From: Rhett Aultman Date: Fri, 28 Apr 2017 13:28:03 -0700 Subject: Treat returns with expressions as return param use There are many cases of code where the return parameters exist mostly as a form of documentation. This change ensures that they do not have to be used in the function body so long as there is a return supplying values --- libsolidity/analysis/StaticAnalyzer.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'libsolidity/analysis/StaticAnalyzer.cpp') diff --git a/libsolidity/analysis/StaticAnalyzer.cpp b/libsolidity/analysis/StaticAnalyzer.cpp index 55e7cb59..21c97c3b 100644 --- a/libsolidity/analysis/StaticAnalyzer.cpp +++ b/libsolidity/analysis/StaticAnalyzer.cpp @@ -50,6 +50,7 @@ bool StaticAnalyzer::visit(FunctionDefinition const& _function) { if (_function.isImplemented()) m_inFunction = true; + m_currentFunction = &_function; m_localVarUseCount.clear(); m_nonPayablePublic = _function.isPublic() && !_function.isPayable(); return true; @@ -96,6 +97,17 @@ bool StaticAnalyzer::visit(VariableDeclaration const& _variable) return true; } +bool StaticAnalyzer::visit(Return const& _return) +{ + // If the return has an expression, it counts as + // a "use" of the return parameters. + if (m_inFunction && _return.expression() != NULL) + for (auto const& var: m_currentFunction->returnParameterList()->parameters()) + if (var->name() != "") + m_localVarUseCount[var.get()] += 1; + return true; +} + bool StaticAnalyzer::visit(ExpressionStatement const& _statement) { if (_statement.expression().annotation().isPure) -- cgit