r175988 - [analyzer] tracking stores/constraints now works for ObjC ivars or struct fields.

Jordan Rose jordan_rose at apple.com
Sun Feb 24 16:14:32 PST 2013


Ted, there are many many expressions that are marked 'lvalue', especially in C++, even when the lvalue is not used. Can you please check how many recycle cases we are losing on, say, Sema.cpp?

(I had an LLVM statistics option in here locally but I figured this was too much of a hot path to leave them in in trunk.)

Jordan


On Feb 23, 2013, at 23:21 , Ted Kremenek <kremenek at apple.com> wrote:

> Author: kremenek
> Date: Sun Feb 24 01:21:01 2013
> New Revision: 175988
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=175988&view=rev
> Log:
> [analyzer] tracking stores/constraints now works for ObjC ivars or struct fields.
> 
> This required more changes than I originally expected:
> 
> - ObjCIvarRegion implements "canPrintPretty" et al
> - DereferenceChecker indicates the null pointer source is an ivar
> - bugreporter::trackNullOrUndefValue() uses an alternate algorithm
>  to compute the location region to track by scouring the ExplodedGraph.
>  This allows us to get the actual MemRegion for variables, ivars,
>  fields, etc.  We only hand construct a VarRegion for C++ references.
> - ExplodedGraph no longer drops nodes for expressions that are marked
>  'lvalue'.  This is to facilitate the logic in the previous bullet.
>  This may lead to a slight increase in size in the ExplodedGraph,
>  which I have not measured, but it is likely not to be a big deal.
> 
> I have validated each of the changed plist output.
> 
> Fixes <rdar://problem/12114812>
> 
> Modified:
>    cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
>    cfe/trunk/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp
>    cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
>    cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
>    cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp
>    cfe/trunk/test/Analysis/diagnostics/deref-track-symbolic-region.c
>    cfe/trunk/test/Analysis/diagnostics/undef-value-param.c
>    cfe/trunk/test/Analysis/plist-output-alternate.m
>    cfe/trunk/test/Analysis/plist-output.m
> 
> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h?rev=175988&r1=175987&r2=175988&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h (original)
> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h Sun Feb 24 01:21:01 2013
> @@ -950,6 +950,9 @@ public:
>   const ObjCIvarDecl *getDecl() const;
>   QualType getValueType() const;
> 
> +  bool canPrintPretty() const;
> +  void printPretty(raw_ostream &os) const;
> +
>   void dumpToStream(raw_ostream &os) const;
> 
>   static bool classof(const MemRegion* R) {
> 
> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp?rev=175988&r1=175987&r2=175988&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp Sun Feb 24 01:21:01 2013
> @@ -76,6 +76,14 @@ DereferenceChecker::AddDerefSource(raw_o
>       Ranges.push_back(SourceRange(L, L));
>       break;
>     }
> +    case Stmt::ObjCIvarRefExprClass: {
> +      const ObjCIvarRefExpr *IV = cast<ObjCIvarRefExpr>(Ex);
> +      os << " (" << (loadedFrom ? "loaded from" : "via")
> +         << " ivar '" << IV->getDecl()->getName() << "')";
> +      SourceLocation L = IV->getLocation();
> +      Ranges.push_back(SourceRange(L, L));
> +      break;
> +    }    
>   }
> }
> 
> 
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp?rev=175988&r1=175987&r2=175988&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp Sun Feb 24 01:21:01 2013
> @@ -662,14 +662,47 @@ bool bugreporter::trackNullOrUndefValue(
>     // C++ user-defined implicit conversions, because those have a constructor
>     // or function call inside.
>     Ex = Ex->IgnoreParenCasts();
> -    if (const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(Ex)) {
> -      // FIXME: Right now we only track VarDecls because it's non-trivial to
> -      // get a MemRegion for any other DeclRefExprs. <rdar://problem/12114812>
> -      if (const VarDecl *VD = dyn_cast<VarDecl>(DR->getDecl())) {
> -        ProgramStateManager &StateMgr = state->getStateManager();
> -        MemRegionManager &MRMgr = StateMgr.getRegionManager();
> -        const VarRegion *R = MRMgr.getVarRegion(VD, N->getLocationContext());
> 
> +    if (Ex->isLValue()) {
> +      const MemRegion *R = 0;
> +
> +      // First check if this is a DeclRefExpr for a C++ reference type.
> +      // For those, we want the location of the reference.
> +      if (const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(Ex)) {
> +        if (const VarDecl *VD = dyn_cast<VarDecl>(DR->getDecl())) {
> +          if (VD->getType()->isReferenceType()) {
> +            ProgramStateManager &StateMgr = state->getStateManager();
> +            MemRegionManager &MRMgr = StateMgr.getRegionManager();
> +            R = MRMgr.getVarRegion(VD, N->getLocationContext());
> +          }
> +        }
> +      }
> +
> +      // For all other cases, find the location by scouring the ExplodedGraph.
> +      if (!R) {
> +        // Find the ExplodedNode where the lvalue (the value of 'Ex')
> +        // was computed.  We need this for getting the location value.
> +        const ExplodedNode *LVNode = N;
> +        const Expr *SearchEx = Ex;
> +        if (const OpaqueValueExpr *OPE = dyn_cast<OpaqueValueExpr>(Ex)) {
> +          SearchEx = OPE->getSourceExpr();
> +        }
> +        while (LVNode) {
> +          if (Optional<PostStmt> P = LVNode->getLocation().getAs<PostStmt>()) {
> +            if (P->getStmt() == SearchEx)
> +              break;
> +          }
> +          LVNode = LVNode->getFirstPred();
> +        }
> +        assert(LVNode && "Unable to find the lvalue node.");
> +        ProgramStateRef LVState = LVNode->getState();
> +        if (Optional<Loc> L =
> +              LVState->getSVal(Ex, LVNode->getLocationContext()).getAs<Loc>()) {
> +          R = L->getAsRegion();
> +        }
> +      }
> +
> +      if (R) {
>         // Mark both the variable region and its contents as interesting.
>         SVal V = state->getRawSVal(loc::MemRegionVal(R));
> 
> @@ -692,6 +725,12 @@ bool bugreporter::trackNullOrUndefValue(
>         report.markInteresting(V);
>         report.addVisitor(new UndefOrNullArgVisitor(R));
> 
> +        if (isa<SymbolicRegion>(R)) {
> +          TrackConstraintBRVisitor *VI =
> +            new TrackConstraintBRVisitor(loc::MemRegionVal(R), false);
> +          report.addVisitor(VI);
> +        }
> +
>         // If the contents are symbolic, find out when they became null.
>         if (V.getAsLocSymbol()) {
>           BugReporterVisitor *ConstraintTracker =
> @@ -706,8 +745,8 @@ bool bugreporter::trackNullOrUndefValue(
>     }
>   }
> 
> -  // If the expression does NOT refer to a variable, we can still track
> -  // constraints on its contents.
> +  // If the expression is not an "lvalue expression", we can still
> +  // track the constraints on its contents.
>   SVal V = state->getSValAsScalarOrLoc(S, N->getLocationContext());
> 
>   // Uncomment this to find cases where we aren't properly getting the
> 
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp?rev=175988&r1=175987&r2=175988&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp Sun Feb 24 01:21:01 2013
> @@ -66,9 +66,10 @@ bool ExplodedGraph::shouldCollect(const
>   // (5) The 'store' is the same as the predecessor.
>   // (6) The 'GDM' is the same as the predecessor.
>   // (7) The LocationContext is the same as the predecessor.
> -  // (8) The PostStmt isn't for a non-consumed Stmt or Expr.
> -  // (9) The successor is not a CallExpr StmtPoint (so that we would be able to
> -  //     find it when retrying a call with no inlining).
> +  // (8) Expressions that are *not* lvalue expressions.
> +  // (9) The PostStmt isn't for a non-consumed Stmt or Expr.
> +  // (10) The successor is not a CallExpr StmtPoint (so that we would
> +  //      be able to find it when retrying a call with no inlining).
>   // FIXME: It may be safe to reclaim PreCall and PostCall nodes as well.
> 
>   // Conditions 1 and 2.
> @@ -99,20 +100,23 @@ bool ExplodedGraph::shouldCollect(const
>   if (state->store != pred_state->store || state->GDM != pred_state->GDM ||
>       progPoint.getLocationContext() != pred->getLocationContext())
>     return false;
> -  
> +
>   // Condition 8.
> -  // Do not collect nodes for non-consumed Stmt or Expr to ensure precise
> -  // diagnostic generation; specifically, so that we could anchor arrows
> -  // pointing to the beginning of statements (as written in code).
> +  // Do not collect nodes for lvalue expressions since they are
> +  // used extensively for generating path diagnostics.
>   const Expr *Ex = dyn_cast<Expr>(ps.getStmt());
> -  if (!Ex)
> +  if (!Ex || Ex->isLValue())
>     return false;
> 
> +  // Condition 9.
> +  // Do not collect nodes for non-consumed Stmt or Expr to ensure precise
> +  // diagnostic generation; specifically, so that we could anchor arrows
> +  // pointing to the beginning of statements (as written in code).
>   ParentMap &PM = progPoint.getLocationContext()->getParentMap();
>   if (!PM.isConsumedExpr(Ex))
>     return false;
> -  
> -  // Condition 9.
> +
> +  // Condition 10.
>   const ProgramPoint SuccLoc = succ->getLocation();
>   if (Optional<StmtPoint> SP = SuccLoc.getAs<StmtPoint>())
>     if (CallEvent::isCallStmt(SP->getStmt()))
> 
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp?rev=175988&r1=175987&r2=175988&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp Sun Feb 24 01:21:01 2013
> @@ -566,6 +566,14 @@ void VarRegion::printPretty(raw_ostream
>   os << getDecl()->getName();
> }
> 
> +bool ObjCIvarRegion::canPrintPretty() const {
> +  return true;
> +}
> +
> +void ObjCIvarRegion::printPretty(raw_ostream &os) const {
> +  os << getDecl()->getName();
> +}
> +
> bool FieldRegion::canPrintPretty() const {
>   return superRegion->canPrintPretty();
> }
> 
> Modified: cfe/trunk/test/Analysis/diagnostics/deref-track-symbolic-region.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/diagnostics/deref-track-symbolic-region.c?rev=175988&r1=175987&r2=175988&view=diff
> ==============================================================================
> --- cfe/trunk/test/Analysis/diagnostics/deref-track-symbolic-region.c (original)
> +++ cfe/trunk/test/Analysis/diagnostics/deref-track-symbolic-region.c Sun Feb 24 01:21:01 2013
> @@ -1,5 +1,6 @@
> // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s
> -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o - | FileCheck %s
> +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o %t.plist
> +// RUN: FileCheck --input-file=%t.plist %s
> 
> struct S {
>   int *x;
> @@ -18,7 +19,7 @@ void inlined(struct S *s, int m) {
> }
> void test(struct S syz, int *pp) {
>   int m = 0;
> -  syz.x = foo();
> +  syz.x = foo(); // expected-note{{Value assigned to 'syz.x'}}
>   inlined(&syz, m);
>                // expected-note at -1{{Calling 'inlined'}}
>                // expected-note at -2{{Returning from 'inlined'}}
> @@ -26,329 +27,386 @@ void test(struct S syz, int *pp) {
>                // expected-note at -1{{Dereference of null pointer (loaded from field 'x')}}
> }
> 
> -//CHECK: <dict>
> -//CHECK:  <key>files</key>
> -//CHECK:  <array>
> -//CHECK:  </array>
> -//CHECK:  <key>diagnostics</key>
> -//CHECK:  <array>
> -//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>20</integer>
> -//CHECK:            <key>col</key><integer>3</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>20</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>22</integer>
> -//CHECK:            <key>col</key><integer>3</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>22</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>22</integer>
> -//CHECK:       <key>col</key><integer>3</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>22</integer>
> -//CHECK:          <key>col</key><integer>3</integer>
> -//CHECK:          <key>file</key><integer>0</integer>
> -//CHECK:         </dict>
> -//CHECK:         <dict>
> -//CHECK:          <key>line</key><integer>22</integer>
> -//CHECK:          <key>col</key><integer>18</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 'inlined'</string>
> -//CHECK:      <key>message</key>
> -//CHECK: <string>Calling 'inlined'</string>
> -//CHECK:     </dict>
> -//CHECK:     <dict>
> -//CHECK:      <key>kind</key><string>event</string>
> -//CHECK:      <key>location</key>
> -//CHECK:      <dict>
> -//CHECK:       <key>line</key><integer>11</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 'test'</string>
> -//CHECK:      <key>message</key>
> -//CHECK: <string>Entered call from 'test'</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>11</integer>
> -//CHECK:            <key>col</key><integer>1</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>11</integer>
> -//CHECK:            <key>col</key><integer>4</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>12</integer>
> -//CHECK:            <key>col</key><integer>3</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>12</integer>
> -//CHECK:            <key>col</key><integer>4</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>12</integer>
> -//CHECK:            <key>col</key><integer>3</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>12</integer>
> -//CHECK:            <key>col</key><integer>4</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>12</integer>
> -//CHECK:            <key>col</key><integer>7</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>12</integer>
> -//CHECK:            <key>col</key><integer>7</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>12</integer>
> -//CHECK:       <key>col</key><integer>7</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>12</integer>
> -//CHECK:          <key>col</key><integer>7</integer>
> -//CHECK:          <key>file</key><integer>0</integer>
> -//CHECK:         </dict>
> -//CHECK:         <dict>
> -//CHECK:          <key>line</key><integer>12</integer>
> -//CHECK:          <key>col</key><integer>10</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>Assuming pointer value is null</string>
> -//CHECK:      <key>message</key>
> -//CHECK: <string>Assuming pointer value is null</string>
> -//CHECK:     </dict>
> -//CHECK:     <dict>
> -//CHECK:      <key>kind</key><string>event</string>
> -//CHECK:      <key>location</key>
> -//CHECK:      <dict>
> -//CHECK:       <key>line</key><integer>22</integer>
> -//CHECK:       <key>col</key><integer>3</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>22</integer>
> -//CHECK:          <key>col</key><integer>3</integer>
> -//CHECK:          <key>file</key><integer>0</integer>
> -//CHECK:         </dict>
> -//CHECK:         <dict>
> -//CHECK:          <key>line</key><integer>22</integer>
> -//CHECK:          <key>col</key><integer>18</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 'inlined'</string>
> -//CHECK:      <key>message</key>
> -//CHECK: <string>Returning from 'inlined'</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>22</integer>
> -//CHECK:            <key>col</key><integer>3</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>22</integer>
> -//CHECK:            <key>col</key><integer>9</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>25</integer>
> -//CHECK:            <key>col</key><integer>3</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>25</integer>
> -//CHECK:            <key>col</key><integer>3</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>25</integer>
> -//CHECK:            <key>col</key><integer>3</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>25</integer>
> -//CHECK:            <key>col</key><integer>3</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>25</integer>
> -//CHECK:            <key>col</key><integer>8</integer>
> -//CHECK:            <key>file</key><integer>0</integer>
> -//CHECK:           </dict>
> -//CHECK:           <dict>
> -//CHECK:            <key>line</key><integer>25</integer>
> -//CHECK:            <key>col</key><integer>8</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>25</integer>
> -//CHECK:       <key>col</key><integer>8</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>25</integer>
> -//CHECK:          <key>col</key><integer>13</integer>
> -//CHECK:          <key>file</key><integer>0</integer>
> -//CHECK:         </dict>
> -//CHECK:         <dict>
> -//CHECK:          <key>line</key><integer>25</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>Dereference of null pointer (loaded from field 'x')</string>
> -//CHECK:      <key>message</key>
> -//CHECK: <string>Dereference of null pointer (loaded from field 'x')</string>
> -//CHECK:     </dict>
> -//CHECK:    </array>
> -//CHECK:    <key>description</key><string>Dereference of null pointer (loaded from field 'x')</string>
> -//CHECK:    <key>category</key><string>Logic error</string>
> -//CHECK:    <key>type</key><string>Dereference of null pointer</string>
> -//CHECK:   <key>issue_context_kind</key><string>function</string>
> -//CHECK:   <key>issue_context</key><string>test</string>
> -//CHECK:   <key>issue_hash</key><string>6</string>
> -//CHECK:   <key>location</key>
> -//CHECK:   <dict>
> -//CHECK:    <key>line</key><integer>25</integer>
> -//CHECK:    <key>col</key><integer>8</integer>
> -//CHECK:    <key>file</key><integer>0</integer>
> -//CHECK:   </dict>
> -//CHECK:   </dict>
> -//CHECK:  </array>
> -//CHECK: </dict>
> -//CHECK: </plist>
> +// CHECK:  <key>diagnostics</key>
> +// CHECK-NEXT:  <array>
> +// CHECK-NEXT:   <dict>
> +// CHECK-NEXT:    <key>path</key>
> +// CHECK-NEXT:    <array>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>21</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>21</integer>
> +// CHECK-NEXT:            <key>col</key><integer>5</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>22</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>22</integer>
> +// CHECK-NEXT:            <key>col</key><integer>5</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>22</integer>
> +// CHECK-NEXT:       <key>col</key><integer>3</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>22</integer>
> +// CHECK-NEXT:          <key>col</key><integer>3</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>22</integer>
> +// CHECK-NEXT:          <key>col</key><integer>15</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>0</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Value assigned to 'syz.x'</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Value assigned to 'syz.x'</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>22</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>22</integer>
> +// CHECK-NEXT:            <key>col</key><integer>5</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>23</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>23</integer>
> +// CHECK-NEXT:            <key>col</key><integer>9</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>23</integer>
> +// CHECK-NEXT:       <key>col</key><integer>3</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>23</integer>
> +// CHECK-NEXT:          <key>col</key><integer>3</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>23</integer>
> +// CHECK-NEXT:          <key>col</key><integer>18</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>0</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Calling 'inlined'</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Calling 'inlined'</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>12</integer>
> +// CHECK-NEXT:       <key>col</key><integer>1</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>depth</key><integer>1</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Entered call from 'test'</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Entered call from 'test'</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> +// CHECK-NEXT:            <key>col</key><integer>1</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> +// CHECK-NEXT:            <key>col</key><integer>4</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>13</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>13</integer>
> +// CHECK-NEXT:            <key>col</key><integer>4</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>13</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>13</integer>
> +// CHECK-NEXT:            <key>col</key><integer>4</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>13</integer>
> +// CHECK-NEXT:            <key>col</key><integer>7</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>13</integer>
> +// CHECK-NEXT:            <key>col</key><integer>7</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>13</integer>
> +// CHECK-NEXT:       <key>col</key><integer>7</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>13</integer>
> +// CHECK-NEXT:          <key>col</key><integer>7</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>13</integer>
> +// CHECK-NEXT:          <key>col</key><integer>10</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>1</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Assuming pointer value is null</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Assuming pointer value is null</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>23</integer>
> +// CHECK-NEXT:       <key>col</key><integer>3</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>23</integer>
> +// CHECK-NEXT:          <key>col</key><integer>3</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>23</integer>
> +// CHECK-NEXT:          <key>col</key><integer>18</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>1</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Returning from 'inlined'</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Returning from 'inlined'</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>23</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>23</integer>
> +// CHECK-NEXT:            <key>col</key><integer>9</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> +// CHECK-NEXT:            <key>col</key><integer>8</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> +// CHECK-NEXT:            <key>col</key><integer>8</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>26</integer>
> +// CHECK-NEXT:       <key>col</key><integer>8</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>26</integer>
> +// CHECK-NEXT:          <key>col</key><integer>13</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>26</integer>
> +// CHECK-NEXT:          <key>col</key><integer>13</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>0</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Dereference of null pointer (loaded from field 'x')</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Dereference of null pointer (loaded from field 'x')</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:    </array>
> +// CHECK-NEXT:    <key>description</key><string>Dereference of null pointer (loaded from field 'x')</string>
> +// CHECK-NEXT:    <key>category</key><string>Logic error</string>
> +// CHECK-NEXT:    <key>type</key><string>Dereference of null pointer</string>
> +// CHECK-NEXT:   <key>issue_context_kind</key><string>function</string>
> +// CHECK-NEXT:   <key>issue_context</key><string>test</string>
> +// CHECK-NEXT:   <key>issue_hash</key><string>6</string>
> +// CHECK-NEXT:   <key>location</key>
> +// CHECK-NEXT:   <dict>
> +// CHECK-NEXT:    <key>line</key><integer>26</integer>
> +// CHECK-NEXT:    <key>col</key><integer>8</integer>
> +// CHECK-NEXT:    <key>file</key><integer>0</integer>
> +// CHECK-NEXT:   </dict>
> +// CHECK-NEXT:   </dict>
> +// CHECK-NEXT:  </array>
> 
> Modified: cfe/trunk/test/Analysis/diagnostics/undef-value-param.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/diagnostics/undef-value-param.c?rev=175988&r1=175987&r2=175988&view=diff
> ==============================================================================
> --- cfe/trunk/test/Analysis/diagnostics/undef-value-param.c (original)
> +++ cfe/trunk/test/Analysis/diagnostics/undef-value-param.c Sun Feb 24 01:21:01 2013
> @@ -1,5 +1,6 @@
> // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s
> -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o - | FileCheck %s
> +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o %t.plist
> +// RUN: FileCheck --input-file=%t.plist %s
> 
> void foo_irrelevant(int c) {
>     if (c)
> @@ -55,7 +56,7 @@ void initStruct(int x, struct WithFields
> }
> double testPassingParentRegionStruct(int x) {
>   struct WithFields st;
> -  st.f1 = 0;
> +  st.f1 = 0; // expected-note {{Null pointer value stored to 'st.f1'}}
>   initStruct(x, &st); //expected-note {{Calling 'initStruct'}}
>                       //expected-note at -1 {{Returning from 'initStruct'}}
>   return (*st.f1); //expected-warning {{Dereference of null pointer}}
> @@ -71,7 +72,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>19</integer>
> +// CHECK-NEXT:       <key>line</key><integer>20</integer>
> // CHECK-NEXT:       <key>col</key><integer>5</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -79,12 +80,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>19</integer>
> +// CHECK-NEXT:          <key>line</key><integer>20</integer>
> // CHECK-NEXT:          <key>col</key><integer>5</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>19</integer>
> +// CHECK-NEXT:          <key>line</key><integer>20</integer>
> // CHECK-NEXT:          <key>col</key><integer>10</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -104,12 +105,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>19</integer>
> +// CHECK-NEXT:            <key>line</key><integer>20</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>19</integer>
> +// CHECK-NEXT:            <key>line</key><integer>20</integer>
> // CHECK-NEXT:            <key>col</key><integer>7</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -117,12 +118,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>21</integer>
> +// CHECK-NEXT:            <key>line</key><integer>22</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>21</integer>
> +// CHECK-NEXT:            <key>line</key><integer>22</integer>
> // CHECK-NEXT:            <key>col</key><integer>7</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -134,7 +135,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>21</integer>
> +// CHECK-NEXT:       <key>line</key><integer>22</integer>
> // CHECK-NEXT:       <key>col</key><integer>5</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -142,12 +143,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>21</integer>
> +// CHECK-NEXT:          <key>line</key><integer>22</integer>
> // CHECK-NEXT:          <key>col</key><integer>5</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>21</integer>
> +// CHECK-NEXT:          <key>line</key><integer>22</integer>
> // CHECK-NEXT:          <key>col</key><integer>14</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -163,7 +164,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>10</integer>
> +// CHECK-NEXT:       <key>line</key><integer>11</integer>
> // CHECK-NEXT:       <key>col</key><integer>1</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -181,12 +182,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>10</integer>
> +// CHECK-NEXT:            <key>line</key><integer>11</integer>
> // CHECK-NEXT:            <key>col</key><integer>1</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>10</integer>
> +// CHECK-NEXT:            <key>line</key><integer>11</integer>
> // CHECK-NEXT:            <key>col</key><integer>4</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -194,12 +195,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>11</integer>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>11</integer>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> // CHECK-NEXT:            <key>col</key><integer>6</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -215,12 +216,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>11</integer>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>11</integer>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> // CHECK-NEXT:            <key>col</key><integer>6</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -228,12 +229,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>11</integer>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>11</integer>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -245,7 +246,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>11</integer>
> +// CHECK-NEXT:       <key>line</key><integer>12</integer>
> // CHECK-NEXT:       <key>col</key><integer>9</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -253,12 +254,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>11</integer>
> +// CHECK-NEXT:          <key>line</key><integer>12</integer>
> // CHECK-NEXT:          <key>col</key><integer>9</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>11</integer>
> +// CHECK-NEXT:          <key>line</key><integer>12</integer>
> // CHECK-NEXT:          <key>col</key><integer>9</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -278,12 +279,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>11</integer>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>11</integer>
> +// CHECK-NEXT:            <key>line</key><integer>12</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -291,12 +292,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>14</integer>
> +// CHECK-NEXT:            <key>line</key><integer>15</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>14</integer>
> +// CHECK-NEXT:            <key>line</key><integer>15</integer>
> // CHECK-NEXT:            <key>col</key><integer>14</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -308,7 +309,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>21</integer>
> +// CHECK-NEXT:       <key>line</key><integer>22</integer>
> // CHECK-NEXT:       <key>col</key><integer>5</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -316,12 +317,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>21</integer>
> +// CHECK-NEXT:          <key>line</key><integer>22</integer>
> // CHECK-NEXT:          <key>col</key><integer>5</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>21</integer>
> +// CHECK-NEXT:          <key>line</key><integer>22</integer>
> // CHECK-NEXT:          <key>col</key><integer>14</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -341,12 +342,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>21</integer>
> +// CHECK-NEXT:            <key>line</key><integer>22</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>21</integer>
> +// CHECK-NEXT:            <key>line</key><integer>22</integer>
> // CHECK-NEXT:            <key>col</key><integer>7</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -354,12 +355,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>24</integer>
> +// CHECK-NEXT:            <key>line</key><integer>25</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>24</integer>
> +// CHECK-NEXT:            <key>line</key><integer>25</integer>
> // CHECK-NEXT:            <key>col</key><integer>18</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -375,12 +376,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>24</integer>
> +// CHECK-NEXT:            <key>line</key><integer>25</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>24</integer>
> +// CHECK-NEXT:            <key>line</key><integer>25</integer>
> // CHECK-NEXT:            <key>col</key><integer>18</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -388,12 +389,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>25</integer>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>25</integer>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> // CHECK-NEXT:            <key>col</key><integer>10</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -409,12 +410,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>25</integer>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>25</integer>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> // CHECK-NEXT:            <key>col</key><integer>10</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -422,12 +423,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>25</integer>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> // CHECK-NEXT:            <key>col</key><integer>12</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>25</integer>
> +// CHECK-NEXT:            <key>line</key><integer>26</integer>
> // CHECK-NEXT:            <key>col</key><integer>13</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -439,7 +440,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>25</integer>
> +// CHECK-NEXT:       <key>line</key><integer>26</integer>
> // CHECK-NEXT:       <key>col</key><integer>12</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -447,12 +448,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>25</integer>
> +// CHECK-NEXT:          <key>line</key><integer>26</integer>
> // CHECK-NEXT:          <key>col</key><integer>12</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>25</integer>
> +// CHECK-NEXT:          <key>line</key><integer>26</integer>
> // CHECK-NEXT:          <key>col</key><integer>13</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -473,7 +474,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:   <key>issue_hash</key><string>7</string>
> // CHECK-NEXT:   <key>location</key>
> // CHECK-NEXT:   <dict>
> -// CHECK-NEXT:    <key>line</key><integer>25</integer>
> +// CHECK-NEXT:    <key>line</key><integer>26</integer>
> // CHECK-NEXT:    <key>col</key><integer>12</integer>
> // CHECK-NEXT:    <key>file</key><integer>0</integer>
> // CHECK-NEXT:   </dict>
> @@ -489,12 +490,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>38</integer>
> +// CHECK-NEXT:            <key>line</key><integer>39</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>38</integer>
> +// CHECK-NEXT:            <key>line</key><integer>39</integer>
> // CHECK-NEXT:            <key>col</key><integer>10</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -502,12 +503,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>39</integer>
> +// CHECK-NEXT:            <key>line</key><integer>40</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>39</integer>
> +// CHECK-NEXT:            <key>line</key><integer>40</integer>
> // CHECK-NEXT:            <key>col</key><integer>13</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -519,7 +520,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>39</integer>
> +// CHECK-NEXT:       <key>line</key><integer>40</integer>
> // CHECK-NEXT:       <key>col</key><integer>5</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -527,12 +528,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>39</integer>
> +// CHECK-NEXT:          <key>line</key><integer>40</integer>
> // CHECK-NEXT:          <key>col</key><integer>5</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>39</integer>
> +// CHECK-NEXT:          <key>line</key><integer>40</integer>
> // CHECK-NEXT:          <key>col</key><integer>21</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -548,7 +549,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>29</integer>
> +// CHECK-NEXT:       <key>line</key><integer>30</integer>
> // CHECK-NEXT:       <key>col</key><integer>1</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -566,12 +567,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>29</integer>
> +// CHECK-NEXT:            <key>line</key><integer>30</integer>
> // CHECK-NEXT:            <key>col</key><integer>1</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>29</integer>
> +// CHECK-NEXT:            <key>line</key><integer>30</integer>
> // CHECK-NEXT:            <key>col</key><integer>4</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -579,12 +580,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>30</integer>
> +// CHECK-NEXT:            <key>line</key><integer>31</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>30</integer>
> +// CHECK-NEXT:            <key>line</key><integer>31</integer>
> // CHECK-NEXT:            <key>col</key><integer>6</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -600,12 +601,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>30</integer>
> +// CHECK-NEXT:            <key>line</key><integer>31</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>30</integer>
> +// CHECK-NEXT:            <key>line</key><integer>31</integer>
> // CHECK-NEXT:            <key>col</key><integer>6</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -613,12 +614,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>30</integer>
> +// CHECK-NEXT:            <key>line</key><integer>31</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>30</integer>
> +// CHECK-NEXT:            <key>line</key><integer>31</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -630,7 +631,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>30</integer>
> +// CHECK-NEXT:       <key>line</key><integer>31</integer>
> // CHECK-NEXT:       <key>col</key><integer>9</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -638,12 +639,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>30</integer>
> +// CHECK-NEXT:          <key>line</key><integer>31</integer>
> // CHECK-NEXT:          <key>col</key><integer>9</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>30</integer>
> +// CHECK-NEXT:          <key>line</key><integer>31</integer>
> // CHECK-NEXT:          <key>col</key><integer>14</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -663,12 +664,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>30</integer>
> +// CHECK-NEXT:            <key>line</key><integer>31</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>30</integer>
> +// CHECK-NEXT:            <key>line</key><integer>31</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -676,12 +677,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>32</integer>
> +// CHECK-NEXT:            <key>line</key><integer>33</integer>
> // CHECK-NEXT:            <key>col</key><integer>9</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>32</integer>
> +// CHECK-NEXT:            <key>line</key><integer>33</integer>
> // CHECK-NEXT:            <key>col</key><integer>14</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -693,7 +694,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>39</integer>
> +// CHECK-NEXT:       <key>line</key><integer>40</integer>
> // CHECK-NEXT:       <key>col</key><integer>5</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -701,12 +702,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>39</integer>
> +// CHECK-NEXT:          <key>line</key><integer>40</integer>
> // CHECK-NEXT:          <key>col</key><integer>5</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>39</integer>
> +// CHECK-NEXT:          <key>line</key><integer>40</integer>
> // CHECK-NEXT:          <key>col</key><integer>21</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -726,12 +727,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>39</integer>
> +// CHECK-NEXT:            <key>line</key><integer>40</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>39</integer>
> +// CHECK-NEXT:            <key>line</key><integer>40</integer>
> // CHECK-NEXT:            <key>col</key><integer>13</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -739,12 +740,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>41</integer>
> +// CHECK-NEXT:            <key>line</key><integer>42</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>41</integer>
> +// CHECK-NEXT:            <key>line</key><integer>42</integer>
> // CHECK-NEXT:            <key>col</key><integer>10</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -760,12 +761,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>41</integer>
> +// CHECK-NEXT:            <key>line</key><integer>42</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>41</integer>
> +// CHECK-NEXT:            <key>line</key><integer>42</integer>
> // CHECK-NEXT:            <key>col</key><integer>10</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -773,12 +774,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>41</integer>
> +// CHECK-NEXT:            <key>line</key><integer>42</integer>
> // CHECK-NEXT:            <key>col</key><integer>12</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>41</integer>
> +// CHECK-NEXT:            <key>line</key><integer>42</integer>
> // CHECK-NEXT:            <key>col</key><integer>12</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -790,7 +791,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>41</integer>
> +// CHECK-NEXT:       <key>line</key><integer>42</integer>
> // CHECK-NEXT:       <key>col</key><integer>12</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -798,12 +799,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>41</integer>
> +// CHECK-NEXT:          <key>line</key><integer>42</integer>
> // CHECK-NEXT:          <key>col</key><integer>16</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>41</integer>
> +// CHECK-NEXT:          <key>line</key><integer>42</integer>
> // CHECK-NEXT:          <key>col</key><integer>21</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -824,7 +825,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:   <key>issue_hash</key><string>4</string>
> // CHECK-NEXT:   <key>location</key>
> // CHECK-NEXT:   <dict>
> -// CHECK-NEXT:    <key>line</key><integer>41</integer>
> +// CHECK-NEXT:    <key>line</key><integer>42</integer>
> // CHECK-NEXT:    <key>col</key><integer>12</integer>
> // CHECK-NEXT:    <key>file</key><integer>0</integer>
> // CHECK-NEXT:   </dict>
> @@ -840,12 +841,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>57</integer>
> +// CHECK-NEXT:            <key>line</key><integer>58</integer>
> // CHECK-NEXT:            <key>col</key><integer>3</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>57</integer>
> +// CHECK-NEXT:            <key>line</key><integer>58</integer>
> // CHECK-NEXT:            <key>col</key><integer>8</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -859,7 +860,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> // CHECK-NEXT:            <key>line</key><integer>59</integer>
> -// CHECK-NEXT:            <key>col</key><integer>12</integer>
> +// CHECK-NEXT:            <key>col</key><integer>4</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:          </array>
> @@ -884,6 +885,69 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> // CHECK-NEXT:          <key>line</key><integer>59</integer>
> +// CHECK-NEXT:          <key>col</key><integer>11</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>0</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Null pointer value stored to 'st.f1'</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Null pointer value stored to 'st.f1'</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>59</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>59</integer>
> +// CHECK-NEXT:            <key>col</key><integer>4</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>60</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>60</integer>
> +// CHECK-NEXT:            <key>col</key><integer>12</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>60</integer>
> +// CHECK-NEXT:       <key>col</key><integer>3</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>60</integer>
> +// CHECK-NEXT:          <key>col</key><integer>3</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>60</integer>
> // CHECK-NEXT:          <key>col</key><integer>20</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -899,7 +963,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>49</integer>
> +// CHECK-NEXT:       <key>line</key><integer>50</integer>
> // CHECK-NEXT:       <key>col</key><integer>1</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -917,12 +981,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>49</integer>
> +// CHECK-NEXT:            <key>line</key><integer>50</integer>
> // CHECK-NEXT:            <key>col</key><integer>1</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>49</integer>
> +// CHECK-NEXT:            <key>line</key><integer>50</integer>
> // CHECK-NEXT:            <key>col</key><integer>4</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -930,12 +994,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>50</integer>
> +// CHECK-NEXT:            <key>line</key><integer>51</integer>
> // CHECK-NEXT:            <key>col</key><integer>3</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>50</integer>
> +// CHECK-NEXT:            <key>line</key><integer>51</integer>
> // CHECK-NEXT:            <key>col</key><integer>4</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -951,12 +1015,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>50</integer>
> +// CHECK-NEXT:            <key>line</key><integer>51</integer>
> // CHECK-NEXT:            <key>col</key><integer>3</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>50</integer>
> +// CHECK-NEXT:            <key>line</key><integer>51</integer>
> // CHECK-NEXT:            <key>col</key><integer>4</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -964,12 +1028,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>50</integer>
> +// CHECK-NEXT:            <key>line</key><integer>51</integer>
> // CHECK-NEXT:            <key>col</key><integer>7</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>50</integer>
> +// CHECK-NEXT:            <key>line</key><integer>51</integer>
> // CHECK-NEXT:            <key>col</key><integer>7</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -981,7 +1045,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>50</integer>
> +// CHECK-NEXT:       <key>line</key><integer>51</integer>
> // CHECK-NEXT:       <key>col</key><integer>7</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -989,12 +1053,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>50</integer>
> +// CHECK-NEXT:          <key>line</key><integer>51</integer>
> // CHECK-NEXT:          <key>col</key><integer>7</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>50</integer>
> +// CHECK-NEXT:          <key>line</key><integer>51</integer>
> // CHECK-NEXT:          <key>col</key><integer>12</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -1014,12 +1078,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>50</integer>
> +// CHECK-NEXT:            <key>line</key><integer>51</integer>
> // CHECK-NEXT:            <key>col</key><integer>7</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>50</integer>
> +// CHECK-NEXT:            <key>line</key><integer>51</integer>
> // CHECK-NEXT:            <key>col</key><integer>7</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -1027,12 +1091,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>53</integer>
> +// CHECK-NEXT:            <key>line</key><integer>54</integer>
> // CHECK-NEXT:            <key>col</key><integer>5</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>53</integer>
> +// CHECK-NEXT:            <key>line</key><integer>54</integer>
> // CHECK-NEXT:            <key>col</key><integer>10</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -1044,7 +1108,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>59</integer>
> +// CHECK-NEXT:       <key>line</key><integer>60</integer>
> // CHECK-NEXT:       <key>col</key><integer>3</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -1052,12 +1116,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>59</integer>
> +// CHECK-NEXT:          <key>line</key><integer>60</integer>
> // CHECK-NEXT:          <key>col</key><integer>3</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>59</integer>
> +// CHECK-NEXT:          <key>line</key><integer>60</integer>
> // CHECK-NEXT:          <key>col</key><integer>20</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -1077,12 +1141,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>59</integer>
> +// CHECK-NEXT:            <key>line</key><integer>60</integer>
> // CHECK-NEXT:            <key>col</key><integer>3</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>59</integer>
> +// CHECK-NEXT:            <key>line</key><integer>60</integer>
> // CHECK-NEXT:            <key>col</key><integer>12</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -1090,12 +1154,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>61</integer>
> +// CHECK-NEXT:            <key>line</key><integer>62</integer>
> // CHECK-NEXT:            <key>col</key><integer>3</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>61</integer>
> +// CHECK-NEXT:            <key>line</key><integer>62</integer>
> // CHECK-NEXT:            <key>col</key><integer>8</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -1111,12 +1175,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>start</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>61</integer>
> +// CHECK-NEXT:            <key>line</key><integer>62</integer>
> // CHECK-NEXT:            <key>col</key><integer>3</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>61</integer>
> +// CHECK-NEXT:            <key>line</key><integer>62</integer>
> // CHECK-NEXT:            <key>col</key><integer>8</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -1124,12 +1188,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>61</integer>
> +// CHECK-NEXT:            <key>line</key><integer>62</integer>
> // CHECK-NEXT:            <key>col</key><integer>10</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> // CHECK-NEXT:           <dict>
> -// CHECK-NEXT:            <key>line</key><integer>61</integer>
> +// CHECK-NEXT:            <key>line</key><integer>62</integer>
> // CHECK-NEXT:            <key>col</key><integer>10</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> // CHECK-NEXT:           </dict>
> @@ -1141,7 +1205,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <key>kind</key><string>event</string>
> // CHECK-NEXT:      <key>location</key>
> // CHECK-NEXT:      <dict>
> -// CHECK-NEXT:       <key>line</key><integer>61</integer>
> +// CHECK-NEXT:       <key>line</key><integer>62</integer>
> // CHECK-NEXT:       <key>col</key><integer>10</integer>
> // CHECK-NEXT:       <key>file</key><integer>0</integer>
> // CHECK-NEXT:      </dict>
> @@ -1149,12 +1213,12 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:      <array>
> // CHECK-NEXT:        <array>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>61</integer>
> +// CHECK-NEXT:          <key>line</key><integer>62</integer>
> // CHECK-NEXT:          <key>col</key><integer>15</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> // CHECK-NEXT:         <dict>
> -// CHECK-NEXT:          <key>line</key><integer>61</integer>
> +// CHECK-NEXT:          <key>line</key><integer>62</integer>
> // CHECK-NEXT:          <key>col</key><integer>16</integer>
> // CHECK-NEXT:          <key>file</key><integer>0</integer>
> // CHECK-NEXT:         </dict>
> @@ -1175,7 +1239,7 @@ double testPassingParentRegionStruct(int
> // CHECK-NEXT:   <key>issue_hash</key><string>5</string>
> // CHECK-NEXT:   <key>location</key>
> // CHECK-NEXT:   <dict>
> -// CHECK-NEXT:    <key>line</key><integer>61</integer>
> +// CHECK-NEXT:    <key>line</key><integer>62</integer>
> // CHECK-NEXT:    <key>col</key><integer>10</integer>
> // CHECK-NEXT:    <key>file</key><integer>0</integer>
> // CHECK-NEXT:   </dict>
> 
> Modified: cfe/trunk/test/Analysis/plist-output-alternate.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/plist-output-alternate.m?rev=175988&r1=175987&r2=175988&view=diff
> ==============================================================================
> --- cfe/trunk/test/Analysis/plist-output-alternate.m (original)
> +++ cfe/trunk/test/Analysis/plist-output-alternate.m Sun Feb 24 01:21:01 2013
> @@ -924,6 +924,69 @@ void rdar8331641(int x) {
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>37</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>37</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>37</integer>
> +// CHECK-NEXT:       <key>col</key><integer>3</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>37</integer>
> +// CHECK-NEXT:          <key>col</key><integer>3</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>37</integer>
> +// CHECK-NEXT:          <key>col</key><integer>9</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>0</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Null pointer value stored to 'x.p'</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Null pointer value stored to 'x.p'</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>37</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>37</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> // CHECK-NEXT:            <key>line</key><integer>38</integer>
> // CHECK-NEXT:            <key>col</key><integer>3</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> 
> Modified: cfe/trunk/test/Analysis/plist-output.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/plist-output.m?rev=175988&r1=175987&r2=175988&view=diff
> ==============================================================================
> --- cfe/trunk/test/Analysis/plist-output.m (original)
> +++ cfe/trunk/test/Analysis/plist-output.m Sun Feb 24 01:21:01 2013
> @@ -155,6 +155,16 @@ void test_loop_diagnostics_3() {
>   *p = 1;
> }
> 
> + at interface RDar12114812 { char *p; }
> + at end
> +
> + at implementation RDar12114812 
> +- (void)test {
> +  p = 0;        
> +  *p = 1;
> +}
> + at end
> +
> // CHECK:  <key>diagnostics</key>
> // CHECK-NEXT:  <array>
> // CHECK-NEXT:   <dict>
> @@ -1022,6 +1032,69 @@ void test_loop_diagnostics_3() {
> // CHECK-NEXT:         <key>end</key>
> // CHECK-NEXT:          <array>
> // CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>37</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>37</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>37</integer>
> +// CHECK-NEXT:       <key>col</key><integer>3</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>37</integer>
> +// CHECK-NEXT:          <key>col</key><integer>3</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>37</integer>
> +// CHECK-NEXT:          <key>col</key><integer>9</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>0</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Null pointer value stored to 'x.p'</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Null pointer value stored to 'x.p'</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>37</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>37</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> // CHECK-NEXT:            <key>line</key><integer>38</integer>
> // CHECK-NEXT:            <key>col</key><integer>3</integer>
> // CHECK-NEXT:            <key>file</key><integer>0</integer>
> @@ -4415,5 +4488,114 @@ void test_loop_diagnostics_3() {
> // CHECK-NEXT:    <key>col</key><integer>3</integer>
> // CHECK-NEXT:    <key>file</key><integer>0</integer>
> // CHECK-NEXT:   </dict>
> +// CHECK-NEXT:   </dict>
> +// CHECK-NEXT:   <dict>
> +// CHECK-NEXT:    <key>path</key>
> +// CHECK-NEXT:    <array>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>163</integer>
> +// CHECK-NEXT:       <key>col</key><integer>3</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>163</integer>
> +// CHECK-NEXT:          <key>col</key><integer>3</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>163</integer>
> +// CHECK-NEXT:          <key>col</key><integer>7</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>0</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Null pointer value stored to 'p'</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Null pointer value stored to 'p'</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>control</string>
> +// CHECK-NEXT:      <key>edges</key>
> +// CHECK-NEXT:       <array>
> +// CHECK-NEXT:        <dict>
> +// CHECK-NEXT:         <key>start</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>163</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>163</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:         <key>end</key>
> +// CHECK-NEXT:          <array>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>164</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:           <dict>
> +// CHECK-NEXT:            <key>line</key><integer>164</integer>
> +// CHECK-NEXT:            <key>col</key><integer>3</integer>
> +// CHECK-NEXT:            <key>file</key><integer>0</integer>
> +// CHECK-NEXT:           </dict>
> +// CHECK-NEXT:          </array>
> +// CHECK-NEXT:        </dict>
> +// CHECK-NEXT:       </array>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:     <dict>
> +// CHECK-NEXT:      <key>kind</key><string>event</string>
> +// CHECK-NEXT:      <key>location</key>
> +// CHECK-NEXT:      <dict>
> +// CHECK-NEXT:       <key>line</key><integer>164</integer>
> +// CHECK-NEXT:       <key>col</key><integer>3</integer>
> +// CHECK-NEXT:       <key>file</key><integer>0</integer>
> +// CHECK-NEXT:      </dict>
> +// CHECK-NEXT:      <key>ranges</key>
> +// CHECK-NEXT:      <array>
> +// CHECK-NEXT:        <array>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>164</integer>
> +// CHECK-NEXT:          <key>col</key><integer>4</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:         <dict>
> +// CHECK-NEXT:          <key>line</key><integer>164</integer>
> +// CHECK-NEXT:          <key>col</key><integer>4</integer>
> +// CHECK-NEXT:          <key>file</key><integer>0</integer>
> +// CHECK-NEXT:         </dict>
> +// CHECK-NEXT:        </array>
> +// CHECK-NEXT:      </array>
> +// CHECK-NEXT:      <key>depth</key><integer>0</integer>
> +// CHECK-NEXT:      <key>extended_message</key>
> +// CHECK-NEXT:      <string>Dereference of null pointer (loaded from ivar 'p')</string>
> +// CHECK-NEXT:      <key>message</key>
> +// CHECK-NEXT:      <string>Dereference of null pointer (loaded from ivar 'p')</string>
> +// CHECK-NEXT:     </dict>
> +// CHECK-NEXT:    </array>
> +// CHECK-NEXT:    <key>description</key><string>Dereference of null pointer (loaded from ivar 'p')</string>
> +// CHECK-NEXT:    <key>category</key><string>Logic error</string>
> +// CHECK-NEXT:    <key>type</key><string>Dereference of null pointer</string>
> +// CHECK-NEXT:   <key>issue_context_kind</key><string>Objective-C method</string>
> +// CHECK-NEXT:   <key>issue_context</key><string>test</string>
> +// CHECK-NEXT:   <key>issue_hash</key><string>2</string>
> +// CHECK-NEXT:   <key>location</key>
> +// CHECK-NEXT:   <dict>
> +// CHECK-NEXT:    <key>line</key><integer>164</integer>
> +// CHECK-NEXT:    <key>col</key><integer>3</integer>
> +// CHECK-NEXT:    <key>file</key><integer>0</integer>
> +// CHECK-NEXT:   </dict>
> // CHECK-NEXT:   </dict>
> // CHECK-NEXT:  </array>
> 
> 
> _______________________________________________
> 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