Merge branch 'master' of https://github.com/rgeissert/cppcheck into rgeissert-realloc
This commit is contained in:
commit
2c6421d162
|
@ -4117,36 +4117,6 @@ bool Tokenizer::simplifyTokenList()
|
||||||
|
|
||||||
simplifyCasts();
|
simplifyCasts();
|
||||||
|
|
||||||
// simplify "x=realloc(y,0);" => "free(y); x=0;"..
|
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
|
||||||
{
|
|
||||||
if (Token::Match(tok, "; %var% = realloc ( %var% , 0 ) ;"))
|
|
||||||
{
|
|
||||||
const std::string varname(tok->next()->str());
|
|
||||||
const unsigned int varid(tok->next()->varId());
|
|
||||||
|
|
||||||
// Delete the "%var% ="
|
|
||||||
tok->deleteNext();
|
|
||||||
tok->deleteNext();
|
|
||||||
|
|
||||||
// Change function name "realloc" to "free"
|
|
||||||
tok->next()->str("free");
|
|
||||||
|
|
||||||
// delete the ", 0"
|
|
||||||
Token::eraseTokens(tok->tokAt(3), tok->tokAt(6));
|
|
||||||
|
|
||||||
// goto the ";"
|
|
||||||
tok = tok->tokAt(5);
|
|
||||||
|
|
||||||
// insert "var=0;"
|
|
||||||
tok->insertToken(";");
|
|
||||||
tok->insertToken("0");
|
|
||||||
tok->insertToken("=");
|
|
||||||
tok->insertToken(varname);
|
|
||||||
tok->next()->varId(varid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Simplify simple calculations..
|
// Simplify simple calculations..
|
||||||
simplifyCalculations();
|
simplifyCalculations();
|
||||||
|
|
||||||
|
@ -4186,6 +4156,49 @@ bool Tokenizer::simplifyTokenList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// simplify "x=realloc(y,0);" => "free(y); x=0;"..
|
||||||
|
// and "x = realloc (0, n);" => "x = malloc(n);"
|
||||||
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
|
{
|
||||||
|
if (Token::Match(tok, "; %var% = realloc ( %var% , 0 ) ;"))
|
||||||
|
{
|
||||||
|
const std::string varname(tok->next()->str());
|
||||||
|
const unsigned int varid(tok->next()->varId());
|
||||||
|
|
||||||
|
// Delete the "%var% ="
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->deleteNext();
|
||||||
|
|
||||||
|
// Change function name "realloc" to "free"
|
||||||
|
tok->next()->str("free");
|
||||||
|
|
||||||
|
// delete the ", 0"
|
||||||
|
Token::eraseTokens(tok->tokAt(3), tok->tokAt(6));
|
||||||
|
|
||||||
|
// goto the ";"
|
||||||
|
tok = tok->tokAt(5);
|
||||||
|
|
||||||
|
// insert "var=0;"
|
||||||
|
tok->insertToken(";");
|
||||||
|
tok->insertToken("0");
|
||||||
|
tok->insertToken("=");
|
||||||
|
tok->insertToken(varname);
|
||||||
|
tok->next()->varId(varid);
|
||||||
|
}
|
||||||
|
else if (Token::Match(tok, "; %var% = realloc ( 0 , %num% ) ;"))
|
||||||
|
{
|
||||||
|
const std::string varname(tok->next()->str());
|
||||||
|
|
||||||
|
tok = tok->tokAt(3);
|
||||||
|
// Change function name "realloc" to "malloc"
|
||||||
|
tok->str("malloc");
|
||||||
|
|
||||||
|
// delete "0 ,"
|
||||||
|
tok->next()->deleteNext();
|
||||||
|
tok->next()->deleteNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Change initialisation of variable to assignment
|
// Change initialisation of variable to assignment
|
||||||
simplifyInitVar();
|
simplifyInitVar();
|
||||||
|
|
||||||
|
|
|
@ -6004,6 +6004,10 @@ private:
|
||||||
{
|
{
|
||||||
ASSERT_EQUALS("; free ( p ) ; p = 0 ;",
|
ASSERT_EQUALS("; free ( p ) ; p = 0 ;",
|
||||||
tok("; p = realloc(p,0);"));
|
tok("; p = realloc(p,0);"));
|
||||||
|
ASSERT_EQUALS("; p = malloc ( 100 ) ;",
|
||||||
|
tok("; p = realloc(0, 100);"));
|
||||||
|
ASSERT_EQUALS("; p = malloc ( 0 ) ;",
|
||||||
|
tok("; p = realloc(0, sizeof(char)*0);"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void simplifyErrNoInWhile()
|
void simplifyErrNoInWhile()
|
||||||
|
|
Loading…
Reference in New Issue