CheckOther: Minor updates in checking of signed char variables and unsigned division

This commit is contained in:
Daniel Marjamäki 2008-09-16 05:57:57 +00:00
parent 528deafe68
commit c77b81fddd
2 changed files with 20 additions and 3 deletions

View File

@ -330,7 +330,7 @@ void CheckUnsignedDivision()
else if ( Match(tok, "[{};(,] unsigned %type% %var% [;=,)]") ) else if ( Match(tok, "[{};(,] unsigned %type% %var% [;=,)]") )
varsign[getstr(tok,3)] = 'u'; varsign[getstr(tok,3)] = 'u';
else if ( tok->str[0] != ')' && Match(tok->next, "%var% / %var%") ) else if (!Match(tok,"[).]") && Match(tok->next, "%var% / %var%"))
{ {
const char *varname1 = getstr(tok,1); const char *varname1 = getstr(tok,1);
const char *varname2 = getstr(tok,3); const char *varname2 = getstr(tok,3);
@ -618,7 +618,7 @@ void CheckCharVariable()
for (const TOKEN *tok = tokens; tok; tok = tok->next) for (const TOKEN *tok = tokens; tok; tok = tok->next)
{ {
// Declaring the variable.. // Declaring the variable..
if ( Match(tok, "[{};] char %var% [;=,]") ) if ( Match(tok, "[{};(,] char %var% [;=,)]") )
{ {
const char *varname[2] = {0}; const char *varname[2] = {0};
varname[0] = getstr(tok, 2); varname[0] = getstr(tok, 2);
@ -645,7 +645,7 @@ void CheckCharVariable()
break; break;
} }
else if ( Match(tok2, "[&|] %var1%") ) else if ( Match(tok2, "[&|] %var1%", varname) || Match(tok2, "%var1% [&|]", varname) )
{ {
std::ostringstream errmsg; std::ostringstream errmsg;
errmsg << FileLine(tok2) << ": Warning - using char variable in bit operation"; errmsg << FileLine(tok2) << ": Warning - using char variable in bit operation";

View File

@ -36,6 +36,7 @@ public:
TEST_FIXTURE( TestCharVar ) TEST_FIXTURE( TestCharVar )
{ {
TEST_CASE( array_index ); TEST_CASE( array_index );
TEST_CASE( bitop );
} }
@ -54,8 +55,24 @@ public:
" buf[ch] = 0;\n" " buf[ch] = 0;\n"
"}\n" ); "}\n" );
ASSERT_EQUALS( std::string("[test.cpp:4]: Warning - using char variable as array index\n"), errout.str() ); ASSERT_EQUALS( std::string("[test.cpp:4]: Warning - using char variable as array index\n"), errout.str() );
check( "void foo(char ch)\n"
"{\n"
" buf[ch] = 0;\n"
"}\n" );
ASSERT_EQUALS( std::string("[test.cpp:3]: Warning - using char variable as array index\n"), errout.str() );
} }
void bitop()
{
check( "void foo()\n"
"{\n"
" char ch;\n"
" result = a | ch;\n"
"}\n" );
ASSERT_EQUALS( std::string("[test.cpp:4]: Warning - using char variable in bit operation\n"), errout.str() );
}
}; };
REGISTER_FIXTURE( TestCharVar ) REGISTER_FIXTURE( TestCharVar )