[cfe-commits] r152962 - in /cfe/trunk: include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h lib/StaticAnalyzer/Checkers/MallocChecker.cpp lib/StaticAnalyzer/Core/BugReporter.cpp lib/StaticAnalyzer/Core/PathDiagnostic.cpp test/Analysis/m
Anna Zaks
ganna at apple.com
Sat Mar 17 09:19:28 PDT 2012
Thanks Takumi,
Do you know if this fixes the msvc failure?
Anna.
On Mar 17, 2012, at 6:17 AM, NAKAMURA Takumi wrote:
> Anna, StringRef should not be used on local std::string. See r152982.
>
> ...Takumi
>
> 2012/3/17 Anna Zaks <ganna at apple.com>:
>> Author: zaks
>> Date: Fri Mar 16 18:24:20 2012
>> New Revision: 152962
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=152962&view=rev
>> Log:
>> [analyzer] Create symbol-aware stack hints (building upon r152837).
>>
>> The symbol-aware stack hint combines the checker-provided message
>> with the information about how the symbol was passed to the callee: as
>> a parameter or a return value.
>>
>> For malloc, the generated messages look like this :
>> "Returning from 'foo'; released memory via 1st parameter"
>> "Returning from 'foo'; allocated memory via 1st parameter"
>> "Returning from 'foo'; allocated memory returned"
>> "Returning from 'foo'; reallocation of 1st parameter failed"
>>
>>
>> (We are yet to handle cases when the symbol is a field in a struct or
>> an array element.)
>>
>> Modified:
>> cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
>> cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
>> cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp
>> cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
>> cfe/trunk/test/Analysis/malloc-plist.c
>>
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h?rev=152962&r1=152961&r2=152962&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h Fri Mar 16 18:24:20 2012
>> @@ -41,6 +41,8 @@
>> namespace ento {
>>
>> class ExplodedNode;
>> +class SymExpr;
>> +typedef const SymExpr* SymbolRef;
>>
>> //===----------------------------------------------------------------------===//
>> // High-level interface for handlers of path-sensitive diagnostics.
>> @@ -357,6 +359,52 @@
>> virtual void Profile(llvm::FoldingSetNodeID &ID) const;
>> };
>>
>> +/// \brief Interface for classes constructing Stack hints.
>> +///
>> +/// If a PathDiagnosticEvent occurs in a different frame than the final
>> +/// diagnostic the hints can be used to summarise the effect of the call.
>> +class StackHintGenerator {
>> +public:
>> + virtual ~StackHintGenerator() = 0;
>> +
>> + /// \brief Construct the Diagnostic message for the given ExplodedNode.
>> + virtual std::string getMessage(const ExplodedNode *N) = 0;
>> +};
>> +
>> +/// \brief Constructs a Stack hint for the given symbol.
>> +///
>> +/// The class knows how to construct the stack hint message based on
>> +/// traversing the CallExpr associated with the call and checking if the given
>> +/// symbol is returned or is one of the arguments.
>> +/// The hint can be customized by redefining 'getMessageForX()' methods.
>> +class StackHintGeneratorForSymbol : public StackHintGenerator {
>> +private:
>> + SymbolRef Sym;
>> + std::string Msg;
>> +
>> +public:
>> + StackHintGeneratorForSymbol(SymbolRef S, StringRef M) : Sym(S), Msg(M) {}
>> + virtual ~StackHintGeneratorForSymbol() {}
>> +
>> + /// \brief Search the call expression for the symbol Sym and dispatch the
>> + /// 'getMessageForX()' methods to construct a specific message.
>> + virtual std::string getMessage(const ExplodedNode *N);
>> +
>> + /// Prints the ordinal form of the given integer,
>> + /// only valid for ValNo : ValNo > 0.
>> + void printOrdinal(unsigned ValNo, llvm::raw_svector_ostream &Out);
>> +
>> + /// Produces the message of the following form:
>> + /// 'Msg via Nth parameter'
>> + virtual std::string getMessageForArg(const Expr *ArgE, unsigned ArgIndex);
>> + virtual std::string getMessageForReturn(const CallExpr *CallExpr) {
>> + return Msg + " returned";
>> + }
>> + virtual std::string getMessageForSymbolNotFound() {
>> + return Msg;
>> + }
>> +};
>> +
>> class PathDiagnosticEventPiece : public PathDiagnosticSpotPiece {
>> llvm::Optional<bool> IsPrunable;
>>
>> @@ -364,16 +412,14 @@
>> /// 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;
>> + llvm::OwningPtr<StackHintGenerator> CallStackHint;
>>
>> public:
>> PathDiagnosticEventPiece(const PathDiagnosticLocation &pos,
>> StringRef s, bool addPosRange = true,
>> - StringRef callStackMsg = "")
>> + StackHintGenerator *stackHint = 0)
>> : PathDiagnosticSpotPiece(pos, s, Event, addPosRange),
>> - CallStackMessage(callStackMsg) {}
>> + CallStackHint(stackHint) {}
>>
>> ~PathDiagnosticEventPiece();
>>
>> @@ -391,11 +437,16 @@
>> return IsPrunable.hasValue() ? IsPrunable.getValue() : false;
>> }
>>
>> - StringRef getCallStackMessage() {
>> - if (!CallStackMessage.empty())
>> - return CallStackMessage;
>> - else
>> - return StringRef();
>> + bool hasCallStackHint() {
>> + return (CallStackHint != 0);
>> + }
>> +
>> + /// Produce the hint for the given node. The node contains
>> + /// information about the call for which the diagnostic can be generated.
>> + StringRef getCallStackMessage(const ExplodedNode *N) {
>> + if (CallStackHint)
>> + return CallStackHint->getMessage(N);
>> + return "";
>> }
>>
>> static inline bool classof(const PathDiagnosticPiece *P) {
>>
>> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp?rev=152962&r1=152961&r2=152962&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp Fri Mar 16 18:24:20 2012
>> @@ -243,6 +243,29 @@
>> const ExplodedNode *PrevN,
>> BugReporterContext &BRC,
>> BugReport &BR);
>> + private:
>> + class StackHintGeneratorForReallocationFailed
>> + : public StackHintGeneratorForSymbol {
>> + public:
>> + StackHintGeneratorForReallocationFailed(SymbolRef S, StringRef M)
>> + : StackHintGeneratorForSymbol(S, M) {}
>> +
>> + virtual std::string getMessageForArg(const Expr *ArgE, unsigned ArgIndex) {
>> + SmallString<200> buf;
>> + llvm::raw_svector_ostream os(buf);
>> +
>> + os << "; reallocation of ";
>> + // Printed parameters start at 1, not 0.
>> + printOrdinal(++ArgIndex, os);
>> + os << " parameter failed";
>> +
>> + return os.str();
>> + }
>> +
>> + virtual std::string getMessageForReturn(const CallExpr *CallExpr) {
>> + return "; reallocation of returned value failed";
>> + }
>> + };
>> };
>> };
>> } // end anonymous namespace
>> @@ -1249,7 +1272,7 @@
>>
>> const Stmt *S = 0;
>> const char *Msg = 0;
>> - const char *StackMsg = 0;
>> + StackHintGeneratorForSymbol *StackHint = 0;
>>
>> // Retrieve the associated statement.
>> ProgramPoint ProgLoc = N->getLocation();
>> @@ -1269,14 +1292,15 @@
>> if (Mode == Normal) {
>> if (isAllocated(RS, RSPrev, S)) {
>> Msg = "Memory is allocated";
>> - StackMsg = ", which allocated memory";
>> + StackHint = new StackHintGeneratorForSymbol(Sym, "; allocated memory");
>> } else if (isReleased(RS, RSPrev, S)) {
>> Msg = "Memory is released";
>> - StackMsg = ", which released memory";
>> + StackHint = new StackHintGeneratorForSymbol(Sym, "; released memory");
>> } else if (isReallocFailedCheck(RS, RSPrev, S)) {
>> Mode = ReallocationFailed;
>> Msg = "Reallocation failed";
>> - StackMsg = ", where reallocation failed";
>> + StackHint = new StackHintGeneratorForReallocationFailed(Sym,
>> + "; reallocation failed");
>> }
>>
>> // We are in a special mode if a reallocation failed later in the path.
>> @@ -1296,18 +1320,18 @@
>> if (!(FunName.equals("realloc") || FunName.equals("reallocf")))
>> return 0;
>> Msg = "Attempt to reallocate memory";
>> - StackMsg = ", which attempted to reallocate memory";
>> + StackHint = new StackHintGeneratorForSymbol(Sym, "; reallocated memory");
>> Mode = Normal;
>> }
>>
>> if (!Msg)
>> return 0;
>> - assert(StackMsg);
>> + assert(StackHint);
>>
>> // Generate the extra diagnostic.
>> PathDiagnosticLocation Pos(S, BRC.getSourceManager(),
>> N->getLocationContext());
>> - return new PathDiagnosticEventPiece(Pos, Msg, true, StackMsg);
>> + return new PathDiagnosticEventPiece(Pos, Msg, true, StackHint);
>> }
>>
>>
>>
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp?rev=152962&r1=152961&r2=152962&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp Fri Mar 16 18:24:20 2012
>> @@ -380,22 +380,29 @@
>> //===----------------------------------------------------------------------===//
>> // "Minimal" path diagnostic generation algorithm.
>> //===----------------------------------------------------------------------===//
>> +typedef std::pair<PathDiagnosticCallPiece*, const ExplodedNode*> StackDiagPair;
>> +typedef SmallVector<StackDiagPair, 6> StackDiagVector;
>> +
>> static void updateStackPiecesWithMessage(PathDiagnosticPiece *P,
>> - llvm::SmallVector<PathDiagnosticCallPiece*, 6> &CallStack) {
>> + StackDiagVector &CallStack) {
>> // If the piece contains a special message, add it to all the call
>> // pieces on the active stack.
>> if (PathDiagnosticEventPiece *ep =
>> dyn_cast<PathDiagnosticEventPiece>(P)) {
>> - StringRef stackMsg = ep->getCallStackMessage();
>>
>> - if (!stackMsg.empty())
>> - for (llvm::SmallVector<PathDiagnosticCallPiece*, 6>::iterator
>> - I = CallStack.begin(), E = CallStack.end(); I != E; ++I)
>> + if (ep->hasCallStackHint())
>> + for (StackDiagVector::iterator I = CallStack.begin(),
>> + E = CallStack.end(); I != E; ++I) {
>> + PathDiagnosticCallPiece *CP = I->first;
>> + const ExplodedNode *N = I->second;
>> + StringRef stackMsg = ep->getCallStackMessage(N);
>> +
>> // 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);
>> + if (!CP->hasCallStackMessage())
>> + CP->setCallStackMessage(stackMsg);
>> + }
>> }
>> }
>>
>> @@ -410,7 +417,7 @@
>> const ExplodedNode *NextNode = N->pred_empty()
>> ? NULL : *(N->pred_begin());
>>
>> - llvm::SmallVector<PathDiagnosticCallPiece*, 6> CallStack;
>> + StackDiagVector CallStack;
>>
>> while (NextNode) {
>> N = NextNode;
>> @@ -424,7 +431,7 @@
>> PathDiagnosticCallPiece::construct(N, *CE, SMgr);
>> PD.getActivePath().push_front(C);
>> PD.pushActivePath(&C->path);
>> - CallStack.push_back(C);
>> + CallStack.push_back(StackDiagPair(C, N));
>> continue;
>> }
>>
>> @@ -446,7 +453,7 @@
>> }
>> C->setCallee(*CE, SMgr);
>> if (!CallStack.empty()) {
>> - assert(CallStack.back() == C);
>> + assert(CallStack.back().first == C);
>> CallStack.pop_back();
>> }
>> continue;
>> @@ -1047,7 +1054,7 @@
>> const ExplodedNode *N) {
>> EdgeBuilder EB(PD, PDB);
>> const SourceManager& SM = PDB.getSourceManager();
>> - llvm::SmallVector<PathDiagnosticCallPiece*, 6> CallStack;
>> + StackDiagVector CallStack;
>>
>> const ExplodedNode *NextNode = N->pred_empty() ? NULL : *(N->pred_begin());
>> while (NextNode) {
>> @@ -1068,7 +1075,7 @@
>> PathDiagnosticCallPiece::construct(N, *CE, SM);
>> PD.getActivePath().push_front(C);
>> PD.pushActivePath(&C->path);
>> - CallStack.push_back(C);
>> + CallStack.push_back(StackDiagPair(C, N));
>> break;
>> }
>>
>> @@ -1104,7 +1111,7 @@
>> EB.addContext(CE->getCallExpr());
>>
>> if (!CallStack.empty()) {
>> - assert(CallStack.back() == C);
>> + assert(CallStack.back().first == C);
>> CallStack.pop_back();
>> }
>> break;
>>
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp?rev=152962&r1=152961&r2=152962&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp Fri Mar 16 18:24:20 2012
>> @@ -659,3 +659,94 @@
>> for (meta_iterator I = meta_begin(), E = meta_end(); I != E; ++I)
>> ID.AddString(*I);
>> }
>> +
>> +StackHintGenerator::~StackHintGenerator() {}
>> +
>> +std::string StackHintGeneratorForSymbol::getMessage(const ExplodedNode *N){
>> + ProgramPoint P = N->getLocation();
>> + const CallExit *CExit = dyn_cast<CallExit>(&P);
>> + assert(CExit && "Stack Hints should be constructed at CallExit points.");
>> +
>> + const CallExpr *CE = dyn_cast_or_null<CallExpr>(CExit->getStmt());
>> + if (!CE)
>> + return "";
>> +
>> + // Get the successor node to make sure the return statement is evaluated and
>> + // CE is set to the result value.
>> + N = *N->succ_begin();
>> + if (!N)
>> + return getMessageForSymbolNotFound();
>> +
>> + // Check if one of the parameters are set to the interesting symbol.
>> + ProgramStateRef State = N->getState();
>> + const LocationContext *LCtx = N->getLocationContext();
>> + unsigned ArgIndex = 0;
>> + for (CallExpr::const_arg_iterator I = CE->arg_begin(),
>> + E = CE->arg_end(); I != E; ++I, ++ArgIndex){
>> + SVal SV = State->getSVal(*I, LCtx);
>> +
>> + // Check if the variable corresponding to the symbol is passed by value.
>> + SymbolRef AS = SV.getAsLocSymbol();
>> + if (AS == Sym) {
>> + return getMessageForArg(*I, ArgIndex);
>> + }
>> +
>> + // Check if the parameter is a pointer to the symbol.
>> + if (const loc::MemRegionVal *Reg = dyn_cast<loc::MemRegionVal>(&SV)) {
>> + SVal PSV = State->getSVal(Reg->getRegion());
>> + SymbolRef AS = PSV.getAsLocSymbol();
>> + if (AS == Sym) {
>> + return getMessageForArg(*I, ArgIndex);
>> + }
>> + }
>> + }
>> +
>> + // Check if we are returning the interesting symbol.
>> + SVal SV = State->getSVal(CE, LCtx);
>> + SymbolRef RetSym = SV.getAsLocSymbol();
>> + if (RetSym == Sym) {
>> + return getMessageForReturn(CE);
>> + }
>> +
>> + return getMessageForSymbolNotFound();
>> +}
>> +
>> +/// TODO: This is copied from clang diagnostics. Maybe we could just move it to
>> +/// some common place. (Same as HandleOrdinalModifier.)
>> +void StackHintGeneratorForSymbol::printOrdinal(unsigned ValNo,
>> + llvm::raw_svector_ostream &Out) {
>> + assert(ValNo != 0 && "ValNo must be strictly positive!");
>> +
>> + // We could use text forms for the first N ordinals, but the numeric
>> + // forms are actually nicer in diagnostics because they stand out.
>> + Out << ValNo;
>> +
>> + // It is critically important that we do this perfectly for
>> + // user-written sequences with over 100 elements.
>> + switch (ValNo % 100) {
>> + case 11:
>> + case 12:
>> + case 13:
>> + Out << "th"; return;
>> + default:
>> + switch (ValNo % 10) {
>> + case 1: Out << "st"; return;
>> + case 2: Out << "nd"; return;
>> + case 3: Out << "rd"; return;
>> + default: Out << "th"; return;
>> + }
>> + }
>> +}
>> +
>> +std::string StackHintGeneratorForSymbol::getMessageForArg(const Expr *ArgE,
>> + unsigned ArgIndex) {
>> + SmallString<200> buf;
>> + llvm::raw_svector_ostream os(buf);
>> +
>> + os << Msg << " via ";
>> + // Printed parameters start at 1, not 0.
>> + printOrdinal(++ArgIndex, os);
>> + os << " parameter";
>> +
>> + return os.str();
>> +}
>>
>> Modified: cfe/trunk/test/Analysis/malloc-plist.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/malloc-plist.c?rev=152962&r1=152961&r2=152962&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/Analysis/malloc-plist.c (original)
>> +++ cfe/trunk/test/Analysis/malloc-plist.c Fri Mar 16 18:24:20 2012
>> @@ -47,6 +47,7 @@
>> }
>>
>> // Test what happens when the same call frees and allocated memory.
>> +// Also tests the stack hint for parameters, when they are passed directly or via pointer.
>> void my_free(void *x) {
>> free(x);
>> }
>> @@ -62,6 +63,30 @@
>> return buf;
>> }
>>
>> +// Test stack hint for 'reallocation failed'.
>> +char *my_realloc(char *buf) {
>> + char *tmp;
>> + tmp = (char*)realloc(buf, 0x1000000);
>> + if (!tmp) {
>> + return tmp;
>> + }
>> + return tmp;
>> +}
>> +void reallocIntra() {
>> + char *buf = (char *)malloc(100);
>> + buf = my_realloc(buf);
>> + free(buf);
>> +}
>> +
>> +// Test stack hint when returning a result.
>> +static char *malloc_wrapper_ret() {
>> + return (char*)malloc(12);
>> +}
>> +void use_ret() {
>> + char *v;
>> + v = malloc_wrapper_ret();
>> +}
>> +
>> // CHECK: <?xml version="1.0" encoding="UTF-8"?>
>> // CHECK: <plist version="1.0">
>> // CHECK: <dict>
>> @@ -1104,9 +1129,9 @@
>> // CHECK: </array>
>> // CHECK: <key>depth</key><integer>1</integer>
>> // CHECK: <key>extended_message</key>
>> -// CHECK: <string>Returning from 'wrapper', which allocated memory</string>
>> +// CHECK: <string>Returning from 'wrapper'; allocated memory returned</string>
>> // CHECK: <key>message</key>
>> -// CHECK: <string>Returning from 'wrapper', which allocated memory</string>
>> +// CHECK: <string>Returning from 'wrapper'; allocated memory returned</string>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> // CHECK: <key>kind</key><string>control</string>
>> @@ -1178,12 +1203,12 @@
>> // CHECK: <key>start</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>60</integer>
>> +// CHECK: <key>line</key><integer>61</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>60</integer>
>> +// CHECK: <key>line</key><integer>61</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1191,12 +1216,12 @@
>> // CHECK: <key>end</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1208,7 +1233,7 @@
>> // CHECK: <key>kind</key><string>event</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1216,12 +1241,12 @@
>> // CHECK: <array>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>28</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1237,7 +1262,7 @@
>> // CHECK: <key>kind</key><string>event</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>53</integer>
>> +// CHECK: <key>line</key><integer>54</integer>
>> // CHECK: <key>col</key><integer>1</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1255,12 +1280,12 @@
>> // CHECK: <key>start</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>53</integer>
>> +// CHECK: <key>line</key><integer>54</integer>
>> // CHECK: <key>col</key><integer>1</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>53</integer>
>> +// CHECK: <key>line</key><integer>54</integer>
>> // CHECK: <key>col</key><integer>1</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1268,12 +1293,12 @@
>> // CHECK: <key>end</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1289,12 +1314,12 @@
>> // CHECK: <key>start</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1302,12 +1327,12 @@
>> // CHECK: <key>end</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>10</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>20</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1319,7 +1344,7 @@
>> // CHECK: <key>kind</key><string>event</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>10</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1327,12 +1352,12 @@
>> // CHECK: <array>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>10</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>20</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1352,12 +1377,12 @@
>> // CHECK: <key>start</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>10</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>54</integer>
>> +// CHECK: <key>line</key><integer>55</integer>
>> // CHECK: <key>col</key><integer>20</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1365,12 +1390,12 @@
>> // CHECK: <key>end</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>55</integer>
>> +// CHECK: <key>line</key><integer>56</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>55</integer>
>> +// CHECK: <key>line</key><integer>56</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1386,12 +1411,12 @@
>> // CHECK: <key>start</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>55</integer>
>> +// CHECK: <key>line</key><integer>56</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>55</integer>
>> +// CHECK: <key>line</key><integer>56</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1399,12 +1424,12 @@
>> // CHECK: <key>end</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>7</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>7</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1416,7 +1441,7 @@
>> // CHECK: <key>kind</key><string>event</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>7</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1424,12 +1449,12 @@
>> // CHECK: <array>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>7</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>17</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1445,7 +1470,7 @@
>> // CHECK: <key>kind</key><string>event</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>50</integer>
>> +// CHECK: <key>line</key><integer>51</integer>
>> // CHECK: <key>col</key><integer>1</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1463,12 +1488,12 @@
>> // CHECK: <key>start</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>50</integer>
>> +// CHECK: <key>line</key><integer>51</integer>
>> // CHECK: <key>col</key><integer>1</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>50</integer>
>> +// CHECK: <key>line</key><integer>51</integer>
>> // CHECK: <key>col</key><integer>1</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1476,12 +1501,12 @@
>> // CHECK: <key>end</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>51</integer>
>> +// CHECK: <key>line</key><integer>52</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>51</integer>
>> +// CHECK: <key>line</key><integer>52</integer>
>> // CHECK: <key>col</key><integer>11</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1493,7 +1518,7 @@
>> // CHECK: <key>kind</key><string>event</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>51</integer>
>> +// CHECK: <key>line</key><integer>52</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1501,12 +1526,12 @@
>> // CHECK: <array>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>51</integer>
>> +// CHECK: <key>line</key><integer>52</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>51</integer>
>> +// CHECK: <key>line</key><integer>52</integer>
>> // CHECK: <key>col</key><integer>11</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1522,7 +1547,7 @@
>> // CHECK: <key>kind</key><string>event</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>7</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1530,12 +1555,12 @@
>> // CHECK: <array>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>7</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>17</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1543,9 +1568,9 @@
>> // CHECK: </array>
>> // CHECK: <key>depth</key><integer>2</integer>
>> // CHECK: <key>extended_message</key>
>> -// CHECK: <string>Returning from 'my_free', which released memory</string>
>> +// CHECK: <string>Returning from 'my_free'; released memory via 1st parameter</string>
>> // CHECK: <key>message</key>
>> -// CHECK: <string>Returning from 'my_free', which released memory</string>
>> +// CHECK: <string>Returning from 'my_free'; released memory via 1st parameter</string>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> // CHECK: <key>kind</key><string>control</string>
>> @@ -1555,12 +1580,12 @@
>> // CHECK: <key>start</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>7</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>56</integer>
>> +// CHECK: <key>line</key><integer>57</integer>
>> // CHECK: <key>col</key><integer>17</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1568,12 +1593,12 @@
>> // CHECK: <key>end</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>57</integer>
>> +// CHECK: <key>line</key><integer>58</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>57</integer>
>> +// CHECK: <key>line</key><integer>58</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1585,7 +1610,7 @@
>> // CHECK: <key>kind</key><string>event</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1593,12 +1618,12 @@
>> // CHECK: <array>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>28</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1606,9 +1631,9 @@
>> // CHECK: </array>
>> // CHECK: <key>depth</key><integer>1</integer>
>> // CHECK: <key>extended_message</key>
>> -// CHECK: <string>Returning from 'my_malloc_and_free', which released memory</string>
>> +// CHECK: <string>Returning from 'my_malloc_and_free'; released memory via 1st parameter</string>
>> // CHECK: <key>message</key>
>> -// CHECK: <string>Returning from 'my_malloc_and_free', which released memory</string>
>> +// CHECK: <string>Returning from 'my_malloc_and_free'; released memory via 1st parameter</string>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> // CHECK: <key>kind</key><string>control</string>
>> @@ -1618,12 +1643,12 @@
>> // CHECK: <key>start</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>61</integer>
>> +// CHECK: <key>line</key><integer>62</integer>
>> // CHECK: <key>col</key><integer>28</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1631,12 +1656,12 @@
>> // CHECK: <key>end</key>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>62</integer>
>> +// CHECK: <key>line</key><integer>63</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>62</integer>
>> +// CHECK: <key>line</key><integer>63</integer>
>> // CHECK: <key>col</key><integer>14</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1648,7 +1673,7 @@
>> // CHECK: <key>kind</key><string>event</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>62</integer>
>> +// CHECK: <key>line</key><integer>63</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1656,12 +1681,12 @@
>> // CHECK: <array>
>> // CHECK: <array>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>62</integer>
>> +// CHECK: <key>line</key><integer>63</integer>
>> // CHECK: <key>col</key><integer>12</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>62</integer>
>> +// CHECK: <key>line</key><integer>63</integer>
>> // CHECK: <key>col</key><integer>14</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> @@ -1679,11 +1704,784 @@
>> // CHECK: <key>type</key><string>Use-after-free</string>
>> // CHECK: <key>location</key>
>> // CHECK: <dict>
>> -// CHECK: <key>line</key><integer>62</integer>
>> +// CHECK: <key>line</key><integer>63</integer>
>> // CHECK: <key>col</key><integer>5</integer>
>> // CHECK: <key>file</key><integer>0</integer>
>> // CHECK: </dict>
>> // CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>path</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>76</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>76</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>76</integer>
>> +// CHECK: <key>col</key><integer>25</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>76</integer>
>> +// CHECK: <key>col</key><integer>35</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>76</integer>
>> +// CHECK: <key>col</key><integer>25</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>ranges</key>
>> +// CHECK: <array>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>76</integer>
>> +// CHECK: <key>col</key><integer>25</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>76</integer>
>> +// CHECK: <key>col</key><integer>35</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </array>
>> +// CHECK: <key>depth</key><integer>0</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Memory is allocated</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Memory is allocated</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>76</integer>
>> +// CHECK: <key>col</key><integer>25</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>76</integer>
>> +// CHECK: <key>col</key><integer>35</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>11</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>11</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>11</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>ranges</key>
>> +// CHECK: <array>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>11</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>25</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </array>
>> +// CHECK: <key>depth</key><integer>0</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Calling 'my_realloc'</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Calling 'my_realloc'</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>67</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>depth</key><integer>1</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Entered call from 'reallocIntra'</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Entered call from 'reallocIntra'</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>67</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>67</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>68</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>68</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>68</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>68</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>18</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>40</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>18</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>ranges</key>
>> +// CHECK: <array>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>18</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>40</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </array>
>> +// CHECK: <key>depth</key><integer>1</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Attempt to reallocate memory</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Attempt to reallocate memory</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>18</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>69</integer>
>> +// CHECK: <key>col</key><integer>40</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>6</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>ranges</key>
>> +// CHECK: <array>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>6</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </array>
>> +// CHECK: <key>depth</key><integer>1</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Reallocation failed</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Reallocation failed</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>6</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>12</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>70</integer>
>> +// CHECK: <key>col</key><integer>12</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>71</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>71</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>11</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>ranges</key>
>> +// CHECK: <array>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>11</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>25</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </array>
>> +// CHECK: <key>depth</key><integer>1</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Returning from 'my_realloc'; reallocation of 1st parameter failed</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Returning from 'my_realloc'; reallocation of 1st parameter failed</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>11</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>77</integer>
>> +// CHECK: <key>col</key><integer>25</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>78</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>78</integer>
>> +// CHECK: <key>col</key><integer>13</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>78</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>ranges</key>
>> +// CHECK: <array>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>78</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>78</integer>
>> +// CHECK: <key>col</key><integer>13</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </array>
>> +// CHECK: <key>depth</key><integer>0</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Memory is never released; potential memory leak</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Memory is never released; potential memory leak</string>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>description</key><string>Memory is never released; potential memory leak</string>
>> +// CHECK: <key>category</key><string>Memory Error</string>
>> +// CHECK: <key>type</key><string>Memory leak</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>78</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>path</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>86</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>86</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>ranges</key>
>> +// CHECK: <array>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>28</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </array>
>> +// CHECK: <key>depth</key><integer>0</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Calling 'malloc_wrapper_ret'</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Calling 'malloc_wrapper_ret'</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>82</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>depth</key><integer>1</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Entered call from 'use_ret'</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Entered call from 'use_ret'</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>82</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>82</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>83</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>83</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>83</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>83</integer>
>> +// CHECK: <key>col</key><integer>5</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>83</integer>
>> +// CHECK: <key>col</key><integer>19</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>83</integer>
>> +// CHECK: <key>col</key><integer>28</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>83</integer>
>> +// CHECK: <key>col</key><integer>19</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>ranges</key>
>> +// CHECK: <array>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>83</integer>
>> +// CHECK: <key>col</key><integer>19</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>83</integer>
>> +// CHECK: <key>col</key><integer>28</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </array>
>> +// CHECK: <key>depth</key><integer>1</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Memory is allocated</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Memory is allocated</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>ranges</key>
>> +// CHECK: <array>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>28</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </array>
>> +// CHECK: <key>depth</key><integer>1</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Returning from 'malloc_wrapper_ret'; allocated memory returned</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Returning from 'malloc_wrapper_ret'; allocated memory returned</string>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>control</string>
>> +// CHECK: <key>edges</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>start</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>9</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>87</integer>
>> +// CHECK: <key>col</key><integer>28</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>end</key>
>> +// CHECK: <array>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>88</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>88</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: </dict>
>> +// CHECK: <dict>
>> +// CHECK: <key>kind</key><string>event</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>88</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: <key>depth</key><integer>0</integer>
>> +// CHECK: <key>extended_message</key>
>> +// CHECK: <string>Memory is never released; potential memory leak</string>
>> +// CHECK: <key>message</key>
>> +// CHECK: <string>Memory is never released; potential memory leak</string>
>> +// CHECK: </dict>
>> +// CHECK: </array>
>> +// CHECK: <key>description</key><string>Memory is never released; potential memory leak</string>
>> +// CHECK: <key>category</key><string>Memory Error</string>
>> +// CHECK: <key>type</key><string>Memory leak</string>
>> +// CHECK: <key>location</key>
>> +// CHECK: <dict>
>> +// CHECK: <key>line</key><integer>88</integer>
>> +// CHECK: <key>col</key><integer>1</integer>
>> +// CHECK: <key>file</key><integer>0</integer>
>> +// CHECK: </dict>
>> +// CHECK: </dict>
>> // CHECK: </array>
>> // CHECK: </dict>
>> // CHECK: </plist>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list