Fix #945 (Array index out of bounds not detected, because of "int const")
http://sourceforge.net/apps/trac/cppcheck/ticket/945
This commit is contained in:
parent
3d5760b149
commit
c4244ac9e8
|
@ -585,6 +585,8 @@ bool Tokenizer::tokenize(std::istream &code, const char FileName[])
|
||||||
* - try to change "for" loop to a "while" loop instead
|
* - try to change "for" loop to a "while" loop instead
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
simplifyConst();
|
||||||
|
|
||||||
// Split up variable declarations.
|
// Split up variable declarations.
|
||||||
simplifyVarDecl();
|
simplifyVarDecl();
|
||||||
|
|
||||||
|
@ -4634,6 +4636,18 @@ void Tokenizer::simplifyComparisonOrder()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tokenizer::simplifyConst()
|
||||||
|
{
|
||||||
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
|
{
|
||||||
|
if (Token::Match(tok, "[;{}(,] %type% const"))
|
||||||
|
{
|
||||||
|
tok->tokAt(2)->str(tok->tokAt(1)->str());
|
||||||
|
tok->tokAt(1)->str("const");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Tokenizer::getErrorMessages()
|
void Tokenizer::getErrorMessages()
|
||||||
{
|
{
|
||||||
syntaxError(0, ' ');
|
syntaxError(0, ' ');
|
||||||
|
|
|
@ -315,6 +315,11 @@ private:
|
||||||
*/
|
*/
|
||||||
void simplifyComparisonOrder();
|
void simplifyComparisonOrder();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change "int const x;" into "const int x;"
|
||||||
|
*/
|
||||||
|
void simplifyConst();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove exception specifications. This function calls itself recursively.
|
* Remove exception specifications. This function calls itself recursively.
|
||||||
* @param tok First token in scope to cleanup
|
* @param tok First token in scope to cleanup
|
||||||
|
|
|
@ -164,6 +164,7 @@ private:
|
||||||
TEST_CASE(gt); // use "<" comparisons instead of ">"
|
TEST_CASE(gt); // use "<" comparisons instead of ">"
|
||||||
|
|
||||||
TEST_CASE(simplifyString);
|
TEST_CASE(simplifyString);
|
||||||
|
TEST_CASE(simplifyConst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2617,6 +2618,27 @@ private:
|
||||||
ASSERT_EQUALS("\"a3\"", tokenizer->simplifyString("\"\\x333\""));
|
ASSERT_EQUALS("\"a3\"", tokenizer->simplifyString("\"\\x333\""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void simplifyConst()
|
||||||
|
{
|
||||||
|
ASSERT_EQUALS("void foo ( ) { const int x ; }",
|
||||||
|
tokenizeAndStringify("void foo(){ int const x;}"));
|
||||||
|
|
||||||
|
ASSERT_EQUALS("void foo ( ) { { } const long x ; }",
|
||||||
|
tokenizeAndStringify("void foo(){ {} long const x;}"));
|
||||||
|
|
||||||
|
ASSERT_EQUALS("void foo ( ) { bar ( ) ; const char x ; }",
|
||||||
|
tokenizeAndStringify("void foo(){ bar(); char const x;}"));
|
||||||
|
|
||||||
|
ASSERT_EQUALS("void foo ( const char x ) { }",
|
||||||
|
tokenizeAndStringify("void foo(char const x){}"));
|
||||||
|
|
||||||
|
ASSERT_EQUALS("void foo ( int b , const char x ) { }",
|
||||||
|
tokenizeAndStringify("void foo(int b,char const x){}"));
|
||||||
|
|
||||||
|
ASSERT_EQUALS("void foo ( ) { int * const x ; }",
|
||||||
|
tokenizeAndStringify("void foo(){ int * const x;}"));
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
REGISTER_TEST(TestTokenizer)
|
REGISTER_TEST(TestTokenizer)
|
||||||
|
|
Loading…
Reference in New Issue