From 153a13272c165271bf4d9ad005e96091a09a87f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 30 Nov 2009 16:45:19 +0100 Subject: [PATCH] ericsesterhenn: Fix #1028 (False positive resource leak) --- lib/tokenize.cpp | 8 ++++++++ test/testmemleak.cpp | 9 +++++++++ test/testsimplifytokens.cpp | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 68aa3adce..41f442151 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -4728,6 +4728,14 @@ void Tokenizer::simplifyComparisonOrder() else tok->tokAt(2)->str("<="); } + else if (Token::Match(tok, "( %num% ==|!= %var% )")) + { + if (!tok->next()->isName() && !tok->next()->isNumber()) + continue; + const std::string op1(tok->strAt(1)); + tok->next()->str(tok->strAt(3)); + tok->tokAt(3)->str(op1); + } } } diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index 9a1145d25..c1f941536 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -2194,6 +2194,15 @@ private: " close(fd);\n" "}\n", true); ASSERT_EQUALS("", errout.str()); + + check("void f(const char *path)\n" + "{\n" + " int fd = open(path, O_RDONLY);\n" + " if (-1 == fd)\n" + " return;\n" + " close(fd);\n" + "}\n", true); + ASSERT_EQUALS("", errout.str()); } void creat_function() diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 6e75f733e..2af13201a 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -439,7 +439,7 @@ private: ASSERT_EQUALS("= p ;", tok("= (p);")); ASSERT_EQUALS("if ( a < p ) { }", tok("if(a<(p)){}")); ASSERT_EQUALS("void f ( ) { int p ; if ( p == -1 ) { } }", tok("void f(){int p; if((p)==-1){}}")); - ASSERT_EQUALS("void f ( ) { int p ; if ( -1 == p ) { } }", tok("void f(){int p; if(-1==(p)){}}")); + ASSERT_EQUALS("void f ( ) { int p ; if ( p == -1 ) { } }", tok("void f(){int p; if(-1==(p)){}}")); ASSERT_EQUALS("void f ( ) { int p ; if ( p ) { } }", tok("void f(){int p; if((p)){}}")); ASSERT_EQUALS("return p ;", tok("return (p);")); ASSERT_EQUALS("void f ( ) { int * p ; if ( ! * p ) { } }", tok("void f(){int *p; if (*(p) == 0) {}}"));