Fixed #2714 (False positive: ternary operator and += style warning.)
This commit is contained in:
parent
75e5353b6d
commit
7021e3224b
|
@ -5015,9 +5015,35 @@ void Tokenizer::simplifyCompoundAssignment()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Enclose the rhs in parantheses..
|
||||||
|
if (!Token::Match(tok->next(), "%any% [;)]"))
|
||||||
|
{
|
||||||
|
// Only enclose rhs in parantheses if there is some operator
|
||||||
|
bool someOperator = false;
|
||||||
|
for (Token *tok2 = tok->next(); tok2; tok2 = tok2->next())
|
||||||
|
{
|
||||||
|
if (tok2->str() == "(")
|
||||||
|
tok2 = tok2->link();
|
||||||
|
|
||||||
|
if (Token::Match(tok2->next(), "[;)]"))
|
||||||
|
{
|
||||||
|
if (someOperator)
|
||||||
|
{
|
||||||
|
tok->insertToken("(");
|
||||||
|
tok2->insertToken(")");
|
||||||
|
Token::createMutualLinks(tok->next(), tok2->next());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
someOperator |= bool(tok2->isArithmeticalOp() || (tok2->str() == "?"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// simplify the compound assignment..
|
// simplify the compound assignment..
|
||||||
tok->str("=");
|
tok->str("=");
|
||||||
tok->insertToken(op);
|
tok->insertToken(op);
|
||||||
|
|
||||||
std::stack<Token *> tokend;
|
std::stack<Token *> tokend;
|
||||||
for (const Token *tok2 = tok->previous(); tok2 && tok2 != tok1; tok2 = tok2->previous())
|
for (const Token *tok2 = tok->previous(); tok2 && tok2 != tok1; tok2 = tok2->previous())
|
||||||
{
|
{
|
||||||
|
|
|
@ -5542,6 +5542,10 @@ private:
|
||||||
|
|
||||||
// #2368
|
// #2368
|
||||||
ASSERT_EQUALS("if ( false ) { } else { j = j - i ; }", tokenizeAndStringify("if (false) {} else { j -= i; }"));
|
ASSERT_EQUALS("if ( false ) { } else { j = j - i ; }", tokenizeAndStringify("if (false) {} else { j -= i; }"));
|
||||||
|
|
||||||
|
// #2714 - wrong simplification of "a += b?c:d;"
|
||||||
|
ASSERT_EQUALS("; a = a + ( b ? c : d ) ;", tokenizeAndStringify("; a+=b?c:d;"));
|
||||||
|
ASSERT_EQUALS("; a = a * ( b + 1 ) ;", tokenizeAndStringify("; a*=b+1;"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void simplifyAssignmentInFunctionCall()
|
void simplifyAssignmentInFunctionCall()
|
||||||
|
|
Loading…
Reference in New Issue