[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