Adjust message text for signConversion for constant negative epxressions

This commit is contained in:
Alexander Mai 2016-01-02 22:56:15 +01:00
parent 746d024e3d
commit 1d3e39df7e
3 changed files with 11 additions and 4 deletions

View File

@ -182,19 +182,21 @@ void CheckType::checkSignConversion()
if (!tok1->getValueLE(-1,_settings)) if (!tok1->getValueLE(-1,_settings))
continue; continue;
if (tok1->valueType() && tok1->valueType()->sign != ValueType::Sign::UNSIGNED) if (tok1->valueType() && tok1->valueType()->sign != ValueType::Sign::UNSIGNED)
signConversionError(tok1); signConversionError(tok1, tok1->isNumber());
} }
} }
} }
} }
void CheckType::signConversionError(const Token *tok) void CheckType::signConversionError(const Token *tok, const bool constvalue)
{ {
const std::string varname(tok ? tok->str() : "var"); const std::string varname(tok ? tok->str() : "var");
reportError(tok, reportError(tok,
Severity::warning, Severity::warning,
"signConversion", "signConversion",
(constvalue) ?
"Suspicious code: sign conversion of " + varname + " in calculation because '" + varname + "' has a negative value" :
"Suspicious code: sign conversion of " + varname + " in calculation, even though " + varname + " can have a negative value"); "Suspicious code: sign conversion of " + varname + " in calculation, even though " + varname + " can have a negative value");
} }

View File

@ -75,7 +75,7 @@ private:
// Error messages.. // Error messages..
void tooBigBitwiseShiftError(const Token *tok, int lhsbits, const ValueFlow::Value &rhsbits); void tooBigBitwiseShiftError(const Token *tok, int lhsbits, const ValueFlow::Value &rhsbits);
void integerOverflowError(const Token *tok, const ValueFlow::Value &value); void integerOverflowError(const Token *tok, const ValueFlow::Value &value);
void signConversionError(const Token *tok); void signConversionError(const Token *tok, const bool constvalue);
void longCastAssignError(const Token *tok); void longCastAssignError(const Token *tok);
void longCastReturnError(const Token *tok); void longCastReturnError(const Token *tok);
@ -83,7 +83,7 @@ private:
CheckType c(0, settings, errorLogger); CheckType c(0, settings, errorLogger);
c.tooBigBitwiseShiftError(0, 32, ValueFlow::Value(64)); c.tooBigBitwiseShiftError(0, 32, ValueFlow::Value(64));
c.integerOverflowError(0, ValueFlow::Value(1LL<<32)); c.integerOverflowError(0, ValueFlow::Value(1LL<<32));
c.signConversionError(0); c.signConversionError(0, false);
c.longCastAssignError(0); c.longCastAssignError(0);
c.longCastReturnError(0); c.longCastReturnError(0);
} }

View File

@ -145,6 +145,11 @@ private:
"}\n" "}\n"
"void f2() { f1(-4); }"); "void f2() { f1(-4); }");
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());
check("size_t foo(size_t x) {\n"
" return -2 * x;\n"
"}");
ASSERT_EQUALS("[test.cpp:2]: (warning) Suspicious code: sign conversion of -2 in calculation because '-2' has a negative value\n", errout.str());
} }
void longCastAssign() { void longCastAssign() {