Fixed #3723 (Preprocessor evaluation order)
This commit is contained in:
parent
8b294a2d4f
commit
5174f7ff5e
|
@ -748,6 +748,26 @@ bool TemplateSimplifier::simplifyCalculations(Token *_tokens)
|
|||
}
|
||||
|
||||
if (tok->isNumber()) {
|
||||
// Remove redundant conditions (0&&x) (1||x)
|
||||
if (Token::Match(tok->previous(), "[(=,] 0 &&") ||
|
||||
Token::Match(tok->previous(), "[(=,] 1 ||")) {
|
||||
unsigned int par = 0;
|
||||
const Token *tok2 = tok;
|
||||
for (tok2 = tok; tok2; tok2 = tok2->next()) {
|
||||
if (tok2->str() == "(")
|
||||
++par;
|
||||
else if (tok2->str() == ")") {
|
||||
if (par == 0)
|
||||
break;
|
||||
--par;
|
||||
} else if (par == 0 && (Token::Match(tok2, "[,;]")))
|
||||
break;
|
||||
}
|
||||
if (Token::Match(tok2, "[);,]"))
|
||||
Token::eraseTokens(tok, tok2);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tok->str() == "0") {
|
||||
if (Token::Match(tok->previous(), "[+-|] 0")) {
|
||||
tok = tok->previous();
|
||||
|
@ -766,7 +786,6 @@ bool TemplateSimplifier::simplifyCalculations(Token *_tokens)
|
|||
tok->deleteThis();
|
||||
ret = true;
|
||||
} else if (Token::Match(tok->previous(), "[=[(,] 0 * %any% ,|]|)|;|=|%op%") ||
|
||||
Token::Match(tok->previous(), "[=[(,] 0 && %any% ,|]|)|;|=|%op%") ||
|
||||
Token::Match(tok->previous(), "return|case 0 * %any% ,|:|;|=|%op%") ||
|
||||
Token::Match(tok->previous(), "return|case 0 && %any% ,|:|;|=|%op%")) {
|
||||
tok->deleteNext();
|
||||
|
|
|
@ -393,7 +393,7 @@ private:
|
|||
|
||||
TEST_CASE(simplifyLogicalOperators);
|
||||
|
||||
TEST_CASE(simplifyCalculations); // ticket #2870
|
||||
TEST_CASE(simplifyCalculations);
|
||||
|
||||
// foo(p = new char[10]); => p = new char[10]; foo(p);
|
||||
TEST_CASE(simplifyAssignmentInFunctionCall);
|
||||
|
@ -6348,7 +6348,11 @@ private:
|
|||
tokenizeAndStringify("int foo ( ) { int i; int j; i = 1 || j; return i; }", true));
|
||||
|
||||
ASSERT_EQUALS("int foo ( ) { return 0 ; }",
|
||||
tokenizeAndStringify("int foo ( ) { int i; int j; i = 0 && j; return i; }", true));
|
||||
tokenizeAndStringify("int foo ( ) { int i; int j; i = 0 && j; return i; }", true)); // ticket #3576 - False positives in boolean expressions
|
||||
|
||||
// ticket #3723 - Simplify condition (0 && a < 123)
|
||||
ASSERT_EQUALS("( 0 )",
|
||||
tokenizeAndStringify("( 0 && a < 123 )", true));
|
||||
}
|
||||
|
||||
void simplifyCompoundAssignment() {
|
||||
|
|
Loading…
Reference in New Issue