Fixed #896 (False positive with --all when return value of open() is positive in a loop)
http://sourceforge.net/apps/trac/cppcheck/ticket/896
This commit is contained in:
parent
141b91ae08
commit
de4ca924b5
|
@ -577,19 +577,7 @@ bool Tokenizer::tokenize(std::istream &code, const char FileName[])
|
||||||
unsignedint();
|
unsignedint();
|
||||||
|
|
||||||
// Use "<" comparison instead of ">"
|
// Use "<" comparison instead of ">"
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
simplifyComparisonOrder();
|
||||||
{
|
|
||||||
if (Token::Match(tok, "[;(] %any% >|>= %any% [);]"))
|
|
||||||
{
|
|
||||||
const std::string op1(tok->strAt(1));
|
|
||||||
tok->next()->str(tok->strAt(3));
|
|
||||||
tok->tokAt(3)->str(op1);
|
|
||||||
if (tok->tokAt(2)->str() == ">")
|
|
||||||
tok->tokAt(2)->str("<");
|
|
||||||
else
|
|
||||||
tok->tokAt(2)->str("<=");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo simplify "for"
|
* @todo simplify "for"
|
||||||
|
@ -2033,13 +2021,12 @@ void Tokenizer::simplifyTokenList()
|
||||||
}
|
}
|
||||||
|
|
||||||
simplifyFunctionParameters();
|
simplifyFunctionParameters();
|
||||||
|
|
||||||
elseif();
|
elseif();
|
||||||
|
simplifyIfAssign();
|
||||||
simplifyRedundantParanthesis();
|
simplifyRedundantParanthesis();
|
||||||
simplifyIfNot();
|
simplifyIfNot();
|
||||||
simplifyIfNotNull();
|
simplifyIfNotNull();
|
||||||
simplifyIfAssign();
|
simplifyComparisonOrder();
|
||||||
|
|
||||||
simplifyNestedStrcat();
|
simplifyNestedStrcat();
|
||||||
|
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
|
@ -3136,6 +3123,7 @@ void Tokenizer::simplifyIfAssign()
|
||||||
tok2->insertToken(tok->strAt(2));
|
tok2->insertToken(tok->strAt(2));
|
||||||
}
|
}
|
||||||
tok2->insertToken(tok->strAt(1));
|
tok2->insertToken(tok->strAt(1));
|
||||||
|
tok2->next()->varId(tok->tokAt(1)->varId());
|
||||||
|
|
||||||
while (! braces.empty())
|
while (! braces.empty())
|
||||||
{
|
{
|
||||||
|
@ -4537,6 +4525,24 @@ std::string Tokenizer::simplifyString(const std::string &source)
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tokenizer::simplifyComparisonOrder()
|
||||||
|
{
|
||||||
|
// Use "<" comparison instead of ">"
|
||||||
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
|
{
|
||||||
|
if (Token::Match(tok, "[;(] %any% >|>= %any% [);]"))
|
||||||
|
{
|
||||||
|
const std::string op1(tok->strAt(1));
|
||||||
|
tok->next()->str(tok->strAt(3));
|
||||||
|
tok->tokAt(3)->str(op1);
|
||||||
|
if (tok->tokAt(2)->str() == ">")
|
||||||
|
tok->tokAt(2)->str("<");
|
||||||
|
else
|
||||||
|
tok->tokAt(2)->str("<=");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Tokenizer::getErrorMessages()
|
void Tokenizer::getErrorMessages()
|
||||||
{
|
{
|
||||||
syntaxError(0, ' ');
|
syntaxError(0, ' ');
|
||||||
|
|
|
@ -304,6 +304,12 @@ private:
|
||||||
*/
|
*/
|
||||||
std::string simplifyString(const std::string &source);
|
std::string simplifyString(const std::string &source);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use "<" comparison instead of ">"
|
||||||
|
* Use "<=" comparison instead of ">="
|
||||||
|
*/
|
||||||
|
void simplifyComparisonOrder();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
|
|
|
@ -440,6 +440,7 @@ private:
|
||||||
ASSERT_EQUALS("return ( a + b ) * c ;", tok("return (a+b)*c;"));
|
ASSERT_EQUALS("return ( a + b ) * c ;", tok("return (a+b)*c;"));
|
||||||
ASSERT_EQUALS("void f ( ) { int p ; if ( 2 * p == 0 ) { } }", tok("void f(){int p; if (2*p == 0) {}}"));
|
ASSERT_EQUALS("void f ( ) { int p ; if ( 2 * p == 0 ) { } }", tok("void f(){int p; if (2*p == 0) {}}"));
|
||||||
ASSERT_EQUALS("void f ( ) { DIR * f ; f = opendir ( dirname ) ; if ( closedir ( f ) ) { } }", tok("void f(){DIR * f = opendir(dirname);if (closedir(f)){}}"));
|
ASSERT_EQUALS("void f ( ) { DIR * f ; f = opendir ( dirname ) ; if ( closedir ( f ) ) { } }", tok("void f(){DIR * f = opendir(dirname);if (closedir(f)){}}"));
|
||||||
|
ASSERT_EQUALS("void foo ( int p ) { if ( 0 <= p ) { ; } }", tok("void foo(int p){if((p)>=0);}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void declareVar()
|
void declareVar()
|
||||||
|
@ -1391,6 +1392,8 @@ private:
|
||||||
ASSERT_EQUALS("; a = b ( ) ; if ( ! ( a ) ) { ; }", simplifyIfAssign(";if(!(a=b()));"));
|
ASSERT_EQUALS("; a = b ( ) ; if ( ! ( a ) ) { ; }", simplifyIfAssign(";if(!(a=b()));"));
|
||||||
ASSERT_EQUALS("; a . x = b ( ) ; if ( ! ( a . x ) ) { ; }", simplifyIfAssign(";if(!(a->x=b()));"));
|
ASSERT_EQUALS("; a . x = b ( ) ; if ( ! ( a . x ) ) { ; }", simplifyIfAssign(";if(!(a->x=b()));"));
|
||||||
ASSERT_EQUALS("A ( ) a = b ; if ( a ) { ; }", simplifyIfAssign("A() if(a=b);"));
|
ASSERT_EQUALS("A ( ) a = b ; if ( a ) { ; }", simplifyIfAssign("A() if(a=b);"));
|
||||||
|
ASSERT_EQUALS("void foo ( int a ) { a = b ( ) ; if ( 0 <= a ) { ; } }", tok("void foo(int a) {if((a=b())>=0);}"));
|
||||||
|
TODO_ASSERT_EQUALS("void foo ( A a ) { a . c = b ( ) ; if ( 0 <= a . c ) { ; } }", tok("void foo(A a) {if((a.c=b())>=0);}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue