Fixed #980 (false negative: division by zero when using enum)
This commit is contained in:
parent
0f6644e1ea
commit
beb2db82a2
|
@ -2430,6 +2430,9 @@ bool Tokenizer::tokenize(std::istream &code,
|
|||
// struct initialization (must be used before simplifyVarDecl)
|
||||
simplifyStructInit();
|
||||
|
||||
// Change initialisation of variable to assignment
|
||||
simplifyInitVar();
|
||||
|
||||
// Split up variable declarations.
|
||||
simplifyVarDecl();
|
||||
|
||||
|
@ -2467,7 +2470,8 @@ bool Tokenizer::tokenize(std::istream &code,
|
|||
// Change initialisation of variable to assignment
|
||||
simplifyInitVar();
|
||||
|
||||
|
||||
// Split up variable declarations.
|
||||
simplifyVarDecl();
|
||||
|
||||
if (!preprocessorCondition)
|
||||
{
|
||||
|
@ -6083,6 +6087,7 @@ bool Tokenizer::simplifyLogicalOperators()
|
|||
}
|
||||
|
||||
// int i(0); => int i; i = 0;
|
||||
// int i(0), j; => int i; i = 0; int j;
|
||||
void Tokenizer::simplifyInitVar()
|
||||
{
|
||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||
|
@ -6095,6 +6100,28 @@ void Tokenizer::simplifyInitVar()
|
|||
{
|
||||
tok = initVar(tok);
|
||||
}
|
||||
else if (Token::Match(tok, "class|struct|union| %type% *| %var% ( &| %any% ) ,"))
|
||||
{
|
||||
Token *tok1 = tok;
|
||||
while (tok1->str() != ",")
|
||||
tok1 = tok1->next();
|
||||
tok1->str(";");
|
||||
Token *tok2 = tok;
|
||||
if (Token::Match(tok2, "class|struct|union"))
|
||||
{
|
||||
tok1->insertToken(tok2->str());
|
||||
tok1 = tok1->next();
|
||||
tok2 = tok2->next();
|
||||
}
|
||||
tok1->insertToken(tok2->str());
|
||||
tok1 = tok1->next();
|
||||
tok2 = tok2->next();
|
||||
if (tok2->str() == "*")
|
||||
{
|
||||
tok1->insertToken("*");
|
||||
}
|
||||
tok = initVar(tok);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6286,6 +6286,13 @@ private:
|
|||
const char expected[] = "struct ABC { } ; static ABC abc ;";
|
||||
ASSERT_EQUALS(expected, tok(code, false));
|
||||
}
|
||||
|
||||
// ticket #980
|
||||
{
|
||||
const char code[] = "void f() { int A(1),B(2),C=3,D,E(5),F=6; }";
|
||||
const char expected[] = "void f ( ) { int A ; A = 1 ; int B ; B = 2 ; int C ; C = 3 ; int D ; int E ; E = 5 ; int F ; F = 6 ; }";
|
||||
ASSERT_EQUALS(expected, tok(code, false));
|
||||
}
|
||||
}
|
||||
|
||||
void removeUnwantedKeywords()
|
||||
|
|
Loading…
Reference in New Issue