diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 625bae486..7cf1f6027 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2796,7 +2796,9 @@ void Tokenizer::removeRedundantAssignment() tok2 = tok2->tokAt(2); localvars.insert(tok2->varId()); } - else if (tok2->varId() && !Token::Match(tok2->previous(), "[;{}] %var% = %var% ;")) + else if (tok2->varId() && + !Token::Match(tok2->previous(), "[;{}] %var% = %var% ;") && + !Token::Match(tok2->previous(), "[;{}] %var% = %num% ;")) { localvars.erase(tok2->varId()); } @@ -2814,7 +2816,7 @@ void Tokenizer::removeRedundantAssignment() { Token::eraseTokens(tok2, tok2->tokAt(4)); } - else if (Token::Match(tok2, "[;{}] %var% = %var% ;") && localvars.find(tok2->next()->varId()) != localvars.end()) + else if (Token::Match(tok2, "[;{}] %var% = %any% ;") && localvars.find(tok2->next()->varId()) != localvars.end()) { Token::eraseTokens(tok2, tok2->tokAt(4)); } @@ -4515,7 +4517,7 @@ bool Tokenizer::simplifyRedundantParanthesis() ret = true; } - if (Token::Match(tok->previous(), "[(!*;}] ( %var% )") && tok->next()->varId() != 0) + if (Token::Match(tok->previous(), "[(!*;{}] ( %var% )") && tok->next()->varId() != 0) { // We have "( var )", remove the paranthesis tok->deleteThis(); diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 0a3574a7b..d5ce7875a 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -293,7 +293,7 @@ private: { const char code1[] = "void f() { int a; bool use = true; if( use ) a=0; else if( bb ) a=1; else if( cc ) a=33; else { gg = 0; } int c=1; }"; - const char code2[] = "void f ( ) { int a ; ; ; { a = 0 ; } int c ; c = 1 ; }"; + const char code2[] = "void f ( ) { ; ; ; { ; } ; ; }"; ASSERT_EQUALS(code2, tok(code1)); } @@ -485,7 +485,7 @@ private: ASSERT_EQUALS("return p ;", tok("return (p);")); ASSERT_EQUALS("void f ( ) { int * p ; if ( ! * p ) { } }", tok("void f(){int *p; if (*(p) == 0) {}}")); ASSERT_EQUALS("void f ( ) { int * p ; if ( ! * p ) { } }", tok("void f(){int *p; if (*p == 0) {}}")); - ASSERT_EQUALS("void f ( ) { int p ; p = 1 ; }", tok("void f(){int p; (p) = 1;}")); + ASSERT_EQUALS("void f ( int & p ) { p = 1 ; }", tok("void f(int &p) {(p) = 1;}")); ASSERT_EQUALS("void f ( ) { int p [ 10 ] ; p [ 0 ] = 1 ; }", tok("void f(){int p[10]; (p)[0] = 1;}")); ASSERT_EQUALS("void f ( ) { int p ; if ( ! p ) { } }", tok("void f(){int p; if ((p) == 0) {}}")); ASSERT_EQUALS("void f ( ) { int * p ; * p = 1 ; }", tok("void f(){int *p; *(p) = 1;}")); @@ -542,28 +542,28 @@ private: void removePostIncrement() { - const char code[] = "void f()\n" + const char code[] = "void f(int &c)\n" "{\n" - " unsigned int c = 0;\n" + " c = 0;\n" " c++;\n" " if (c>0) { c++; }\n" " c++;\n" "}\n"; - ASSERT_EQUALS("void f ( ) { int c ; c = 3 ; ; { ; } ; }", tok(code)); + ASSERT_EQUALS("void f ( int & c ) { c = 3 ; ; { ; } ; }", tok(code)); } void removePreIncrement() { { - const char code[] = "void f()\n" + const char code[] = "void f(int &c)\n" "{\n" - " unsigned int c = 0;\n" + " c = 0;\n" " ++c;\n" " if (c>0) { ++c; }\n" " ++c;\n" "}\n"; - ASSERT_EQUALS("void f ( ) { int c ; c = 3 ; ; { ; } ; }", tok(code)); + ASSERT_EQUALS("void f ( int & c ) { c = 3 ; ; { ; } ; }", tok(code)); } { @@ -752,22 +752,22 @@ private: const char code[] = "void f()\n" "{\n" " char* ptrs[2];\n" - " int a = sizeof( ptrs );\n" + " a = sizeof( ptrs );\n" "}\n"; std::ostringstream oss; oss << (sizeofFromTokenizer("*") * 2); - ASSERT_EQUALS("void f ( ) { char * ptrs [ 2 ] ; int a ; a = " + oss.str() + " ; }", sizeof_(code)); + ASSERT_EQUALS("void f ( ) { char * ptrs [ 2 ] ; a = " + oss.str() + " ; }", sizeof_(code)); } { const char code[] = "void f()\n" "{\n" " char* ptrs[55];\n" - " int a = sizeof( ptrs );\n" + " a = sizeof( ptrs );\n" "}\n"; std::ostringstream oss; oss << (sizeofFromTokenizer("*") * 55); - ASSERT_EQUALS("void f ( ) { char * ptrs [ 55 ] ; int a ; a = " + oss.str() + " ; }", sizeof_(code)); + ASSERT_EQUALS("void f ( ) { char * ptrs [ 55 ] ; a = " + oss.str() + " ; }", sizeof_(code)); } @@ -775,11 +775,11 @@ private: const char code[] = "void f()\n" "{\n" " char* ptrs;\n" - " int a = sizeof( ptrs );\n" + " a = sizeof( ptrs );\n" "}\n"; std::ostringstream oss; oss << sizeofFromTokenizer("*"); - ASSERT_EQUALS("void f ( ) { ; int a ; a = " + oss.str() + " ; }", sizeof_(code)); + ASSERT_EQUALS("void f ( ) { ; a = " + oss.str() + " ; }", sizeof_(code)); } } @@ -1941,7 +1941,7 @@ private: " bool x = false;\n" " int b = x ? 44 : 3;\n" "}\n"; - ASSERT_EQUALS("void f ( ) { ; ; int b ; b = 3 ; }", tok(code)); + ASSERT_EQUALS("void f ( ) { ; ; ; ; }", tok(code)); } { @@ -3014,7 +3014,7 @@ private: "}\n" "}"; - ASSERT_EQUALS("void f ( ) { int x ; x = 0 ; { g ( ) ; } }", tok(code)); + ASSERT_EQUALS("void f ( ) { ; ; { g ( ) ; } }", tok(code)); } { @@ -3027,7 +3027,7 @@ private: "}\n" "}"; - ASSERT_EQUALS("void f ( ) { int x ; x = 1 ; }", tok(code)); + ASSERT_EQUALS("void f ( ) { ; ; }", tok(code)); } { @@ -3266,17 +3266,17 @@ private: // ticket #1005 - int *p(0); => int *p = 0; { const char code[] = "void foo() { int *p(0); }"; - ASSERT_EQUALS("void foo ( ) { int * p ; p = 0 ; }", tok(code)); + ASSERT_EQUALS("void foo ( ) { ; ; }", tok(code)); } { const char code[] = "void foo() { int p(0); }"; - ASSERT_EQUALS("void foo ( ) { int p ; p = 0 ; }", tok(code)); + ASSERT_EQUALS("void foo ( ) { ; ; }", tok(code)); } { const char code[] = "void a() { foo *p(0); }"; - ASSERT_EQUALS("void a ( ) { foo * p ; p = 0 ; }", tok(code)); + ASSERT_EQUALS("void a ( ) { ; ; }", tok(code)); } } }; diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index f39c9e157..68be426c9 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -2269,7 +2269,7 @@ private: std::ostringstream ostr; for (const Token *tok = tokenizer.tokens(); tok; tok = tok->next()) ostr << " " << tok->str(); - ASSERT_EQUALS(" void f ( ) { const int a = 45 ; { int b ; b = 45 ; } } void g ( ) { int a ; a = 2 ; }", ostr.str()); + ASSERT_EQUALS(" void f ( ) { const int a = 45 ; { ; ; } } void g ( ) { ; ; }", ostr.str()); } void simplify_constants2() @@ -2872,6 +2872,7 @@ private: void removeRedundantAssignment() { ASSERT_EQUALS("void f ( ) { ; int * q ; ; }", tokenizeAndStringify("void f() { int *p, *q; p = q; }", true)); + ASSERT_EQUALS("void f ( ) { ; ; int * q ; ; }", tokenizeAndStringify("void f() { int *p = 0, *q; p = q; }", true)); } };