From 1d3e39df7e926f65d94fe6e0c433f645ba88b783 Mon Sep 17 00:00:00 2001 From: Alexander Mai Date: Sat, 2 Jan 2016 22:56:15 +0100 Subject: [PATCH] Adjust message text for signConversion for constant negative epxressions --- lib/checktype.cpp | 6 ++++-- lib/checktype.h | 4 ++-- test/testtype.cpp | 5 +++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/checktype.cpp b/lib/checktype.cpp index a726b97ae..a191660a6 100644 --- a/lib/checktype.cpp +++ b/lib/checktype.cpp @@ -182,19 +182,21 @@ void CheckType::checkSignConversion() if (!tok1->getValueLE(-1,_settings)) continue; 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"); reportError(tok, Severity::warning, "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"); } diff --git a/lib/checktype.h b/lib/checktype.h index b1bf88890..a682926f9 100644 --- a/lib/checktype.h +++ b/lib/checktype.h @@ -75,7 +75,7 @@ private: // Error messages.. void tooBigBitwiseShiftError(const Token *tok, int lhsbits, const ValueFlow::Value &rhsbits); 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 longCastReturnError(const Token *tok); @@ -83,7 +83,7 @@ private: CheckType c(0, settings, errorLogger); c.tooBigBitwiseShiftError(0, 32, ValueFlow::Value(64)); c.integerOverflowError(0, ValueFlow::Value(1LL<<32)); - c.signConversionError(0); + c.signConversionError(0, false); c.longCastAssignError(0); c.longCastReturnError(0); } diff --git a/test/testtype.cpp b/test/testtype.cpp index b15415690..53b2e591b 100644 --- a/test/testtype.cpp +++ b/test/testtype.cpp @@ -145,6 +145,11 @@ private: "}\n" "void f2() { f1(-4); }"); 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() {