diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 33647750b..ddea9a002 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3528,10 +3528,6 @@ bool Tokenizer::simplifyTokenList1(const char FileName[]) // simplify bit fields.. simplifyBitfields(); - // Simplify '(p == 0)' to '(!p)' - simplifyIfNot(); - simplifyIfNotNull(); - // The simplifyTemplates have inner loops if (_settings->terminated()) return false; @@ -6119,15 +6115,15 @@ void Tokenizer::simplifyIfNotNull() for (Token *tok = list.front(); tok; tok = tok->next()) { Token *deleteFrom = nullptr; - // Remove 'x = (x != 0)' - if (Token::simpleMatch(tok, "= (")) { + // Remove 'x = x != 0;' + if (Token::simpleMatch(tok, "=")) { if (Token::Match(tok->tokAt(-2), "[;{}] %name%")) { const std::string& varname(tok->previous()->str()); - if (Token::simpleMatch(tok->tokAt(2), (varname + " != 0 ) ;").c_str()) || - Token::simpleMatch(tok->tokAt(2), ("0 != " + varname + " ) ;").c_str())) { + if (Token::simpleMatch(tok->next(), (varname + " != 0 ;").c_str()) || + Token::simpleMatch(tok->next(), ("0 != " + varname + " ;").c_str())) { tok = tok->tokAt(-2); - tok->deleteNext(8); + tok->deleteNext(6); } } continue; diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 5c16f496d..6644a4e55 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -1927,7 +1927,7 @@ private: " }\n" " a[i - 1] = 0;\n" " }\n" - "}"); + "}", true, "test.cpp", false); ASSERT_EQUALS("", errout.str()); check("void f() {\n" diff --git a/test/testclass.cpp b/test/testclass.cpp index 3b40ba7a6..e728ae43c 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -3889,7 +3889,7 @@ private: " if( m_d != 0 )\n" " return m_iRealVal / m_d;\n" " return dRet;\n" - "};\n" + "};", nullptr, true, false ); ASSERT_EQUALS("[test.cpp:9] -> [test.cpp:4]: (style, inconclusive) Technically the member function 'A::dGetValue' can be const.\n", errout.str()); } diff --git a/test/testcondition.cpp b/test/testcondition.cpp index 3440b03d0..402e23879 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -793,7 +793,7 @@ private: void incorrectLogicOperator4() { check("void f(int x) {\n" " if (x && x != $0) {}\n" - "}"); + "}", false); ASSERT_EQUALS("", errout.str()); } diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index 1b950e33b..91f2d15ba 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -69,6 +69,7 @@ private: TEST_CASE(garbageCode26); TEST_CASE(garbageCode27); TEST_CASE(garbageCode28); + TEST_CASE(garbageCode29); TEST_CASE(garbageValueFlow); TEST_CASE(garbageSymbolDatabase); @@ -379,6 +380,11 @@ private: "};\n"), InternalError); } + void garbageCode29() { + // ticket #2601 segmentation fault + checkCode("|| #if #define <="); + } + void garbageValueFlow() { // #6089 const char* code = "{} int foo(struct, x1, struct x2, x3, int, x5, x6, x7)\n" diff --git a/test/testnullpointer.cpp b/test/testnullpointer.cpp index a3e9ea1a0..8edde00c3 100644 --- a/test/testnullpointer.cpp +++ b/test/testnullpointer.cpp @@ -308,7 +308,7 @@ private: " return;\n" " }\n" " if (!abc);\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:5]: (warning) Possible null pointer dereference: abc - otherwise it is redundant to check it against null.\n", errout.str()); // TODO: False negative if member of member is dereferenced @@ -323,7 +323,7 @@ private: " abc->a = 0;\n" " if (abc && abc->b == 0)\n" " ;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:3]: (warning) Possible null pointer dereference: abc - otherwise it is redundant to check it against null.\n", errout.str()); // ok dereferencing in a condition @@ -560,7 +560,7 @@ private: "{\n" " if (*p == 0) { }\n" " if (!p) { }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:4]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n", errout.str()); // no error @@ -597,7 +597,7 @@ private: " int a = 2 * x;" " if (x == 0)\n" " ;\n" - "}", true); + "}", true, "test.cpp", false); ASSERT_EQUALS("", errout.str()); check("void foo(int *p)\n" @@ -823,12 +823,12 @@ private: check("void f(struct ABC *abc) {\n" " WARN_ON(!abc || abc->x == 0);\n" " if (!abc) { }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); check("void f(struct ABC *abc) {\n" " WARN_ON(!abc || abc->x == 7);\n" " if (!abc) { }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); // #3425 - false positives when there are macros @@ -1343,34 +1343,34 @@ private: " if (NULL == p) {\n" " }\n" " *p = 0;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:4] -> [test.cpp:2]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n", errout.str()); check("void foo(char *p) {\n" " if (p == NULL) {\n" " }\n" " *p = 0;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:4] -> [test.cpp:2]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n", errout.str()); check("void foo(char *p) {\n" " if (p == NULL) {\n" " }\n" " printf(\"%c\", *p);\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:4] -> [test.cpp:2]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n", errout.str()); check("void foo(char *p) {\n" " if (p && *p == 0) {\n" " }\n" " printf(\"%c\", *p);\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:4] -> [test.cpp:2]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n", errout.str()); check("void foo(char *p) {\n" " if (p && *p == 0) {\n" " } else { *p = 0; }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n", errout.str()); check("void foo(char *p) {\n" @@ -1500,7 +1500,7 @@ private: " MACRO;\n" " }\n" " fred->a();\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); // #2493 - switch @@ -1513,7 +1513,7 @@ private: " fred->a();\n" " break;\n" " };\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); // #4118 - second if @@ -1549,7 +1549,7 @@ private: " else {\n" " int b = *i;\n" " }\n" - "}", true); + "}", true, "test.cpp", false); ASSERT_EQUALS("", errout.str()); // #2696 - false positives nr 1 @@ -1611,7 +1611,7 @@ private: " if (p == 0 && (p = malloc(10)) != 0) {\n" " *p = 0;\n" " }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); // check, assign and use @@ -1620,7 +1620,7 @@ private: " if (p == 0 && (p = malloc(10)) != a && (*p = a)) {\n" " *p = 0;\n" " }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); // check, and use @@ -1629,7 +1629,7 @@ private: " if (p == 0 && (*p = 0)) {\n" " return;\n" " }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:3]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n", errout.str()); // check, and use @@ -1638,7 +1638,7 @@ private: " if (p == 0 && p->x == 10) {\n" " return;\n" " }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:3]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n", errout.str()); // check, and use @@ -1647,7 +1647,7 @@ private: " if (p == 0 || p->x == 10) {\n" " return;\n" " }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); // check, and use @@ -1656,7 +1656,7 @@ private: " if (p == NULL && (*p = a)) {\n" " return;\n" " }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:3]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n", errout.str()); // check, and use @@ -1664,7 +1664,7 @@ private: " if (!p && x==1 || p && p->x==0) {\n" " return;\n" " }\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); { @@ -1673,17 +1673,17 @@ private: " fred->x();\n" "}"; - check(code); // non-inconclusive + check(code, false, "test.cpp", false); // non-inconclusive ASSERT_EQUALS("", errout.str()); - check(code, true); // inconclusive + check(code, true, "test.cpp", false); // inconclusive ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning, inconclusive) Possible null pointer dereference: fred - otherwise it is redundant to check it against null.\n", errout.str()); } check("void f(char *s) {\n" // #3358 " if (s==0);\n" " strcpy(a, s?b:c);\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); // sizeof @@ -2054,7 +2054,7 @@ private: " std::cin >> p;\n" " std::cout << abc << p;\n" " }\n" - "}"); + "}", false, "test.cpp", false); TODO_ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n" "[test.cpp:4] -> [test.cpp:2]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n" "[test.cpp:5] -> [test.cpp:2]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n" @@ -2281,7 +2281,7 @@ private: check("void f(int *p = 0) {\n" " if (p != 0 && bar())\n" " *p = 0;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); check("void f(int *p) {\n" @@ -2292,7 +2292,7 @@ private: check("void f(int *p = 0) {\n" " if (p != 0)\n" " *p = 0;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); check("void f(int *p = 0) {\n" @@ -2300,13 +2300,13 @@ private: " if (p == 0)\n" " p = &y;\n" " *p = 0;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); check("void f(int *p = 0) {\n" " if (a != 0)\n" " *p = 0;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("[test.cpp:3]: (warning) Possible null pointer dereference if the default parameter value is used: p\n", errout.str()); check("void f(int *p = 0) {\n" @@ -2326,7 +2326,7 @@ private: " return 0;\n" " }\n" " return *p;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); check("void f(int *p = 0) {\n" @@ -2400,7 +2400,7 @@ private: " init(&p);\n" " }\n" " *p = 0;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); check("void f(int *p = 0) {\n" @@ -2408,7 +2408,7 @@ private: " throw SomeException;\n" " }\n" " *p = 0;\n" - "}"); + "}", false, "test.cpp", false); ASSERT_EQUALS("", errout.str()); check("void foo(int *p = 0) {\n" diff --git a/test/testother.cpp b/test/testother.cpp index 6293ca71b..f7251d55c 100644 --- a/test/testother.cpp +++ b/test/testother.cpp @@ -179,7 +179,7 @@ private: TEST_CASE(redundantPointerOp); } - void check(const char raw_code[], const char *filename = nullptr, bool experimental = false, bool inconclusive = true, bool posix = false, bool runSimpleChecks=true, Settings* settings = 0) { + void check(const char raw_code[], const char *filename = nullptr, bool experimental = false, bool inconclusive = true, bool posix = false, bool runSimpleChecks=true, Settings* settings = 0, bool verify = true) { // Clear the error buffer.. errout.str(""); @@ -219,7 +219,7 @@ private: const std::string str1(tokenizer.tokens()->stringifyList(0,true)); tokenizer.simplifyTokenList2(); const std::string str2(tokenizer.tokens()->stringifyList(0,true)); - if (str1 != str2) + if (verify && str1 != str2) warnUnsimplified(str1, str2); checkOther.runSimplifiedChecks(&tokenizer, settings, this); } @@ -418,13 +418,13 @@ private: check("void f(int x) {\n" " int y = 17 / x;\n" " if (x == 0) {}\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Either the condition 'x==0' is useless or there is division by zero at line 2.\n", errout.str()); check("void f(unsigned int x) {\n" " int y = 17 / x;\n" " if (x != 0) {}\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Either the condition 'x!=0' is useless or there is division by zero at line 2.\n", errout.str()); // function call @@ -441,7 +441,7 @@ private: " int y = 17 / x;\n" " x = some+calculation;\n" " if (x != 0) {}\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("", errout.str()); { @@ -452,7 +452,7 @@ private: " int y = 17 / x;\n" " do_something();\n" " if (x != 0) {}\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("", errout.str()); // function is called. but don't care, variable is local @@ -462,7 +462,7 @@ private: " int y = 17 / x;\n" " do_something();\n" " if (x != 0) {}\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("[test.cpp:6] -> [test.cpp:4]: (warning) Either the condition 'x!=0' is useless or there is division by zero at line 4.\n", errout.str()); } @@ -477,7 +477,7 @@ private: "void f() {\n" " int y = 17 / x;\n" " while (y || x == 0) { x--; }\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("", errout.str()); // ticket 5033 segmentation fault (valid code) in CheckOther::checkZeroDivisionOrUselessCondition @@ -500,19 +500,19 @@ private: check("int f(int d) {\n" " int r = (a?b:c) / d;\n" " if (d == 0) {}\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:2]: (warning) Either the condition 'd==0' is useless or there is division by zero at line 2.\n", errout.str()); check("int f(int a) {\n" " int r = a ? 1 / a : 0;\n" " if (a == 0) {}\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("", errout.str()); check("int f(int a) {\n" " int r = (a == 0) ? 0 : 1 / a;\n" " if (a == 0) {}\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("", errout.str()); } @@ -3209,7 +3209,7 @@ private: " for (i == 0; i < 10; i ++) {\n" " c ++;\n" " }\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("[test.cpp:2]: (warning, inconclusive) Found suspicious equality comparison. Did you intend to assign a value instead?\n", errout.str()); check("void foo(int c) {\n" @@ -3266,7 +3266,7 @@ private: " for (int i = (x == 0) ? 0 : 5; i < 10; i ++) {\n" " x++;\n" " }\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("", errout.str()); check("void foo(int x) {\n" @@ -3348,7 +3348,7 @@ private: check("void f(int x) {\n" " x = (x != 0);" " func(x);\n" - "}"); + "}", nullptr, false, true, false, true, nullptr, false); ASSERT_EQUALS("", errout.str()); // ticket #3001 - false positive @@ -3749,12 +3749,12 @@ private: void clarifyCalculation() { check("int f(char c) {\n" " return 10 * (c == 0) ? 1 : 2;\n" - "}"); + "}", nullptr, false, false, false, true, nullptr, false); ASSERT_EQUALS("[test.cpp:2]: (style) Clarify calculation precedence for '*' and '?'.\n", errout.str()); check("void f(char c) {\n" " printf(\"%i\", 10 * (c == 0) ? 1 : 2);\n" - "}"); + "}", nullptr, false, false, false, true, nullptr, false); ASSERT_EQUALS("[test.cpp:2]: (style) Clarify calculation precedence for '*' and '?'.\n", errout.str()); check("void f() {\n" @@ -4264,7 +4264,7 @@ private: check("void foo() {\n" " if ((strcmp(a, b) == 0) || (strcmp(a, b) == 0)) {}\n" - "}", "test.cpp", false, false, false, true, &settings_std); + "}", "test.cpp", false, false, false, true, &settings_std, false); ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '||'.\n", errout.str()); check("void GetValue() { return rand(); }\n" diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 450208bdb..3b25292fd 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -104,7 +104,9 @@ private: TEST_CASE(test_4881); // similar to doWhileAssign (#4911), taken from #4881 with full code // "if(0==x)" => "if(!x)" - TEST_CASE(ifnot); + TEST_CASE(simplifyIfNot); + TEST_CASE(simplifyIfNotNull); + TEST_CASE(combine_wstrings); // Simplify "not" to "!" (#345) @@ -261,7 +263,6 @@ private: TEST_CASE(removeUnnecessaryQualification9); // ticket #3151 TEST_CASE(removeUnnecessaryQualification10); // ticket #3310 segmentation fault - TEST_CASE(simplifyIfNotNull); TEST_CASE(simplifyVarDecl1); // ticket # 2682 segmentation fault TEST_CASE(simplifyVarDecl2); // ticket # 2834 segmentation fault TEST_CASE(return_strncat); // ticket # 2860 Returning value of strncat() reported as memory leak @@ -1672,17 +1673,24 @@ private: ASSERT_EQUALS("; do { current = f ( ) ; } while ( ( current ) != 0 ) ;", simplifyIfAndWhileAssign(";do { } while((current=f()) != NULL);")); } - void ifnot() { - ASSERT_EQUALS("if ( ! x ) { ; }", tok("if(0==x);", false)); - ASSERT_EQUALS("if ( ! x ) { ; }", tok("if(x==0);", false)); - ASSERT_EQUALS("if ( ! ( a = b ) ) { ; }", tok("if(0==(a=b));", false)); - ASSERT_EQUALS("if ( ! a && b ( ) ) { ; }", tok("if( 0 == a && b() );", false)); - ASSERT_EQUALS("if ( b ( ) && ! a ) { ; }", tok("if( b() && 0 == a );", false)); - ASSERT_EQUALS("if ( ! ( a = b ) ) { ; }", tok("if((a=b)==0);", false)); - ASSERT_EQUALS("if ( ! x . y ) { ; }", tok("if(x.y==0);", false)); - ASSERT_EQUALS("if ( ! x ) { ; }", tok("if((x==0));", false)); - ASSERT_EQUALS("if ( ( ! x ) && ! y ) { ; }", tok("if((x==0) && y==0);", false)); - ASSERT_EQUALS("if ( ! ( ! fclose ( fd ) ) ) { ; }", tok("if(!(fclose(fd) == 0));", false)); + void simplifyIfNot() { + ASSERT_EQUALS("if ( ! x ) { ; }", tok("if(0==x);")); + ASSERT_EQUALS("if ( ! x ) { ; }", tok("if(x==0);")); + ASSERT_EQUALS("if ( ! ( a = b ) ) { ; }", tok("if(0==(a=b));")); + ASSERT_EQUALS("if ( ! a && b ( ) ) { ; }", tok("if( 0 == a && b() );")); + ASSERT_EQUALS("if ( b ( ) && ! a ) { ; }", tok("if( b() && 0 == a );")); + ASSERT_EQUALS("if ( ! ( a = b ) ) { ; }", tok("if((a=b)==0);")); + ASSERT_EQUALS("if ( ! x . y ) { ; }", tok("if(x.y==0);")); + ASSERT_EQUALS("if ( ! x ) { ; }", tok("if((x==0));")); + ASSERT_EQUALS("if ( ( ! x ) && ! y ) { ; }", tok("if((x==0) && y==0);")); + ASSERT_EQUALS("if ( ! ( ! fclose ( fd ) ) ) { ; }", tok("if(!(fclose(fd) == 0));")); + } + + void simplifyIfNotNull() { + const char code[] = "void f(int x) {\n" + " x = (x != 0);\n" + "}"; + ASSERT_EQUALS("void f ( int x ) { }", tok(code, true)); } void not1() { @@ -4004,22 +4012,6 @@ private: ASSERT_EQUALS("", errout.str()); } - void simplifyIfNotNull() { - { - // ticket # 2601 segmentation fault - const char code[] = "|| #if #define <="; - tok(code, false); - ASSERT_EQUALS("", errout.str()); - } - - { - const char code[] = "void f(int x) {\n" - " x = (x != 0);\n" - "}"; - ASSERT_EQUALS("void f ( int x ) { }", tok(code, false)); - } - } - void simplifyVarDecl1() { // ticket # 2682 segmentation fault const char code[] = "x a[0] ="; tok(code, false); diff --git a/test/teststring.cpp b/test/teststring.cpp index 7f21266c2..b625402b5 100644 --- a/test/teststring.cpp +++ b/test/teststring.cpp @@ -395,7 +395,7 @@ private: check("void foo(char* c) {\n" " if(c == '\\0') bar();\n" "}"); - TODO_ASSERT_EQUALS("[test.cpp:2]: (warning) Char literal compared with pointer 'c'. Did you intend to dereference it?\n", "", errout.str()); + ASSERT_EQUALS("[test.cpp:2]: (warning) Char literal compared with pointer 'c'. Did you intend to dereference it?\n", errout.str()); check("void f() {\n" " struct { struct { char *str; } x; } a;\n" diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index b7def1bb4..31ac40cda 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -259,7 +259,7 @@ private: TEST_CASE(simplify_constants4); TEST_CASE(simplify_constants5); TEST_CASE(simplify_constants6); // Ticket #5625: Ternary operator as template parameter - TEST_CASE(simplify_null); + TEST_CASE(simplifyNull); TEST_CASE(simplifyMulAndParens); // Ticket #2784 + #3184 TEST_CASE(simplifyStructDecl); @@ -396,8 +396,6 @@ private: TEST_CASE(simplifyOperatorName8); // ticket #5706 TEST_CASE(simplifyOperatorName9); // ticket #5709 - comma operator not properly tokenized - TEST_CASE(simplifyNull); - TEST_CASE(simplifyNullArray); // Some simple cleanups of unhandled macros in the global scope @@ -1867,7 +1865,7 @@ private: "{" " int i ;" " for ( i = 0 ; i < 10 ; ++ i ) {" - " if ( ! * str ) { goto label ; }" + " if ( * str == 0 ) { goto label ; }" " }" " return ;" " label : ;" @@ -3336,7 +3334,7 @@ private: " return;" "}"; - ASSERT_EQUALS("void foo ( ) { if ( ! s ) { return ; } }", tokenizeAndStringify(code)); + ASSERT_EQUALS("void foo ( ) { if ( s == 0 ) { return ; } }", tokenizeAndStringify(code)); } void removeParentheses3() { @@ -3449,7 +3447,7 @@ private: } void removeParentheses14() { - ASSERT_EQUALS("; if ( ! ( i & 1 ) ) { ; } ;", tokenizeAndStringify("; if ( (i & 1) == 0 ); ;", false)); + ASSERT_EQUALS("; if ( ( i & 1 ) == 0 ) { ; } ;", tokenizeAndStringify("; if ( (i & 1) == 0 ); ;", false)); } void removeParentheses15() { @@ -3678,7 +3676,7 @@ private: } } - void simplify_null() { + void simplifyNull() { { const char code[] = "int * p = NULL;\n" @@ -3689,7 +3687,11 @@ private: } ASSERT_EQUALS("( a == nullptr )", tokenizeAndStringify("(a==nullptr)", false, false, Settings::Unspecified, "test.c")); - ASSERT_EQUALS("( ! a )", tokenizeAndStringify("(a==nullptr)", false, false, Settings::Unspecified, "test.cpp")); + ASSERT_EQUALS("( a == 0 )", tokenizeAndStringify("(a==nullptr)", false, false, Settings::Unspecified, "test.cpp")); + + ASSERT_EQUALS("if ( p == 0 )", tokenizeAndStringify("if (p==NULL)")); + ASSERT_EQUALS("f ( NULL ) ;", tokenizeAndStringify("f(NULL);")); + ASSERT_EQUALS("char * i ; i = 0 ;", tokenizeAndStringify("char* i = (NULL);")); } void simplifyMulAndParens() { @@ -6217,12 +6219,6 @@ private: ASSERT_EQUALS(code, tokenizeAndStringify(code)); } - void simplifyNull() { - ASSERT_EQUALS("if ( ! p )", tokenizeAndStringify("if (p==NULL)")); - ASSERT_EQUALS("f ( NULL ) ;", tokenizeAndStringify("f(NULL);")); - ASSERT_EQUALS("char * i ; i = 0 ;", tokenizeAndStringify("char* i = (NULL);")); - } - void simplifyNullArray() { ASSERT_EQUALS("* ( foo . bar [ 5 ] ) = x ;", tokenizeAndStringify("0[foo.bar[5]] = x;")); } diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 8bedbcf06..e6a2279ce 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2555,7 +2555,7 @@ private: checkUninitVar2("static void f(int x, int y) {\n" " int a;\n" " if (x == 0 && (a == 1)) { }\n" - "}"); + "}", "test.cpp", false); ASSERT_EQUALS("[test.cpp:3]: (error) Uninitialized variable: a\n", errout.str()); checkUninitVarB("void f() {\n" @@ -3002,7 +3002,7 @@ private: " if (y != 0) return;\n" " i++;\n" " }\n" - "}"); + "}", "test.cpp", false); ASSERT_EQUALS("", errout.str()); checkUninitVar2("void f() {\n" @@ -3012,7 +3012,7 @@ private: " if (y != 0) return;\n" " i++;\n" " }\n" - "}"); + "}", "test.cpp", false); ASSERT_EQUALS("", errout.str()); checkUninitVarB("void f() {\n" @@ -3399,7 +3399,7 @@ private: " struct FRED fred;\n" " fred.a = do_something();\n" " if (fred.b == 0) { }\n" - "}\n", "test.c"); + "}\n", "test.c", false); ASSERT_EQUALS("[test.c:9]: (error) Uninitialized struct member: fred.b\n", errout.str()); checkUninitVar2("struct Fred { int a; };\n"