From 600f3a834d4afc59890c368a87a945c72e9a6921 Mon Sep 17 00:00:00 2001 From: Slava Semushin Date: Tue, 28 Jul 2009 02:13:08 +0700 Subject: [PATCH] Fixed ticket #514 (false positive:: memory leak when using comma near delete[]) http://sourceforge.net/apps/trac/cppcheck/ticket/514 --- src/tokenize.cpp | 8 ++++++++ test/testsimplifytokens.cpp | 11 +++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/tokenize.cpp b/src/tokenize.cpp index f43f320da..50adf447c 100644 --- a/src/tokenize.cpp +++ b/src/tokenize.cpp @@ -3225,6 +3225,14 @@ bool Tokenizer::simplifyComma() ret = true; break; } + else if (Token::Match(tok2, "delete %var%") || + Token::Match(tok2, "delete [ ] %var%")) + { + // Handle "delete a, a = 0;" + tok->str(";"); + ret = true; + break; + } else if (Token::Match(tok2, "[;,{}()]")) { break; diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index e33a20b25..b9fafd201 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -1076,10 +1076,17 @@ private: { const char code[] = "void foo()\n" "{\n" - " int *a = new int[10];\n" " delete [] a, a = 0;\n" "}\n"; - TODO_ASSERT_EQUALS(" void foo ( ) { int * a ; a = new int [ 10 ] ; delete [ ] a ; a = 0 ; }", sizeof_(code)); + ASSERT_EQUALS(" void foo ( ) { delete [ ] a ; a = 0 ; }", sizeof_(code)); + } + + { + const char code[] = "void foo()\n" + "{\n" + " delete a, a = 0;\n" + "}\n"; + ASSERT_EQUALS(" void foo ( ) { delete a ; a = 0 ; }", sizeof_(code)); } }