Fix ticket #563 (set variable id for **p)

http://sourceforge.net/apps/trac/cppcheck/ticket/563
This commit is contained in:
Reijo Tomperi 2009-08-06 23:11:29 +03:00
parent 5087dc6b46
commit 80953633ee
3 changed files with 16 additions and 4 deletions

View File

@ -248,10 +248,6 @@ void CheckBufferOverrun::checkScope(const Token *tok, const char *varname[], con
else else
continue; continue;
/** @todo this condition should be redundant, the variable id should never be 0 for variables */
if (counter_varid == 0)
continue;
if (Token::Match(tok2, "%varid% < %num% ;", counter_varid)) if (Token::Match(tok2, "%varid% < %num% ;", counter_varid))
{ {
max_counter_value = MathLib::toString<long>(atol(tok2->strAt(2)) - 1); max_counter_value = MathLib::toString<long>(atol(tok2->strAt(2)) - 1);

View File

@ -2292,6 +2292,14 @@ bool Tokenizer::simplifyVarDecl()
tok2 = NULL; tok2 = NULL;
} }
else if (Token::Match(tok2, "%type% * * %var% ,|="))
{
if (tok2->tokAt(3)->str() != "operator")
tok2 = tok2->tokAt(4); // The ',' token
else
tok2 = NULL;
}
else if (Token::Match(tok2, "%type% * const %var% ,|=")) else if (Token::Match(tok2, "%type% * const %var% ,|="))
{ {
if (tok2->tokAt(3)->str() != "operator") if (tok2->tokAt(3)->str() != "operator")

View File

@ -1040,6 +1040,14 @@ private:
ASSERT_EQUALS(" void foo ( ) { char * a ; char * b ; delete a ; delete b ; }", sizeof_(code)); ASSERT_EQUALS(" void foo ( ) { char * a ; char * b ; delete a ; delete b ; }", sizeof_(code));
} }
{
const char code[] = "void foo()\n"
"{\n"
" char **a, **b, **c;\n"
"}\n";
ASSERT_EQUALS(" void foo ( ) { char * * a ; char * * b ; char * * c ; }", sizeof_(code));
}
{ {
const char code[] = "int f()\n" const char code[] = "int f()\n"
"{\n" "{\n"