From: Anna Zaks Date: Thu, 15 Mar 2012 21:13:02 +0000 (+0000) Subject: [analyzer] Allow checkers to supply call stack diagnostic hints for the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=368a0d565f078666ca5bfb7fe08d04648688e4bc;p=clang [analyzer] Allow checkers to supply call stack diagnostic hints for the BugVisitor DiagnosticPieces. When checkers create a DiagnosticPieceEvent, they can supply an extra string, which will be concatenated with the call exit message for every call on the stack between the diagnostic event and the final bug report. (This is a simple version, which could be/will be further enhanced.) For example, this is used in Malloc checker to produce the ", which allocated memory" in the following example: static char *malloc_wrapper() { // 2. Entered call from 'use' return malloc(12); // 3. Memory is allocated } void use() { char *v; v = malloc_wrapper(); // 1. Calling 'malloc_wrappers' // 4. Returning from 'malloc_wrapper', which allocated memory } // 5. Memory is never released; potential memory leak git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152837 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h b/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h index 950ee2f1ed..fea02caafd 100644 --- a/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h +++ b/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h @@ -359,10 +359,21 @@ public: class PathDiagnosticEventPiece : public PathDiagnosticSpotPiece { llvm::Optional IsPrunable; + + /// If the event occurs in a different frame than the final diagnostic, + /// supply a message that will be used to construct an extra hint on the + /// returns from all the calls on the stack from this event to the final + /// diagnostic. + /// TODO: This should be a callback that constructs a string given the + /// ExplodedNode, which would allow the checkers to refer to the expression. + std::string CallStackMessage; + public: PathDiagnosticEventPiece(const PathDiagnosticLocation &pos, - StringRef s, bool addPosRange = true) - : PathDiagnosticSpotPiece(pos, s, Event, addPosRange) {} + StringRef s, bool addPosRange = true, + StringRef callStackMsg = "") + : PathDiagnosticSpotPiece(pos, s, Event, addPosRange), + CallStackMessage(callStackMsg) {} ~PathDiagnosticEventPiece(); @@ -380,6 +391,13 @@ public: return IsPrunable.hasValue() ? IsPrunable.getValue() : false; } + StringRef getCallStackMessage() { + if (!CallStackMessage.empty()) + return CallStackMessage; + else + return StringRef(); + } + static inline bool classof(const PathDiagnosticPiece *P) { return P->getKind() == Event; } @@ -402,6 +420,10 @@ class PathDiagnosticCallPiece : public PathDiagnosticPiece { // call exit. bool NoExit; + // The custom string, which should appear after the call Return Diagnostic. + // TODO: Should we allow multiple diagnostics? + std::string CallStackMessage; + public: PathDiagnosticLocation callEnter; PathDiagnosticLocation callEnterWithin; @@ -415,6 +437,11 @@ public: const Decl *getCallee() const { return Callee; } void setCallee(const CallEnter &CE, const SourceManager &SM); + bool hasCallStackMessage() { return !CallStackMessage.empty(); } + void setCallStackMessage(StringRef st) { + CallStackMessage = st; + } + virtual PathDiagnosticLocation getLocation() const { return callEnter; } diff --git a/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/lib/StaticAnalyzer/Checkers/MallocChecker.cpp index 3f0d3d456e..e071626eb6 100644 --- a/lib/StaticAnalyzer/Checkers/MallocChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/MallocChecker.cpp @@ -1249,6 +1249,7 @@ MallocChecker::MallocBugVisitor::VisitNode(const ExplodedNode *N, const Stmt *S = 0; const char *Msg = 0; + const char *StackMsg = 0; // Retrieve the associated statement. ProgramPoint ProgLoc = N->getLocation(); @@ -1264,14 +1265,18 @@ MallocChecker::MallocBugVisitor::VisitNode(const ExplodedNode *N, return 0; // Find out if this is an interesting point and what is the kind. + // TODO: Replace 'callee' by the function name. if (Mode == Normal) { - if (isAllocated(RS, RSPrev, S)) + if (isAllocated(RS, RSPrev, S)) { Msg = "Memory is allocated"; - else if (isReleased(RS, RSPrev, S)) + StackMsg = ", which allocated memory"; + } else if (isReleased(RS, RSPrev, S)) { Msg = "Memory is released"; - else if (isReallocFailedCheck(RS, RSPrev, S)) { + StackMsg = ", which released memory"; + } else if (isReallocFailedCheck(RS, RSPrev, S)) { Mode = ReallocationFailed; Msg = "Reallocation failed"; + StackMsg = ", where reallocation failed"; } // We are in a special mode if a reallocation failed later in the path. @@ -1291,16 +1296,18 @@ MallocChecker::MallocBugVisitor::VisitNode(const ExplodedNode *N, if (!(FunName.equals("realloc") || FunName.equals("reallocf"))) return 0; Msg = "Attempt to reallocate memory"; + StackMsg = ", which attempted to reallocate memory"; Mode = Normal; } if (!Msg) return 0; + assert(StackMsg); // Generate the extra diagnostic. PathDiagnosticLocation Pos(S, BRC.getSourceManager(), N->getLocationContext()); - return new PathDiagnosticEventPiece(Pos, Msg); + return new PathDiagnosticEventPiece(Pos, Msg, true, StackMsg); } diff --git a/lib/StaticAnalyzer/Core/BugReporter.cpp b/lib/StaticAnalyzer/Core/BugReporter.cpp index 995ef264eb..0a0c1fdb51 100644 --- a/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -380,6 +380,24 @@ PathDiagnosticBuilder::getEnclosingStmtLocation(const Stmt *S) { //===----------------------------------------------------------------------===// // "Minimal" path diagnostic generation algorithm. //===----------------------------------------------------------------------===// +static void updateStackPiecesWithMessage(PathDiagnosticPiece *P, + llvm::SmallVector &CallStack) { + // If the piece contains a special message, add it to all the call + // pieces on the active stack. + if (PathDiagnosticEventPiece *ep = + dyn_cast(P)) { + StringRef stackMsg = ep->getCallStackMessage(); + + if (!stackMsg.empty()) + for (llvm::SmallVector::iterator + I = CallStack.begin(), E = CallStack.end(); I != E; ++I) + // The last message on the path to final bug is the most important + // one. Since we traverse the path backwards, do not add the message + // if one has been previously added. + if (!(*I)->hasCallStackMessage()) + (*I)->setCallStackMessage(stackMsg); + } +} static void CompactPathDiagnostic(PathPieces &path, const SourceManager& SM); @@ -391,6 +409,9 @@ static void GenerateMinimalPathDiagnostic(PathDiagnostic& PD, const LocationContext *LC = PDB.LC; const ExplodedNode *NextNode = N->pred_empty() ? NULL : *(N->pred_begin()); + + llvm::SmallVector CallStack; + while (NextNode) { N = NextNode; PDB.LC = N->getLocationContext(); @@ -403,6 +424,7 @@ static void GenerateMinimalPathDiagnostic(PathDiagnostic& PD, PathDiagnosticCallPiece::construct(N, *CE, SMgr); PD.getActivePath().push_front(C); PD.pushActivePath(&C->path); + CallStack.push_back(C); continue; } @@ -423,6 +445,10 @@ static void GenerateMinimalPathDiagnostic(PathDiagnostic& PD, C = PathDiagnosticCallPiece::construct(PD.getActivePath(), Caller); } C->setCallee(*CE, SMgr); + if (!CallStack.empty()) { + assert(CallStack.back() == C); + CallStack.pop_back(); + } continue; } @@ -681,8 +707,10 @@ static void GenerateMinimalPathDiagnostic(PathDiagnostic& PD, BugReport *R = PDB.getBugReport(); for (BugReport::visitor_iterator I = R->visitor_begin(), E = R->visitor_end(); I!=E; ++I) { - if (PathDiagnosticPiece *p = (*I)->VisitNode(N, NextNode, PDB, *R)) + if (PathDiagnosticPiece *p = (*I)->VisitNode(N, NextNode, PDB, *R)) { PD.getActivePath().push_front(p); + updateStackPiecesWithMessage(p, CallStack); + } } } } @@ -1019,6 +1047,7 @@ static void GenerateExtensivePathDiagnostic(PathDiagnostic& PD, const ExplodedNode *N) { EdgeBuilder EB(PD, PDB); const SourceManager& SM = PDB.getSourceManager(); + llvm::SmallVector CallStack; const ExplodedNode *NextNode = N->pred_empty() ? NULL : *(N->pred_begin()); while (NextNode) { @@ -1039,6 +1068,7 @@ static void GenerateExtensivePathDiagnostic(PathDiagnostic& PD, PathDiagnosticCallPiece::construct(N, *CE, SM); PD.getActivePath().push_front(C); PD.pushActivePath(&C->path); + CallStack.push_back(C); break; } @@ -1072,6 +1102,11 @@ static void GenerateExtensivePathDiagnostic(PathDiagnostic& PD, } C->setCallee(*CE, SM); EB.addContext(CE->getCallExpr()); + + if (!CallStack.empty()) { + assert(CallStack.back() == C); + CallStack.pop_back(); + } break; } @@ -1147,6 +1182,8 @@ static void GenerateExtensivePathDiagnostic(PathDiagnostic& PD, const PathDiagnosticLocation &Loc = p->getLocation(); EB.addEdge(Loc, true); PD.getActivePath().push_front(p); + updateStackPiecesWithMessage(p, CallStack); + if (const Stmt *S = Loc.asStmt()) EB.addExtendedContext(PDB.getEnclosingStmtLocation(S).asStmt()); } diff --git a/lib/StaticAnalyzer/Core/PathDiagnostic.cpp b/lib/StaticAnalyzer/Core/PathDiagnostic.cpp index ef815be0db..cd08f9ceb7 100644 --- a/lib/StaticAnalyzer/Core/PathDiagnostic.cpp +++ b/lib/StaticAnalyzer/Core/PathDiagnostic.cpp @@ -572,6 +572,8 @@ PathDiagnosticCallPiece::getCallExitEvent() const { Out << "Returning from '" << *ND << "'"; else Out << "Returning to caller"; + if (!CallStackMessage.empty()) + Out << CallStackMessage; return new PathDiagnosticEventPiece(callReturn, Out.str()); } diff --git a/test/Analysis/malloc-plist.c b/test/Analysis/malloc-plist.c index 154d756040..71c071c384 100644 --- a/test/Analysis/malloc-plist.c +++ b/test/Analysis/malloc-plist.c @@ -46,1097 +46,1638 @@ void test_wrapper() { (void) buf; } -// CHECK: -// CHECK: -// CHECK: -// CHECK: files -// CHECK: -// CHECK: -// CHECK: diagnostics -// CHECK: -// CHECK: -// CHECK: path -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges -// CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line10 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line10 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line10 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line10 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges -// CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line10 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line10 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line11 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line11 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges -// CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line11 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line11 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line11 -// CHECK: col18 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line11 -// CHECK: col27 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location +// Test what happens when the same call frees and allocated memory. +void my_free(void *x) { + free(x); +} +void my_malloc_and_free(void **x) { + *x = malloc(100); + if (*x) + my_free(*x); + return; +} +void *test_double_action_call() { + void *buf; + my_malloc_and_free(&buf); + return buf; +} + +// CHECK: diagnostics +// CHECK: +// CHECK: +// CHECK: path +// CHECK: // CHECK: -// CHECK: line11 -// CHECK: col18 -// CHECK: file0 +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line10 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line10 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line10 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line10 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line11 -// CHECK: col18 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line10 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line10 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line11 -// CHECK: col27 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col27 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Memory is allocated -// CHECK: message -// CHECK: Memory is allocated -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line11 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line11 -// CHECK: col18 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line11 -// CHECK: col27 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line14 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line14 -// CHECK: col6 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col27 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Memory is allocated +// CHECK: message +// CHECK: Memory is allocated +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line11 +// CHECK: col27 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line14 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line14 +// CHECK: col6 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: // CHECK: -// CHECK: line14 -// CHECK: col5 -// CHECK: file0 +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line14 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: ranges +// CHECK: +// CHECK: +// CHECK: +// CHECK: line14 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line14 +// CHECK: col6 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Memory is never released; potential memory leak +// CHECK: message +// CHECK: Memory is never released; potential memory leak // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: descriptionMemory is never released; potential memory leak +// CHECK: categoryMemory Error +// CHECK: typeMemory leak +// CHECK: location +// CHECK: +// CHECK: line14 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: path +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line14 -// CHECK: col5 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line18 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line18 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line14 -// CHECK: col6 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col30 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Memory is never released; potential memory leak -// CHECK: message -// CHECK: Memory is never released; potential memory leak -// CHECK: -// CHECK: -// CHECK: descriptionMemory is never released; potential memory leak -// CHECK: categoryMemory Error -// CHECK: typeMemory leak -// CHECK: location -// CHECK: -// CHECK: line14 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: path -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line19 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line18 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line18 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line19 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line19 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col30 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Memory is allocated +// CHECK: message +// CHECK: Memory is allocated +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line19 +// CHECK: col30 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line21 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line21 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line21 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Memory is never released; potential memory leak +// CHECK: message +// CHECK: Memory is never released; potential memory leak +// CHECK: +// CHECK: +// CHECK: descriptionMemory is never released; potential memory leak +// CHECK: categoryMemory Error +// CHECK: typeMemory leak +// CHECK: location +// CHECK: +// CHECK: line21 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: path +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line24 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line24 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line24 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line24 +// CHECK: col28 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line24 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line19 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line19 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line19 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line19 -// CHECK: col30 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line24 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line24 +// CHECK: col28 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line19 -// CHECK: col9 -// CHECK: file0 +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Memory is allocated +// CHECK: message +// CHECK: Memory is allocated // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line19 -// CHECK: col9 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line24 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line24 +// CHECK: col28 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line19 -// CHECK: col30 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col40 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Memory is allocated -// CHECK: message -// CHECK: Memory is allocated -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line26 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line19 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line19 -// CHECK: col30 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line21 -// CHECK: col1 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line21 -// CHECK: col1 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col40 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Attempt to reallocate memory +// CHECK: message +// CHECK: Attempt to reallocate memory +// CHECK: // CHECK: -// CHECK: line21 -// CHECK: col1 -// CHECK: file0 +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col18 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line26 +// CHECK: col40 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col6 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: // CHECK: -// CHECK: extended_message -// CHECK: Memory is never released; potential memory leak -// CHECK: message -// CHECK: Memory is never released; potential memory leak -// CHECK: -// CHECK: -// CHECK: descriptionMemory is never released; potential memory leak -// CHECK: categoryMemory Error -// CHECK: typeMemory leak -// CHECK: location -// CHECK: -// CHECK: line21 -// CHECK: col1 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: path -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line29 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line24 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line24 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line24 -// CHECK: col18 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line24 -// CHECK: col28 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col6 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line24 -// CHECK: col18 -// CHECK: file0 +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Reallocation failed +// CHECK: message +// CHECK: Reallocation failed // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line24 -// CHECK: col18 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col6 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col12 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line24 -// CHECK: col28 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line29 +// CHECK: col12 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line30 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line30 +// CHECK: col14 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Memory is allocated -// CHECK: message -// CHECK: Memory is allocated -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line30 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line24 -// CHECK: col18 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line24 -// CHECK: col28 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line26 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line26 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line30 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line30 +// CHECK: col14 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Memory is never released; potential memory leak +// CHECK: message +// CHECK: Memory is never released; potential memory leak +// CHECK: +// CHECK: +// CHECK: descriptionMemory is never released; potential memory leak +// CHECK: categoryMemory Error +// CHECK: typeMemory leak +// CHECK: location +// CHECK: +// CHECK: line30 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: path +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col15 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col15 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line45 +// CHECK: col15 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line26 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line26 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line26 -// CHECK: col18 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line26 -// CHECK: col40 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col15 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col23 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Calling 'wrapper' +// CHECK: message +// CHECK: Calling 'wrapper' +// CHECK: // CHECK: -// CHECK: line26 -// CHECK: col18 -// CHECK: file0 +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line36 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: depth1 +// CHECK: extended_message +// CHECK: Entered call from 'test_wrapper' +// CHECK: message +// CHECK: Entered call from 'test_wrapper' // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line26 -// CHECK: col18 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line36 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line36 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line26 -// CHECK: col40 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col13 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col23 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Attempt to reallocate memory -// CHECK: message -// CHECK: Attempt to reallocate memory -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line37 +// CHECK: col13 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line26 -// CHECK: col18 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line26 -// CHECK: col40 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line29 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line29 -// CHECK: col6 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col13 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col23 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line29 -// CHECK: col5 -// CHECK: file0 +// CHECK: depth1 +// CHECK: extended_message +// CHECK: Memory is allocated +// CHECK: message +// CHECK: Memory is allocated // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line29 -// CHECK: col5 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col13 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line37 +// CHECK: col23 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line29 -// CHECK: col6 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Reallocation failed -// CHECK: message -// CHECK: Reallocation failed -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line39 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line29 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line29 -// CHECK: col6 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line29 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line29 -// CHECK: col12 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: depth1 +// CHECK: extended_message +// CHECK: Assuming 'x' is non-null +// CHECK: message +// CHECK: Assuming 'x' is non-null +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line39 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line40 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line40 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line45 +// CHECK: col15 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line29 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line29 -// CHECK: col12 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line30 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line30 -// CHECK: col14 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col15 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col23 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line30 -// CHECK: col9 -// CHECK: file0 +// CHECK: depth1 +// CHECK: extended_message +// CHECK: Returning from 'wrapper', which allocated memory +// CHECK: message +// CHECK: Returning from 'wrapper', which allocated memory // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line30 -// CHECK: col9 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col15 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line45 +// CHECK: col23 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line47 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line47 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line47 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Memory is never released; potential memory leak +// CHECK: message +// CHECK: Memory is never released; potential memory leak +// CHECK: +// CHECK: +// CHECK: descriptionMemory is never released; potential memory leak +// CHECK: categoryMemory Error +// CHECK: typeMemory leak +// CHECK: location +// CHECK: +// CHECK: line47 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: path +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line30 -// CHECK: col14 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line60 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line60 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line61 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line61 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Memory is never released; potential memory leak -// CHECK: message -// CHECK: Memory is never released; potential memory leak -// CHECK: -// CHECK: -// CHECK: descriptionMemory is never released; potential memory leak -// CHECK: categoryMemory Error -// CHECK: typeMemory leak -// CHECK: location -// CHECK: -// CHECK: line30 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: path -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line61 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line45 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line45 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line45 -// CHECK: col15 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line45 -// CHECK: col15 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line61 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line61 +// CHECK: col28 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Calling 'my_malloc_and_free' +// CHECK: message +// CHECK: Calling 'my_malloc_and_free' +// CHECK: // CHECK: -// CHECK: line45 -// CHECK: col15 -// CHECK: file0 +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line53 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: depth1 +// CHECK: extended_message +// CHECK: Entered call from 'test_double_action_call' +// CHECK: message +// CHECK: Entered call from 'test_double_action_call' // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line45 -// CHECK: col15 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line53 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line53 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line45 -// CHECK: col23 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col10 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col20 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Calling 'wrapper' -// CHECK: message -// CHECK: Calling 'wrapper' -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line36 -// CHECK: col1 -// CHECK: file0 // CHECK: -// CHECK: extended_message -// CHECK: Entered call from 'test_wrapper' -// CHECK: message -// CHECK: Entered call from 'test_wrapper' -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges -// CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line36 -// CHECK: col1 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line36 -// CHECK: col1 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line37 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line37 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line54 +// CHECK: col10 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line37 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line37 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line37 -// CHECK: col13 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line37 -// CHECK: col23 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col10 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col20 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line37 -// CHECK: col13 -// CHECK: file0 +// CHECK: depth1 +// CHECK: extended_message +// CHECK: Memory is allocated +// CHECK: message +// CHECK: Memory is allocated // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line37 -// CHECK: col13 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col10 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line54 +// CHECK: col20 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line55 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line55 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line37 -// CHECK: col23 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line55 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line55 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line56 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line56 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Memory is allocated -// CHECK: message -// CHECK: Memory is allocated -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges -// CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line37 -// CHECK: col13 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line37 -// CHECK: col23 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line39 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line39 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line56 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line39 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line39 -// CHECK: col3 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line39 -// CHECK: col7 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line39 -// CHECK: col7 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line56 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line56 +// CHECK: col17 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location +// CHECK: depth1 +// CHECK: extended_message +// CHECK: Calling 'my_free' +// CHECK: message +// CHECK: Calling 'my_free' +// CHECK: // CHECK: -// CHECK: line39 -// CHECK: col7 -// CHECK: file0 +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line50 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: depth2 +// CHECK: extended_message +// CHECK: Entered call from 'my_malloc_and_free' +// CHECK: message +// CHECK: Entered call from 'my_malloc_and_free' // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line39 -// CHECK: col7 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line39 -// CHECK: col7 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line50 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line50 +// CHECK: col1 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line51 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line51 +// CHECK: col11 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Assuming 'x' is non-null -// CHECK: message -// CHECK: Assuming 'x' is non-null -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line51 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line39 -// CHECK: col7 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line39 -// CHECK: col7 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line40 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line40 -// CHECK: col5 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line51 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line51 +// CHECK: col11 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location +// CHECK: depth2 +// CHECK: extended_message +// CHECK: Memory is released +// CHECK: message +// CHECK: Memory is released +// CHECK: // CHECK: -// CHECK: line45 -// CHECK: col15 -// CHECK: file0 +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line56 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: ranges +// CHECK: +// CHECK: +// CHECK: +// CHECK: line56 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line56 +// CHECK: col17 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: depth2 +// CHECK: extended_message +// CHECK: Returning from 'my_free', which released memory +// CHECK: message +// CHECK: Returning from 'my_free', which released memory // CHECK: -// CHECK: ranges -// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges // CHECK: // CHECK: -// CHECK: line45 -// CHECK: col15 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line56 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line56 +// CHECK: col17 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line57 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line57 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line61 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: ranges +// CHECK: +// CHECK: +// CHECK: +// CHECK: line61 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line61 +// CHECK: col28 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: depth1 +// CHECK: extended_message +// CHECK: Returning from 'my_malloc_and_free', which released memory +// CHECK: message +// CHECK: Returning from 'my_malloc_and_free', which released memory +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: // CHECK: -// CHECK: line45 -// CHECK: col23 -// CHECK: file0 +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line61 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line61 +// CHECK: col28 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line62 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line62 +// CHECK: col14 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: // CHECK: -// CHECK: -// CHECK: extended_message -// CHECK: Returning from 'wrapper' -// CHECK: message -// CHECK: Returning from 'wrapper' -// CHECK: -// CHECK: -// CHECK: kindcontrol -// CHECK: edges +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line62 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: ranges // CHECK: -// CHECK: -// CHECK: start -// CHECK: -// CHECK: -// CHECK: line45 -// CHECK: col15 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line45 -// CHECK: col23 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: end -// CHECK: -// CHECK: -// CHECK: line47 -// CHECK: col1 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line47 -// CHECK: col1 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: +// CHECK: line62 +// CHECK: col12 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line62 +// CHECK: col14 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -// CHECK: -// CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line47 -// CHECK: col1 -// CHECK: file0 +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Use of memory after it is freed +// CHECK: message +// CHECK: Use of memory after it is freed // CHECK: -// CHECK: extended_message -// CHECK: Memory is never released; potential memory leak -// CHECK: message -// CHECK: Memory is never released; potential memory leak -// CHECK: -// CHECK: -// CHECK: descriptionMemory is never released; potential memory leak -// CHECK: categoryMemory Error -// CHECK: typeMemory leak -// CHECK: location -// CHECK: -// CHECK: line47 -// CHECK: col1 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: -// CHECK: +// CHECK: +// CHECK: descriptionUse of memory after it is freed +// CHECK: categoryMemory Error +// CHECK: typeUse-after-free +// CHECK: location +// CHECK: +// CHECK: line62 +// CHECK: col5 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: