Fixed false positive "Variable is not assigned a value" on class types
This commit is contained in:
parent
f82e5396c8
commit
c11e8cdbfa
|
@ -940,6 +940,7 @@ void CheckUnusedVar::checkFunctionVariableUsage()
|
||||||
for (Variables::VariableMap::const_iterator it = variables.varUsage().begin(); it != variables.varUsage().end(); ++it) {
|
for (Variables::VariableMap::const_iterator it = variables.varUsage().begin(); it != variables.varUsage().end(); ++it) {
|
||||||
const Variables::VariableUsage &usage = it->second;
|
const Variables::VariableUsage &usage = it->second;
|
||||||
const std::string &varname = usage._name->str();
|
const std::string &varname = usage._name->str();
|
||||||
|
const Variable* var = symbolDatabase->getVariableFromVarId(it->first);
|
||||||
|
|
||||||
// variable has been marked as unused so ignore it
|
// variable has been marked as unused so ignore it
|
||||||
if (usage._name->isUnused())
|
if (usage._name->isUnused())
|
||||||
|
@ -961,7 +962,7 @@ void CheckUnusedVar::checkFunctionVariableUsage()
|
||||||
unusedVariableError(usage._name, varname);
|
unusedVariableError(usage._name, varname);
|
||||||
|
|
||||||
// variable has not been written but has been modified
|
// variable has not been written but has been modified
|
||||||
else if (usage._modified && !usage._write && !usage._allocateMemory)
|
else if (usage._modified && !usage._write && !usage._allocateMemory && !Token::simpleMatch(var->typeStartToken(), "std ::"))
|
||||||
unassignedVariableError(usage._name, varname);
|
unassignedVariableError(usage._name, varname);
|
||||||
|
|
||||||
// variable has been written but not read
|
// variable has been written but not read
|
||||||
|
@ -969,7 +970,7 @@ void CheckUnusedVar::checkFunctionVariableUsage()
|
||||||
unreadVariableError(usage._name, varname);
|
unreadVariableError(usage._name, varname);
|
||||||
|
|
||||||
// variable has been read but not written
|
// variable has been read but not written
|
||||||
else if (!usage._write && !usage._allocateMemory)
|
else if (!usage._write && !usage._allocateMemory && !Token::simpleMatch(var->typeStartToken(), "std ::"))
|
||||||
unassignedVariableError(usage._name, varname);
|
unassignedVariableError(usage._name, varname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3087,10 +3087,10 @@ private:
|
||||||
ASSERT_EQUALS("[test.cpp:2]: (style) Variable 's' is assigned a value that is never used\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2]: (style) Variable 's' is assigned a value that is never used\n", errout.str());
|
||||||
|
|
||||||
functionVariableUsage("std::string foo() {\n"
|
functionVariableUsage("std::string foo() {\n"
|
||||||
" std::string s;\n"
|
" std::string s;\n" // Class instances are initialized. Assignement is not necessary
|
||||||
" return s;\n"
|
" return s;\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:2]: (style) Variable 's' is not assigned a value\n", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
functionVariableUsage("std::string foo() {\n"
|
functionVariableUsage("std::string foo() {\n"
|
||||||
" std::string s = \"foo\";\n"
|
" std::string s = \"foo\";\n"
|
||||||
|
|
Loading…
Reference in New Issue