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