[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

NAKAMURA Takumi geek4civic at gmail.com
Sat Mar 17 06:17:50 PDT 2012


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