From d0e122079fb6d175a794960c240657fd80f3edcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 16 May 2010 19:55:16 +0200 Subject: [PATCH] Refactoring: Removed possibleError messages from CheckMemoryLeaks --- lib/checkmemoryleak.cpp | 88 +++++++++++++++-------------------------- lib/checkmemoryleak.h | 25 ++++++------ test/testmemleak.cpp | 67 ++++++++++--------------------- 3 files changed, 63 insertions(+), 117 deletions(-) diff --git a/lib/checkmemoryleak.cpp b/lib/checkmemoryleak.cpp index 8a8964222..a109e16cb 100644 --- a/lib/checkmemoryleak.cpp +++ b/lib/checkmemoryleak.cpp @@ -286,15 +286,15 @@ CheckMemoryLeak::AllocType CheckMemoryLeak::getDeallocationType(const Token *tok //-------------------------------------------------------------------------- -void CheckMemoryLeak::memoryLeak(const Token *tok, const std::string &varname, AllocType alloctype, bool all) +void CheckMemoryLeak::memoryLeak(const Token *tok, const std::string &varname, AllocType alloctype) { if (alloctype == CheckMemoryLeak::File || alloctype == CheckMemoryLeak::Pipe || alloctype == CheckMemoryLeak::Fd || alloctype == CheckMemoryLeak::Dir) - resourceLeakError(tok, varname.c_str(), all); + resourceLeakError(tok, varname.c_str()); else - memleakError(tok, varname.c_str(), all); + memleakError(tok, varname.c_str()); } //--------------------------------------------------------------------------- @@ -332,17 +332,17 @@ void CheckMemoryLeak::reportErr(const std::list &callstack, Sever std::cout << errmsg.toXML() << std::endl; } -void CheckMemoryLeak::memleakError(const Token *tok, const std::string &varname, bool all) +void CheckMemoryLeak::memleakError(const Token *tok, const std::string &varname) { - reportErr(tok, all ? Severity::possibleError : Severity::error, "memleak", "Memory leak: " + varname); + reportErr(tok, Severity::error, "memleak", "Memory leak: " + varname); } -void CheckMemoryLeak::resourceLeakError(const Token *tok, const std::string &varname, bool all) +void CheckMemoryLeak::resourceLeakError(const Token *tok, const std::string &varname) { std::string errmsg("Resource leak"); if (!varname.empty()) errmsg += ": " + varname; - reportErr(tok, all ? Severity::possibleError : Severity::error, "resourceLeak", errmsg); + reportErr(tok, Severity::error, "resourceLeak", errmsg); } void CheckMemoryLeak::deallocDeallocError(const Token *tok, const std::string &varname) @@ -360,9 +360,9 @@ void CheckMemoryLeak::mismatchSizeError(const Token *tok, const std::string &sz) reportErr(tok, Severity::error, "mismatchSize", "The given size " + sz + " is mismatching"); } -void CheckMemoryLeak::mismatchAllocDealloc(const std::list &callstack, const std::string &varname, bool all) +void CheckMemoryLeak::mismatchAllocDealloc(const std::list &callstack, const std::string &varname) { - reportErr(callstack, all ? Severity::possibleError : Severity::error, "mismatchAllocDealloc", "Mismatching allocation and deallocation: " + varname); + reportErr(callstack, Severity::error, "mismatchAllocDealloc", "Mismatching allocation and deallocation: " + varname); } CheckMemoryLeak::AllocType CheckMemoryLeak::functionReturnType(const Token *tok) const @@ -550,7 +550,7 @@ bool CheckMemoryLeakInFunction::test_white_list(const std::string &funcname) sizeof(call_func_white_list[0]), call_func_white_list_compare) != NULL); } -const char * CheckMemoryLeakInFunction::call_func(const Token *tok, std::list callstack, const unsigned int varid, AllocType &alloctype, AllocType &dealloctype, bool &all, unsigned int sz) +const char * CheckMemoryLeakInFunction::call_func(const Token *tok, std::list callstack, const unsigned int varid, AllocType &alloctype, AllocType &dealloctype, unsigned int sz) { if (test_white_list(tok->str())) return 0; @@ -581,8 +581,8 @@ const char * CheckMemoryLeakInFunction::call_func(const Token *tok, std::listtokAt(1), callstack, 0, alloctype, dealloctype, false, all, 1); - simplifycode(func, all); + Token *func = getcode(ftok->tokAt(1), callstack, 0, alloctype, dealloctype, false, 1); + simplifycode(func); const char *ret = 0; if (Token::simpleMatch(func, "; alloc ; }")) ret = "alloc"; @@ -660,7 +660,7 @@ const char * CheckMemoryLeakInFunction::call_func(const Token *tok, std::liststr() != "{")) ftok = ftok->next(); - Token *func = getcode(ftok->tokAt(1), callstack, parameterVarid, alloctype, dealloctype, false, all, sz); + Token *func = getcode(ftok->tokAt(1), callstack, parameterVarid, alloctype, dealloctype, false, sz); //simplifycode(func, all); const Token *func_ = func; while (func_ && func_->str() == ";") @@ -685,7 +685,7 @@ const char * CheckMemoryLeakInFunction::call_func(const Token *tok, std::list callstack, const unsigned int varid, CheckMemoryLeak::AllocType &alloctype, CheckMemoryLeak::AllocType &dealloctype, bool classmember, bool &all, unsigned int sz) +Token *CheckMemoryLeakInFunction::getcode(const Token *tok, std::list callstack, const unsigned int varid, CheckMemoryLeak::AllocType &alloctype, CheckMemoryLeak::AllocType &dealloctype, bool classmember, unsigned int sz) { Token *rethead = 0, *rettail = 0; #define addtoken(_str) \ @@ -838,7 +838,7 @@ Token *CheckMemoryLeakInFunction::getcode(const Token *tok, std::listtokens(), "%varid%", varid)->str(), false); + mismatchAllocDealloc(callstack, Token::findmatch(_tokenizer->tokens(), "%varid%", varid)->str()); callstack.pop_back(); } @@ -884,7 +884,7 @@ Token *CheckMemoryLeakInFunction::getcode(const Token *tok, std::listtokens(), "%varid%", varid)->str(), false); + mismatchAllocDealloc(callstack, Token::findmatch(_tokenizer->tokens(), "%varid%", varid)->str()); callstack.pop_back(); } dealloctype = dealloc; @@ -1189,7 +1189,7 @@ Token *CheckMemoryLeakInFunction::getcode(const Token *tok, std::listinconclusive && tok2->tokAt(2)->str() != "assign" && !Token::simpleMatch(tok2->tokAt(2), "dealloc ; dealloc")) - { - Token::eraseTokens(tok2, tok2->tokAt(3)); - all = true; - } - else - { - tok2->deleteNext(); - } - done = false; - } - // Reduce "if return ; alloc ;" => "alloc ;" else if (Token::Match(tok2, "[;{}] if return ; alloc|return ;")) { @@ -1510,7 +1493,6 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok, bool &all) { if (Token::Match(tok2, "[;{}] if { assign|dealloc|use ; return ; } !!else")) { - all = true; Token::eraseTokens(tok2, tok2->tokAt(8)); done = false; } @@ -1923,7 +1905,6 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok, bool &all) if (tok2->str() == "callfunc") { tok2->deleteThis(); - all = true; done = false; } } @@ -1935,7 +1916,7 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok, bool &all) -const Token *CheckMemoryLeakInFunction::findleak(const Token *tokens, bool all) +const Token *CheckMemoryLeakInFunction::findleak(const Token *tokens) { const Token *result; @@ -1954,11 +1935,6 @@ const Token *CheckMemoryLeakInFunction::findleak(const Token *tokens, bool all) return result->tokAt(3); } - if (all && (result = Token::findmatch(tokens, "alloc ; ifv break|continue|return ;")) != NULL) - { - return result->tokAt(3); - } - if ((result = Token::findmatch(tokens, "alloc ; alloc|assign|return callfunc| ;")) != NULL) { return result->tokAt(2); @@ -2015,11 +1991,9 @@ void CheckMemoryLeakInFunction::checkScope(const Token *Tok1, const std::string AllocType alloctype = No; AllocType dealloctype = No; - bool all = false; - const Token *result; - Token *tok = getcode(Tok1, callstack, varid, alloctype, dealloctype, classmember, all, sz); + Token *tok = getcode(Tok1, callstack, varid, alloctype, dealloctype, classmember, sz); //tok->printOut((std::string("Checkmemoryleak: getcode result for: ") + varname).c_str()); // Simplify the code and check if freed memory is used.. @@ -2061,7 +2035,7 @@ void CheckMemoryLeakInFunction::checkScope(const Token *Tok1, const std::string return; } - simplifycode(tok, all); + simplifycode(tok); if (_settings->_debug && _settings->_verbose) { @@ -2082,9 +2056,9 @@ void CheckMemoryLeakInFunction::checkScope(const Token *Tok1, const std::string return; } - if ((result = findleak(tok, _settings->inconclusive)) != NULL) + if ((result = findleak(tok)) != NULL) { - memoryLeak(result, varname, alloctype, all); + memoryLeak(result, varname, alloctype); } else if ((result = Token::findmatch(tok, "dealloc ; dealloc ;")) != NULL) @@ -2417,7 +2391,7 @@ void CheckMemoryLeakInClass::variable(const std::string &classname, const Token if (alloc != CheckMemoryLeak::Many && Dealloc != CheckMemoryLeak::No && Dealloc != CheckMemoryLeak::Many && Dealloc != alloc) { callstack.push_back(tok); - mismatchAllocDealloc(callstack, classname + "::" + varname, true); + mismatchAllocDealloc(callstack, classname + "::" + varname); callstack.pop_back(); } @@ -2451,7 +2425,7 @@ void CheckMemoryLeakInClass::variable(const std::string &classname, const Token if (dealloc != CheckMemoryLeak::Many && Alloc != CheckMemoryLeak::No && Alloc != Many && Alloc != dealloc) { callstack.push_back(tok); - mismatchAllocDealloc(callstack, classname + "::" + varname, true); + mismatchAllocDealloc(callstack, classname + "::" + varname); callstack.pop_back(); } @@ -2476,11 +2450,11 @@ void CheckMemoryLeakInClass::variable(const std::string &classname, const Token if (allocInConstructor && !deallocInDestructor) { - memoryLeak(tokVarname, (classname + "::" + varname).c_str(), Alloc, true); + memoryLeak(tokVarname, (classname + "::" + varname).c_str(), Alloc); } else if (Alloc != CheckMemoryLeak::No && Dealloc == CheckMemoryLeak::No) { - memoryLeak(tokVarname, (classname + "::" + varname).c_str(), Alloc, true); + memoryLeak(tokVarname, (classname + "::" + varname).c_str(), Alloc); } } @@ -2623,7 +2597,7 @@ void CheckMemoryLeakStructMember::check() { if (indentlevel3 == 0) { - memoryLeak(tok3, (vartok->str() + "." + tok2->strAt(2)).c_str(), Malloc, false); + memoryLeak(tok3, (vartok->str() + "." + tok2->strAt(2)).c_str(), Malloc); break; } --indentlevel3; @@ -2658,7 +2632,7 @@ void CheckMemoryLeakStructMember::check() // Deallocating the struct.. else if (indentlevel2 == 0 && Token::Match(tok3, "free|kfree ( %varid% )", structid)) { - memoryLeak(tok3, (vartok->str() + "." + tok2->strAt(2)).c_str(), Malloc, false); + memoryLeak(tok3, (vartok->str() + "." + tok2->strAt(2)).c_str(), Malloc); break; } @@ -2711,7 +2685,7 @@ void CheckMemoryLeakStructMember::check() // Returning from function without deallocating struct member? if (!Token::Match(tok3, "return %varid% ;", structid)) { - memoryLeak(tok3, (vartok->str() + "." + tok2->strAt(2)).c_str(), Malloc, false); + memoryLeak(tok3, (vartok->str() + "." + tok2->strAt(2)).c_str(), Malloc); } break; } @@ -2857,7 +2831,7 @@ private: CheckMemoryLeakInFunction *checkMemleak = reinterpret_cast(C->owner); if (checkMemleak) { - checkMemleak->memleakError(tok, C->varname, false); + checkMemleak->memleakError(tok, C->varname); break; } } diff --git a/lib/checkmemoryleak.h b/lib/checkmemoryleak.h index e36714a00..bddd203f6 100644 --- a/lib/checkmemoryleak.h +++ b/lib/checkmemoryleak.h @@ -92,7 +92,7 @@ public: /** @brief What type of allocation are used.. the "Many" means that several types of allocation and deallocation are used */ enum AllocType { No, Malloc, gMalloc, New, NewArray, File, Fd, Pipe, Dir, Many }; - void memoryLeak(const Token *tok, const std::string &varname, AllocType alloctype, bool all); + void memoryLeak(const Token *tok, const std::string &varname, AllocType alloctype); /** * @brief Get type of deallocation at given position @@ -128,8 +128,8 @@ public: */ bool isclass(const Tokenizer *_tokenizer, const Token *typestr) const; - void memleakError(const Token *tok, const std::string &varname, bool all); - void resourceLeakError(const Token *tok, const std::string &varname, bool all); + void memleakError(const Token *tok, const std::string &varname); + void resourceLeakError(const Token *tok, const std::string &varname); /** * @brief Report error: deallocating a deallocated pointer @@ -139,7 +139,7 @@ public: void deallocDeallocError(const Token *tok, const std::string &varname); void deallocuseError(const Token *tok, const std::string &varname); void mismatchSizeError(const Token *tok, const std::string &sz); - void mismatchAllocDealloc(const std::list &callstack, const std::string &varname, bool all); + void mismatchAllocDealloc(const std::list &callstack, const std::string &varname); /** What type of allocated memory does the given function return? */ AllocType functionReturnType(const Token *tok) const; @@ -222,7 +222,6 @@ public: * @param varid variable id to check * @param alloctype if memory is allocated, this indicates the type of allocation * @param dealloctype if memory is deallocated, this indicates the type of deallocation - * @param all is the code simplified according to the "--all" rules or not? * @param sz not used by call_func - see getcode * @return These are the possible return values: * - NULL : no significant code @@ -234,7 +233,7 @@ public: * - "callfunc" : a function call with unknown side effects * - "&use" */ - const char * call_func(const Token *tok, std::list callstack, const unsigned int varid, AllocType &alloctype, AllocType &dealloctype, bool &all, unsigned int sz); + const char * call_func(const Token *tok, std::list callstack, const unsigned int varid, AllocType &alloctype, AllocType &dealloctype, unsigned int sz); /** * Extract a new tokens list that is easier to parse than the "_tokenizer->tokens()", the @@ -246,7 +245,6 @@ public: * @param alloctype keep track of what type of allocation is used * @param dealloctype keeps track of what type of deallocation is used * @param classmember should be set if the inspected function is a class member - * @param all has the getcode been simplified according to the "--all" rules? * @param sz size of type, used to check for mismatching size of allocation. for example "int *a;" => the sz is "sizeof(int)" * @return Newly allocated token array. Caller needs to release reserved * memory by calling Tokenizer::deleteTokens(returnValue); @@ -269,16 +267,15 @@ public: * - &use : the address of the variable is taken * - ::use : calling member function of class */ - Token *getcode(const Token *tok, std::list callstack, const unsigned int varid, AllocType &alloctype, AllocType &dealloctype, bool classmember, bool &all, unsigned int sz); + Token *getcode(const Token *tok, std::list callstack, const unsigned int varid, AllocType &alloctype, AllocType &dealloctype, bool classmember, unsigned int sz); /** * Simplify code e.g. by replacing empty "{ }" with ";" * @param tok first token. The tokens list can be modified. - * @param all is the code simplified according to the "--all" rules or not */ - void simplifycode(Token *tok, bool &all); + void simplifycode(Token *tok); - static const Token *findleak(const Token *tokens, bool all); + static const Token *findleak(const Token *tokens); /** * Checking the variable varname @@ -293,14 +290,14 @@ public: /** Report all possible errors (for the --errorlist) */ void getErrorMessages() { - memleakError(0, "varname", false); - resourceLeakError(0, "varname", false); + memleakError(0, "varname"); + resourceLeakError(0, "varname"); deallocDeallocError(0, "varname"); deallocuseError(0, "varname"); mismatchSizeError(0, "sz"); std::list callstack; - mismatchAllocDealloc(callstack, "varname", false); + mismatchAllocDealloc(callstack, "varname"); } /** diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index d34519d29..3cd26fd02 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -402,8 +402,7 @@ private: callstack.push_back(0); CheckMemoryLeak::AllocType allocType, deallocType; allocType = deallocType = CheckMemoryLeak::No; - bool all = false; - Token *tokens = checkMemoryLeak.getcode(tokenizer.tokens(), callstack, varId, allocType, deallocType, false, all, 1); + Token *tokens = checkMemoryLeak.getcode(tokenizer.tokens(), callstack, varId, allocType, deallocType, false, 1); // stringify.. std::ostringstream ret; @@ -577,7 +576,7 @@ private: } - std::string simplifycode(const char code[], bool &all) const + std::string simplifycode(const char code[]) const { // Tokenize.. Tokenizer tokenizer; @@ -602,10 +601,8 @@ private: } Settings settings; - settings.inconclusive = all; CheckMemoryLeakInFunction checkMemoryLeak(&tokenizer, &settings, NULL); - all = false; - checkMemoryLeak.simplifycode(tokens, all); + checkMemoryLeak.simplifycode(tokens); std::ostringstream ret; for (const Token *tok = tokenizer.tokens(); tok; tok = tok->next()) @@ -614,20 +611,6 @@ private: return ret.str(); } - std::string simplifycode(const char code[]) - { - bool all = false; - const std::string str1 = simplifycode(code, all); - ASSERT_EQUALS(0, (unsigned int)(all ? 1 : 0)); - - all = true; - const std::string str2 = simplifycode(code, all); - ASSERT_EQUALS((unsigned int)(all ? 1 : 0), (unsigned int)((str1 != str2) ? 1 : 0)); - - return all ? (str1 + "\n" + str2) : str1; - } - - // Test that the CheckMemoryLeaksInFunction::simplifycode works void simplifycode() @@ -649,7 +632,7 @@ private: ASSERT_EQUALS("; alloc ; if return ;", simplifycode("; alloc ; loop { if return ; if continue ; }")); ASSERT_EQUALS("; alloc ; if return ;", simplifycode("; alloc ; loop { if continue ; else return ; }")); - ASSERT_EQUALS("; alloc ; dealloc ;\n; alloc ;", simplifycode("; alloc ; if(!var) { return ; } if { dealloc ; }")); + ASSERT_EQUALS("; alloc ; if dealloc ;", simplifycode("; alloc ; if(!var) { return ; } if { dealloc ; }")); ASSERT_EQUALS("; if alloc ; else assign ; return use ;", simplifycode("; callfunc ; if callfunc { alloc ; } else { assign ; } return use ;")); ASSERT_EQUALS("; dealloc ; return ;", simplifycode("; while1 { if callfunc { dealloc ; return ; } else { continue ; } }")); @@ -662,7 +645,7 @@ private: ASSERT_EQUALS("; alloc ;", simplifycode("; alloc; if { dealloc; return; }")); ASSERT_EQUALS("; alloc ;", simplifycode("; alloc; if { return use; }")); ASSERT_EQUALS("; alloc ; return ;", simplifycode(";alloc;if{return;}return;")); - ASSERT_EQUALS("; alloc ; assign ; dealloc ;", simplifycode(";alloc;if{assign;}dealloc;")); + ASSERT_EQUALS("; alloc ; if assign ; dealloc ;", simplifycode(";alloc;if{assign;}dealloc;")); // if(var) ASSERT_EQUALS("; alloc ; return use ;", simplifycode("; alloc ; return use ;")); @@ -698,7 +681,7 @@ private: TODO_ASSERT_EQUALS("; assign ; if alloc ; }", simplifycode("; assign ; { dealloc ; if alloc ; } }")); // callfunc.. - ASSERT_EQUALS("; callfunc ;\n;", simplifycode(";callfunc;")); + ASSERT_EQUALS("; callfunc ;", simplifycode(";callfunc;")); // exit.. ASSERT_EQUALS("; exit ;", simplifycode("; alloc; exit;")); @@ -710,13 +693,13 @@ private: TODO_ASSERT_EQUALS(";\n; alloc ;", simplifycode("; alloc ; ifv { exit; }")); // dealloc; dealloc; - ASSERT_EQUALS("; alloc ; dealloc ; dealloc ;", simplifycode("; alloc ; if { dealloc ; } dealloc ;")); + ASSERT_EQUALS("; alloc ; if dealloc ; dealloc ;", simplifycode("; alloc ; if { dealloc ; } dealloc ;")); } // is there a leak in given code? if so, return the linenr - unsigned int dofindleak(const char code[], bool all = false) const + unsigned int dofindleak(const char code[]) const { // Tokenize.. Settings settings; @@ -746,7 +729,7 @@ private: } } - const Token *tok = CheckMemoryLeakInFunction::findleak(tokenizer.tokens(), all); + const Token *tok = CheckMemoryLeakInFunction::findleak(tokenizer.tokens()); return (tok ? tok->linenr() : (unsigned int)(-1)); } @@ -1247,8 +1230,6 @@ private: "}\n"); check(code.c_str(), false); ASSERT_EQUALS("", errout.str()); - check(code.c_str(), true); - ASSERT_EQUALS("[test.cpp:12]: (possible error) Memory leak: str\n", errout.str()); } void switch3() @@ -1863,14 +1844,8 @@ private: " free(buf);\n" " else\n" " free(new_buf);\n" - "}\n", true); - - // There isn't a memory leak in the code - TODO_ASSERT_EQUALS("", errout.str()); - - // This assertion checks that the message stays the same. Upon changes in the error message - // we will be notified - ASSERT_EQUALS("[test.cpp:11]: (possible error) Memory leak: buf\n", errout.str()); + "}\n", false); + ASSERT_EQUALS("", errout.str()); } void realloc6() @@ -2725,9 +2700,9 @@ private: /** * Tokenize and execute leak check for given code * @param code Source code - * @param showAll Not used + * @param inconclusive inconclusive checking */ - void check(const char code[], bool = false) + void check(const char code[], bool inconclusive = false) { // Tokenize.. Tokenizer tokenizer; @@ -2741,7 +2716,7 @@ private: // Check for memory leaks.. Settings settings; - settings.inconclusive = true; + settings.inconclusive = inconclusive; settings._checkCodingStyle = true; tokenizer.fillFunctionList(); CheckMemoryLeakInClass checkMemoryLeak(&tokenizer, &settings, this); @@ -2800,7 +2775,7 @@ private: " delete [] str2;\n" "}\n", true); - ASSERT_EQUALS("[test.cpp:4]: (possible error) Memory leak: Fred::str1\n", errout.str()); + ASSERT_EQUALS("[test.cpp:4]: (error) Memory leak: Fred::str1\n", errout.str()); } @@ -2825,7 +2800,7 @@ private: " free(str1);\n" "}\n", true); - ASSERT_EQUALS("[test.cpp:17]: (possible error) Mismatching allocation and deallocation: Fred::str1\n", errout.str()); + ASSERT_EQUALS("[test.cpp:17]: (error) Mismatching allocation and deallocation: Fred::str1\n", errout.str()); } void class3() @@ -2972,7 +2947,7 @@ private: " int * p;\n" " A() { p = new int; }\n" "};\n", true); - ASSERT_EQUALS("[test.cpp:4]: (possible error) Memory leak: A::p\n", errout.str()); + ASSERT_EQUALS("[test.cpp:4]: (error) Memory leak: A::p\n", errout.str()); } void class11() @@ -2985,7 +2960,7 @@ private: "};\n" "A::A() : p(new int[10])\n" "{ }", true); - ASSERT_EQUALS("[test.cpp:4]: (possible error) Memory leak: A::p\n", errout.str()); + ASSERT_EQUALS("[test.cpp:4]: (error) Memory leak: A::p\n", errout.str()); } void class12() @@ -3008,7 +2983,7 @@ private: "\n" "void A::cleanup()\n" "{ delete [] p; }\n", true); - ASSERT_EQUALS("[test.cpp:4]: (possible error) Memory leak: A::p\n", errout.str()); + ASSERT_EQUALS("[test.cpp:4]: (error) Memory leak: A::p\n", errout.str()); } void class13() @@ -3045,7 +3020,7 @@ private: "\n" "void A::init()\n" "{ p = new int[10]; }\n", true); - ASSERT_EQUALS("[test.cpp:3]: (possible error) Memory leak: A::p\n", errout.str()); + ASSERT_EQUALS("[test.cpp:3]: (error) Memory leak: A::p\n", errout.str()); } void class15() @@ -3162,7 +3137,7 @@ private: "A::~A() {\n" " delete [] pkt_buffer;\n" "}\n", true); - ASSERT_EQUALS("[test.cpp:14]: (possible error) Mismatching allocation and deallocation: A::pkt_buffer\n", errout.str()); + ASSERT_EQUALS("[test.cpp:14]: (error) Mismatching allocation and deallocation: A::pkt_buffer\n", errout.str()); } void func1()