diff options
20 files changed, 2144 insertions, 243 deletions
diff --git a/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h b/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h index 1a09714a65b..6efe6fbfd0e 100644 --- a/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h +++ b/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h @@ -189,22 +189,23 @@ public: BugReporterContext &BRC); std::shared_ptr<PathDiagnosticPiece> - VisitTrueTest(const Expr *Cond, bool tookTrue, BugReporterContext &BRC, - BugReport &R, const ExplodedNode *N); + VisitTrueTest(const Expr *Cond, BugReporterContext &BRC, BugReport &R, + const ExplodedNode *N, bool TookTrue); std::shared_ptr<PathDiagnosticPiece> - VisitTrueTest(const Expr *Cond, const DeclRefExpr *DR, const bool tookTrue, - BugReporterContext &BRC, BugReport &R, const ExplodedNode *N); + VisitTrueTest(const Expr *Cond, const DeclRefExpr *DR, + BugReporterContext &BRC, BugReport &R, const ExplodedNode *N, + bool TookTrue, bool IsAssuming); std::shared_ptr<PathDiagnosticPiece> VisitTrueTest(const Expr *Cond, const BinaryOperator *BExpr, - const bool tookTrue, BugReporterContext &BRC, BugReport &R, - const ExplodedNode *N); + BugReporterContext &BRC, BugReport &R, const ExplodedNode *N, + bool TookTrue, bool IsAssuming); std::shared_ptr<PathDiagnosticPiece> VisitConditionVariable(StringRef LhsString, const Expr *CondVarExpr, - const bool tookTrue, BugReporterContext &BRC, - BugReport &R, const ExplodedNode *N); + BugReporterContext &BRC, BugReport &R, + const ExplodedNode *N, bool TookTrue); bool patternMatch(const Expr *Ex, const Expr *ParentEx, diff --git a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp index d11ecd95802..d6eb31d6c4e 100644 --- a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp +++ b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp @@ -179,6 +179,23 @@ static bool hasVisibleUpdate(const ExplodedNode *LeftNode, SVal LeftVal, RLCV->getStore() == RightNode->getState()->getStore(); } +static Optional<const llvm::APSInt *> +getConcreteIntegerValue(const Expr *CondVarExpr, const ExplodedNode *N) { + ProgramStateRef State = N->getState(); + const LocationContext *LCtx = N->getLocationContext(); + + // The declaration of the value may rely on a pointer so take its l-value. + if (const auto *DRE = dyn_cast_or_null<DeclRefExpr>(CondVarExpr)) { + if (const auto *VD = dyn_cast_or_null<VarDecl>(DRE->getDecl())) { + SVal DeclSVal = State->getSVal(State->getLValue(VD, LCtx)); + if (auto DeclCI = DeclSVal.getAs<nonloc::ConcreteInt>()) + return &DeclCI->getValue(); + } + } + + return {}; +} + //===----------------------------------------------------------------------===// // Definitions for bug reporter visitors. //===----------------------------------------------------------------------===// @@ -1846,30 +1863,36 @@ ConditionBRVisitor::VisitNode(const ExplodedNode *N, std::shared_ptr<PathDiagnosticPiece> ConditionBRVisitor::VisitNodeImpl(const ExplodedNode *N, BugReporterContext &BRC, BugReport &BR) { - ProgramPoint progPoint = N->getLocation(); + ProgramPoint ProgPoint = N->getLocation(); + const std::pair<const ProgramPointTag *, const ProgramPointTag *> &Tags = + ExprEngine::geteagerlyAssumeBinOpBifurcationTags(); // If an assumption was made on a branch, it should be caught // here by looking at the state transition. - if (Optional<BlockEdge> BE = progPoint.getAs<BlockEdge>()) { - const CFGBlock *srcBlk = BE->getSrc(); - if (const Stmt *term = srcBlk->getTerminatorStmt()) - return VisitTerminator(term, N, srcBlk, BE->getDst(), BR, BRC); + if (Optional<BlockEdge> BE = ProgPoint.getAs<BlockEdge>()) { + const CFGBlock *SrcBlock = BE->getSrc(); + if (const Stmt *Term = SrcBlock->getTerminatorStmt()) { + // If the tag of the previous node is 'Eagerly Assume...' the current + // 'BlockEdge' has the same constraint information. We do not want to + // report the value as it is just an assumption on the predecessor node + // which will be caught in the next VisitNode() iteration as a 'PostStmt'. + const ProgramPointTag *PreviousNodeTag = + N->getFirstPred()->getLocation().getTag(); + if (PreviousNodeTag == Tags.first || PreviousNodeTag == Tags.second) + return nullptr; + + return VisitTerminator(Term, N, SrcBlock, BE->getDst(), BR, BRC); + } return nullptr; } - if (Optional<PostStmt> PS = progPoint.getAs<PostStmt>()) { - const std::pair<const ProgramPointTag *, const ProgramPointTag *> &tags = - ExprEngine::geteagerlyAssumeBinOpBifurcationTags(); - - const ProgramPointTag *tag = PS->getTag(); - if (tag == tags.first) - return VisitTrueTest(cast<Expr>(PS->getStmt()), true, - BRC, BR, N); - if (tag == tags.second) - return VisitTrueTest(cast<Expr>(PS->getStmt()), false, - BRC, BR, N); + if (Optional<PostStmt> PS = ProgPoint.getAs<PostStmt>()) { + const ProgramPointTag *CurrentNodeTag = PS->getTag(); + if (CurrentNodeTag != Tags.first && CurrentNodeTag != Tags.second) + return nullptr; - return nullptr; + bool TookTrue = CurrentNodeTag == Tags.first; + return VisitTrueTest(cast<Expr>(PS->getStmt()), BRC, BR, N, TookTrue); } return nullptr; @@ -1928,30 +1951,30 @@ std::shared_ptr<PathDiagnosticPiece> ConditionBRVisitor::VisitTerminator( assert(Cond); assert(srcBlk->succ_size() == 2); - const bool tookTrue = *(srcBlk->succ_begin()) == dstBlk; - return VisitTrueTest(Cond, tookTrue, BRC, R, N); + const bool TookTrue = *(srcBlk->succ_begin()) == dstBlk; + return VisitTrueTest(Cond, BRC, R, N, TookTrue); } std::shared_ptr<PathDiagnosticPiece> -ConditionBRVisitor::VisitTrueTest(const Expr *Cond, bool tookTrue, - BugReporterContext &BRC, BugReport &R, - const ExplodedNode *N) { +ConditionBRVisitor::VisitTrueTest(const Expr *Cond, BugReporterContext &BRC, + BugReport &R, const ExplodedNode *N, + bool TookTrue) { ProgramStateRef CurrentState = N->getState(); - ProgramStateRef PreviousState = N->getFirstPred()->getState(); + ProgramStateRef PrevState = N->getFirstPred()->getState(); const LocationContext *LCtx = N->getLocationContext(); // If the constraint information is changed between the current and the // previous program state we assuming the newly seen constraint information. // If we cannot evaluate the condition (and the constraints are the same) // the analyzer has no information about the value and just assuming it. - if (BRC.getStateManager().haveEqualConstraints(CurrentState, PreviousState) && - CurrentState->getSVal(Cond, LCtx).isValid()) - return nullptr; + bool IsAssuming = + !BRC.getStateManager().haveEqualConstraints(CurrentState, PrevState) || + CurrentState->getSVal(Cond, LCtx).isUnknownOrUndef(); // These will be modified in code below, but we need to preserve the original // values in case we want to throw the generic message. const Expr *CondTmp = Cond; - bool tookTrueTmp = tookTrue; + bool TookTrueTmp = TookTrue; while (true) { CondTmp = CondTmp->IgnoreParenCasts(); @@ -1960,18 +1983,18 @@ ConditionBRVisitor::VisitTrueTest(const Expr *Cond, bool tookTrue, break; case Stmt::BinaryOperatorClass: if (auto P = VisitTrueTest(Cond, cast<BinaryOperator>(CondTmp), - tookTrueTmp, BRC, R, N)) + BRC, R, N, TookTrueTmp, IsAssuming)) return P; break; case Stmt::DeclRefExprClass: if (auto P = VisitTrueTest(Cond, cast<DeclRefExpr>(CondTmp), - tookTrueTmp, BRC, R, N)) + BRC, R, N, TookTrueTmp, IsAssuming)) return P; break; case Stmt::UnaryOperatorClass: { const auto *UO = cast<UnaryOperator>(CondTmp); if (UO->getOpcode() == UO_LNot) { - tookTrueTmp = !tookTrueTmp; + TookTrueTmp = !TookTrueTmp; CondTmp = UO->getSubExpr(); continue; } @@ -1983,12 +2006,17 @@ ConditionBRVisitor::VisitTrueTest(const Expr *Cond, bool tookTrue, // Condition too complex to explain? Just say something so that the user // knew we've made some path decision at this point. + // If it is too complex and we know the evaluation of the condition do not + // repeat the note from 'BugReporter.cpp' + if (!IsAssuming) + return nullptr; + PathDiagnosticLocation Loc(Cond, BRC.getSourceManager(), LCtx); if (!Loc.isValid() || !Loc.asLocation().isValid()) return nullptr; return std::make_shared<PathDiagnosticEventPiece>( - Loc, tookTrue ? GenericTrueMessage : GenericFalseMessage); + Loc, TookTrue ? GenericTrueMessage : GenericFalseMessage); } bool ConditionBRVisitor::patternMatch(const Expr *Ex, @@ -2066,10 +2094,9 @@ bool ConditionBRVisitor::patternMatch(const Expr *Ex, return false; } -std::shared_ptr<PathDiagnosticPiece> -ConditionBRVisitor::VisitTrueTest(const Expr *Cond, const BinaryOperator *BExpr, - const bool tookTrue, BugReporterContext &BRC, - BugReport &R, const ExplodedNode *N) { +std::shared_ptr<PathDiagnosticPiece> ConditionBRVisitor::VisitTrueTest( + const Expr *Cond, const BinaryOperator *BExpr, BugReporterContext &BRC, + BugReport &R, const ExplodedNode *N, bool TookTrue, bool IsAssuming) { bool shouldInvert = false; Optional<bool> shouldPrune; @@ -2089,8 +2116,8 @@ ConditionBRVisitor::VisitTrueTest(const Expr *Cond, const BinaryOperator *BExpr, if (BinaryOperator::isAssignmentOp(Op)) { // For assignment operators, all that we care about is that the LHS // evaluates to "true" or "false". - return VisitConditionVariable(LhsString, BExpr->getLHS(), tookTrue, - BRC, R, N); + return VisitConditionVariable(LhsString, BExpr->getLHS(), BRC, R, N, + TookTrue); } // For non-assignment operations, we require that we can understand @@ -2102,7 +2129,8 @@ ConditionBRVisitor::VisitTrueTest(const Expr *Cond, const BinaryOperator *BExpr, // Should we invert the strings if the LHS is not a variable name? SmallString<256> buf; llvm::raw_svector_ostream Out(buf); - Out << "Assuming " << (shouldInvert ? RhsString : LhsString) << " is "; + Out << (IsAssuming ? "Assuming " : "") + << (shouldInvert ? RhsString : LhsString) << " is "; // Do we need to invert the opcode? if (shouldInvert) @@ -2114,7 +2142,7 @@ ConditionBRVisitor::VisitTrueTest(const Expr *Cond, const BinaryOperator *BExpr, case BO_GE: Op = BO_LE; break; } - if (!tookTrue) + if (!TookTrue) switch (Op) { case BO_EQ: Op = BO_NE; break; case BO_NE: Op = BO_EQ; break; @@ -2141,6 +2169,11 @@ ConditionBRVisitor::VisitTrueTest(const Expr *Cond, const BinaryOperator *BExpr, Out << (shouldInvert ? LhsString : RhsString); const LocationContext *LCtx = N->getLocationContext(); PathDiagnosticLocation Loc(Cond, BRC.getSourceManager(), LCtx); + + // If we know the value create a pop-up note. + if (!IsAssuming) + return std::make_shared<PathDiagnosticPopUpPiece>(Loc, Out.str()); + auto event = std::make_shared<PathDiagnosticEventPiece>(Loc, Out.str()); if (shouldPrune.hasValue()) event->setPrunable(shouldPrune.getValue()); @@ -2148,8 +2181,8 @@ ConditionBRVisitor::VisitTrueTest(const Expr *Cond, const BinaryOperator *BExpr, } std::shared_ptr<PathDiagnosticPiece> ConditionBRVisitor::VisitConditionVariable( - StringRef LhsString, const Expr *CondVarExpr, const bool tookTrue, - BugReporterContext &BRC, BugReport &report, const ExplodedNode *N) { + StringRef LhsString, const Expr *CondVarExpr, BugReporterContext &BRC, + BugReport &report, const ExplodedNode *N, bool TookTrue) { // FIXME: If there's already a constraint tracker for this variable, // we shouldn't emit anything here (c.f. the double note in // test/Analysis/inlining/path-notes.c) @@ -2160,13 +2193,13 @@ std::shared_ptr<PathDiagnosticPiece> ConditionBRVisitor::VisitConditionVariable( QualType Ty = CondVarExpr->getType(); if (Ty->isPointerType()) - Out << (tookTrue ? "not null" : "null"); + Out << (TookTrue ? "not null" : "null"); else if (Ty->isObjCObjectPointerType()) - Out << (tookTrue ? "not nil" : "nil"); + Out << (TookTrue ? "not nil" : "nil"); else if (Ty->isBooleanType()) - Out << (tookTrue ? "true" : "false"); + Out << (TookTrue ? "true" : "false"); else if (Ty->isIntegralOrEnumerationType()) - Out << (tookTrue ? "non-zero" : "zero"); + Out << (TookTrue ? "non-zero" : "zero"); else return nullptr; @@ -2187,34 +2220,44 @@ std::shared_ptr<PathDiagnosticPiece> ConditionBRVisitor::VisitConditionVariable( return event; } -std::shared_ptr<PathDiagnosticPiece> -ConditionBRVisitor::VisitTrueTest(const Expr *Cond, const DeclRefExpr *DR, - const bool tookTrue, BugReporterContext &BRC, - BugReport &report, const ExplodedNode *N) { - const auto *VD = dyn_cast<VarDecl>(DR->getDecl()); +std::shared_ptr<PathDiagnosticPiece> ConditionBRVisitor::VisitTrueTest( + const Expr *Cond, const DeclRefExpr *DRE, BugReporterContext &BRC, + BugReport &report, const ExplodedNode *N, bool TookTrue, bool IsAssuming) { + const auto *VD = dyn_cast<VarDecl>(DRE->getDecl()); if (!VD) return nullptr; SmallString<256> Buf; llvm::raw_svector_ostream Out(Buf); - Out << "Assuming '" << VD->getDeclName() << "' is "; + Out << (IsAssuming ? "Assuming '" : "'") << VD->getDeclName() << "' is "; - QualType VDTy = VD->getType(); + QualType Ty = VD->getType(); - if (VDTy->isPointerType()) - Out << (tookTrue ? "non-null" : "null"); - else if (VDTy->isObjCObjectPointerType()) - Out << (tookTrue ? "non-nil" : "nil"); - else if (VDTy->isScalarType()) - Out << (tookTrue ? "not equal to 0" : "0"); - else + if (Ty->isPointerType()) + Out << (TookTrue ? "non-null" : "null"); + else if (Ty->isObjCObjectPointerType()) + Out << (TookTrue ? "non-nil" : "nil"); + else if (Ty->isScalarType()) { + Optional<const llvm::APSInt *> IntValue; + if (!IsAssuming) + IntValue = getConcreteIntegerValue(DRE, N); + + if (IsAssuming || !IntValue.hasValue()) + Out << (TookTrue ? "not equal to 0" : "0"); + else + Out << *IntValue.getValue(); + } else return nullptr; const LocationContext *LCtx = N->getLocationContext(); PathDiagnosticLocation Loc(Cond, BRC.getSourceManager(), LCtx); - auto event = std::make_shared<PathDiagnosticEventPiece>(Loc, Out.str()); + // If we know the value create a pop-up note. + if (!IsAssuming) + return std::make_shared<PathDiagnosticPopUpPiece>(Loc, Out.str()); + + auto event = std::make_shared<PathDiagnosticEventPiece>(Loc, Out.str()); const ProgramState *state = N->getState().get(); if (const MemRegion *R = state->getLValue(VD, LCtx).getAsRegion()) { if (report.isInteresting(R)) diff --git a/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist b/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist index d74d9fc7c67..21204b0d8ae 100644 --- a/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist +++ b/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist @@ -93,6 +93,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>9</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>9</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>9</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>9</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>9</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'p' is non-null</string> + <key>message</key> + <string>'p' is non-null</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>9</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>9</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>11</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> diff --git a/clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist b/clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist index 9afb8055793..5be7d0adb96 100644 --- a/clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist +++ b/clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist @@ -161,6 +161,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'y' is not equal to 2</string> + <key>message</key> + <string>'y' is not equal to 2</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>13</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -423,6 +485,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'y' is equal to 2</string> + <key>message</key> + <string>'y' is equal to 2</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>11</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>12</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> @@ -668,6 +792,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>32</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>32</integer> + <key>col</key><integer>10</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>32</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>32</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>32</integer> + <key>col</key><integer>10</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'fail' is 1</string> + <key>message</key> + <string>'fail' is 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>32</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>32</integer> + <key>col</key><integer>10</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>33</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> diff --git a/clang/test/Analysis/Inputs/expected-plists/edges-new.mm.plist b/clang/test/Analysis/Inputs/expected-plists/edges-new.mm.plist index 7592d2a5043..4eca510c3f0 100644 --- a/clang/test/Analysis/Inputs/expected-plists/edges-new.mm.plist +++ b/clang/test/Analysis/Inputs/expected-plists/edges-new.mm.plist @@ -2710,6 +2710,34 @@ </array> </dict> <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>13</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'i' is not equal to 1</string> + <key>message</key> + <string>'i' is not equal to 1</string> + </dict> + <dict> <key>kind</key><string>control</string> <key>edges</key> <array> @@ -2890,6 +2918,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>13</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'i' is equal to 1</string> + <key>message</key> + <string>'i' is equal to 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>146</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>147</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -3808,6 +3898,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'i' is equal to 0</string> + <key>message</key> + <string>'i' is equal to 0</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>179</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> @@ -4002,6 +4154,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'i' is not equal to 0</string> + <key>message</key> + <string>'i' is not equal to 0</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>178</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>181</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -4036,6 +4250,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>181</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>181</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>181</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>181</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>181</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'i' is equal to 1</string> + <key>message</key> + <string>'i' is equal to 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>181</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>181</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>183</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> @@ -7807,6 +8083,34 @@ </array> </dict> <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>267</integer> + <key>col</key><integer>18</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>267</integer> + <key>col</key><integer>18</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>267</integer> + <key>col</key><integer>22</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'coin' is 0</string> + <key>message</key> + <string>'coin' is 0</string> + </dict> + <dict> <key>kind</key><string>control</string> <key>edges</key> <array> @@ -8659,6 +8963,34 @@ </array> </dict> <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>285</integer> + <key>col</key><integer>12</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>285</integer> + <key>col</key><integer>12</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>285</integer> + <key>col</key><integer>12</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'z' is 0</string> + <key>message</key> + <string>'z' is 0</string> + </dict> + <dict> <key>kind</key><string>control</string> <key>edges</key> <array> @@ -9000,6 +9332,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>294</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>294</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>294</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>294</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>294</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'y' is null</string> + <key>message</key> + <string>'y' is null</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>294</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>294</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>297</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> @@ -11588,6 +11982,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'first' is 1</string> + <key>message</key> + <string>'first' is 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>459</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -11787,6 +12243,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'first' is 0</string> + <key>message</key> + <string>'first' is 0</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>458</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> @@ -12052,6 +12570,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'first' is 1</string> + <key>message</key> + <string>'first' is 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>459</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -12547,6 +13127,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'first' is 1</string> + <key>message</key> + <string>'first' is 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>459</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -13109,6 +13751,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'first' is 1</string> + <key>message</key> + <string>'first' is 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>459</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -14590,6 +15294,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'first' is 1</string> + <key>message</key> + <string>'first' is 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>459</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -16198,6 +16964,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'first' is 1</string> + <key>message</key> + <string>'first' is 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>459</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -18031,6 +18859,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'first' is 1</string> + <key>message</key> + <string>'first' is 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>457</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>459</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> diff --git a/clang/test/Analysis/Inputs/expected-plists/inline-plist.c.plist b/clang/test/Analysis/Inputs/expected-plists/inline-plist.c.plist index b6248158f15..1d64cd796ba 100644 --- a/clang/test/Analysis/Inputs/expected-plists/inline-plist.c.plist +++ b/clang/test/Analysis/Inputs/expected-plists/inline-plist.c.plist @@ -518,12 +518,74 @@ <key>end</key> <array> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>45</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>45</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>45</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>45</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>45</integer> + <key>col</key><integer>12</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'p' is equal to null</string> + <key>message</key> + <string>'p' is equal to null</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>45</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>45</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> + <key>line</key><integer>48</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>48</integer> <key>col</key><integer>16</integer> <key>file</key><integer>0</integer> </dict> @@ -535,7 +597,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>48</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> @@ -543,12 +605,12 @@ <array> <array> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>48</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>48</integer> <key>col</key><integer>18</integer> <key>file</key><integer>0</integer> </dict> @@ -564,7 +626,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>48</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -572,12 +634,12 @@ <array> <array> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>48</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>47</integer> + <key>line</key><integer>48</integer> <key>col</key><integer>19</integer> <key>file</key><integer>0</integer> </dict> @@ -725,7 +787,7 @@ <integer>38</integer> <integer>39</integer> <integer>45</integer> - <integer>47</integer> + <integer>48</integer> </array> </dict> </dict> @@ -736,7 +798,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>59</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -744,12 +806,12 @@ <array> <array> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>59</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>59</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -769,12 +831,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>59</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>58</integer> + <key>line</key><integer>59</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -782,12 +844,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>60</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>60</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -799,7 +861,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>60</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -807,12 +869,12 @@ <array> <array> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>60</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>61</integer> + <key>line</key><integer>62</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -828,7 +890,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>60</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -846,12 +908,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>60</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>59</integer> + <key>line</key><integer>60</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -859,12 +921,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -880,12 +942,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -893,12 +955,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -910,7 +972,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -918,12 +980,12 @@ <array> <array> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -944,7 +1006,7 @@ <key>issue_hash_content_of_line_in_context</key><string>a2e7504f29818834127c44ba841f4da8</string> <key>location</key> <dict> - <key>line</key><integer>60</integer> + <key>line</key><integer>61</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -952,10 +1014,10 @@ <dict> <key>0</key> <array> - <integer>57</integer> <integer>58</integer> <integer>59</integer> <integer>60</integer> + <integer>61</integer> </array> </dict> </dict> @@ -970,12 +1032,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -983,12 +1045,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> @@ -1000,7 +1062,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> @@ -1008,12 +1070,12 @@ <array> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>69</integer> + <key>line</key><integer>70</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1029,7 +1091,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> @@ -1047,12 +1109,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> @@ -1060,12 +1122,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> </dict> @@ -1077,7 +1139,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1085,12 +1147,12 @@ <array> <array> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -1110,12 +1172,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>67</integer> + <key>line</key><integer>68</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> </dict> @@ -1123,12 +1185,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>68</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>68</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -1140,7 +1202,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>68</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1148,12 +1210,12 @@ <array> <array> <dict> - <key>line</key><integer>68</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>68</integer> + <key>line</key><integer>69</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> @@ -1169,7 +1231,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> @@ -1177,12 +1239,12 @@ <array> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>69</integer> + <key>line</key><integer>70</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1202,12 +1264,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> @@ -1215,12 +1277,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1232,7 +1294,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1240,12 +1302,12 @@ <array> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -1265,12 +1327,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>66</integer> + <key>line</key><integer>67</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1278,12 +1340,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1299,12 +1361,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1312,12 +1374,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -1329,7 +1391,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -1337,12 +1399,12 @@ <array> <array> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -1366,7 +1428,7 @@ <key>issue_hash_function_offset</key><string>5</string> <key>location</key> <dict> - <key>line</key><integer>70</integer> + <key>line</key><integer>71</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -1374,11 +1436,11 @@ <dict> <key>0</key> <array> - <integer>65</integer> <integer>66</integer> <integer>67</integer> <integer>68</integer> - <integer>70</integer> + <integer>69</integer> + <integer>71</integer> </array> </dict> </dict> @@ -1393,12 +1455,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>74</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>74</integer> + <key>line</key><integer>75</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -1406,12 +1468,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1423,7 +1485,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1431,12 +1493,12 @@ <array> <array> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>77</integer> + <key>line</key><integer>78</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1452,7 +1514,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1470,12 +1532,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1483,12 +1545,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>76</integer> + <key>line</key><integer>77</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>76</integer> + <key>line</key><integer>77</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1500,7 +1562,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>76</integer> + <key>line</key><integer>77</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1508,12 +1570,12 @@ <array> <array> <dict> - <key>line</key><integer>76</integer> + <key>line</key><integer>77</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>76</integer> + <key>line</key><integer>77</integer> <key>col</key><integer>9</integer> <key>file</key><integer>0</integer> </dict> @@ -1529,7 +1591,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1537,12 +1599,12 @@ <array> <array> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>77</integer> + <key>line</key><integer>78</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1562,12 +1624,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>75</integer> + <key>line</key><integer>76</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1575,12 +1637,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1596,12 +1658,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1609,12 +1671,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -1626,7 +1688,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -1634,12 +1696,12 @@ <array> <array> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -1663,7 +1725,7 @@ <key>issue_hash_function_offset</key><string>5</string> <key>location</key> <dict> - <key>line</key><integer>78</integer> + <key>line</key><integer>79</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -1671,11 +1733,11 @@ <dict> <key>0</key> <array> - <integer>73</integer> <integer>74</integer> <integer>75</integer> <integer>76</integer> - <integer>78</integer> + <integer>77</integer> + <integer>79</integer> </array> </dict> </dict> @@ -1690,12 +1752,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>82</integer> + <key>line</key><integer>83</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>82</integer> + <key>line</key><integer>83</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1703,12 +1765,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1720,7 +1782,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1728,12 +1790,12 @@ <array> <array> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>85</integer> + <key>line</key><integer>86</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> </dict> @@ -1749,7 +1811,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1767,12 +1829,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1780,12 +1842,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>85</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>85</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1797,7 +1859,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>85</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> @@ -1805,12 +1867,12 @@ <array> <array> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>85</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>84</integer> + <key>line</key><integer>85</integer> <key>col</key><integer>10</integer> <key>file</key><integer>0</integer> </dict> @@ -1826,7 +1888,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1834,12 +1896,12 @@ <array> <array> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>85</integer> + <key>line</key><integer>86</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> </dict> @@ -1859,12 +1921,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>84</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1872,12 +1934,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1893,12 +1955,12 @@ <key>start</key> <array> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1906,12 +1968,12 @@ <key>end</key> <array> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -1923,7 +1985,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -1931,12 +1993,12 @@ <array> <array> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> @@ -1960,7 +2022,7 @@ <key>issue_hash_function_offset</key><string>5</string> <key>location</key> <dict> - <key>line</key><integer>86</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -1968,12 +2030,12 @@ <dict> <key>0</key> <array> - <integer>81</integer> <integer>82</integer> <integer>83</integer> <integer>84</integer> <integer>85</integer> <integer>86</integer> + <integer>87</integer> </array> </dict> </dict> diff --git a/clang/test/Analysis/Inputs/expected-plists/objc-radar17039661.m.plist b/clang/test/Analysis/Inputs/expected-plists/objc-radar17039661.m.plist index a5735a97c49..926f8274264 100644 --- a/clang/test/Analysis/Inputs/expected-plists/objc-radar17039661.m.plist +++ b/clang/test/Analysis/Inputs/expected-plists/objc-radar17039661.m.plist @@ -805,6 +805,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>38</integer> + <key>col</key><integer>11</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>38</integer> + <key>col</key><integer>20</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>38</integer> + <key>col</key><integer>11</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>38</integer> + <key>col</key><integer>11</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>38</integer> + <key>col</key><integer>37</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'traitValue' is equal to 'newTraitValue'</string> + <key>message</key> + <string>'traitValue' is equal to 'newTraitValue'</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>38</integer> + <key>col</key><integer>11</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>38</integer> + <key>col</key><integer>20</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>41</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> diff --git a/clang/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist b/clang/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist index 3a1ad5b778b..259ce77aba7 100644 --- a/clang/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist +++ b/clang/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist @@ -5207,6 +5207,62 @@ </array> </dict> <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>418</integer> + <key>col</key><integer>3</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>418</integer> + <key>col</key><integer>3</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>418</integer> + <key>col</key><integer>27</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'A' is >= 0</string> + <key>message</key> + <string>'A' is >= 0</string> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>418</integer> + <key>col</key><integer>3</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>418</integer> + <key>col</key><integer>3</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>418</integer> + <key>col</key><integer>27</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'B' is >= 0</string> + <key>message</key> + <string>'B' is >= 0</string> + </dict> + <dict> <key>kind</key><string>event</string> <key>location</key> <dict> diff --git a/clang/test/Analysis/Inputs/expected-plists/plist-macros.cpp.plist b/clang/test/Analysis/Inputs/expected-plists/plist-macros.cpp.plist index 996ab0a7333..2cc1604ca88 100644 --- a/clang/test/Analysis/Inputs/expected-plists/plist-macros.cpp.plist +++ b/clang/test/Analysis/Inputs/expected-plists/plist-macros.cpp.plist @@ -1365,6 +1365,34 @@ </array> </dict> <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>69</integer> + <key>col</key><integer>3</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>69</integer> + <key>col</key><integer>3</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>69</integer> + <key>col</key><integer>16</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'p' is null</string> + <key>message</key> + <string>'p' is null</string> + </dict> + <dict> <key>kind</key><string>event</string> <key>location</key> <dict> @@ -1525,7 +1553,7 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1533,12 +1561,12 @@ <array> <array> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> @@ -1546,15 +1574,15 @@ </array> <key>depth</key><integer>0</integer> <key>extended_message</key> - <string>Passing null pointer value via 1st parameter 'a'</string> + <string>Passing value via 1st parameter 'a'</string> <key>message</key> - <string>Passing null pointer value via 1st parameter 'a'</string> + <string>Passing value via 1st parameter 'a'</string> </dict> <dict> <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -1562,12 +1590,12 @@ <array> <array> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>83</integer> + <key>line</key><integer>87</integer> <key>col</key><integer>12</integer> <key>file</key><integer>0</integer> </dict> @@ -1589,9 +1617,9 @@ </dict> <key>depth</key><integer>1</integer> <key>extended_message</key> - <string>Entered call from 'test1'</string> + <string>Entered call from 'test2'</string> <key>message</key> - <string>Entered call from 'test1'</string> + <string>Entered call from 'test2'</string> </dict> <dict> <key>kind</key><string>control</string> @@ -1648,6 +1676,69 @@ <key>end</key> <array> <dict> + <key>line</key><integer>77</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>77</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>event</string> + <key>location</key> + <dict> + <key>line</key><integer>77</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>77</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>77</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>depth</key><integer>1</integer> + <key>extended_message</key> + <string>Assuming 'a' is null</string> + <key>message</key> + <string>Assuming 'a' is null</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>77</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>77</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>79</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> @@ -1747,8 +1838,8 @@ <integer>76</integer> <integer>77</integer> <integer>79</integer> - <integer>82</integer> - <integer>83</integer> + <integer>86</integer> + <integer>87</integer> </array> </dict> </dict> diff --git a/clang/test/Analysis/Inputs/expected-plists/plist-output.m.plist b/clang/test/Analysis/Inputs/expected-plists/plist-output.m.plist index fb07a574b0e..5b1de9121f3 100644 --- a/clang/test/Analysis/Inputs/expected-plists/plist-output.m.plist +++ b/clang/test/Analysis/Inputs/expected-plists/plist-output.m.plist @@ -2496,6 +2496,34 @@ </array> </dict> <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>13</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'i' is not equal to 1</string> + <key>message</key> + <string>'i' is not equal to 1</string> + </dict> + <dict> <key>kind</key><string>control</string> <key>edges</key> <array> @@ -2676,6 +2704,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>13</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'i' is equal to 1</string> + <key>message</key> + <string>'i' is equal to 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>96</integer> + <key>col</key><integer>8</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>97</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -3447,6 +3537,34 @@ </array> </dict> <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'i' is not equal to 1</string> + <key>message</key> + <string>'i' is not equal to 1</string> + </dict> + <dict> <key>kind</key><string>control</string> <key>edges</key> <array> @@ -3627,6 +3745,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>14</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'i' is equal to 1</string> + <key>message</key> + <string>'i' is equal to 1</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>127</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>128</integer> <key>col</key><integer>7</integer> <key>file</key><integer>0</integer> diff --git a/clang/test/Analysis/Inputs/expected-plists/retain-release.m.objc.plist b/clang/test/Analysis/Inputs/expected-plists/retain-release.m.objc.plist index b9389f3ce71..3b3bce10844 100644 --- a/clang/test/Analysis/Inputs/expected-plists/retain-release.m.objc.plist +++ b/clang/test/Analysis/Inputs/expected-plists/retain-release.m.objc.plist @@ -9571,6 +9571,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'name' is non-nil</string> + <key>message</key> + <string>'name' is non-nil</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>746</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -10098,6 +10160,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'name' is non-nil</string> + <key>message</key> + <string>'name' is non-nil</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>746</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> diff --git a/clang/test/Analysis/Inputs/expected-plists/retain-release.m.objcpp.plist b/clang/test/Analysis/Inputs/expected-plists/retain-release.m.objcpp.plist index 688fc27953a..539b33e7c63 100644 --- a/clang/test/Analysis/Inputs/expected-plists/retain-release.m.objcpp.plist +++ b/clang/test/Analysis/Inputs/expected-plists/retain-release.m.objcpp.plist @@ -9571,6 +9571,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'name' is non-nil</string> + <key>message</key> + <string>'name' is non-nil</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>746</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> @@ -10098,6 +10160,68 @@ <key>end</key> <array> <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </dict> + </array> + </dict> + <dict> + <key>kind</key><string>pop-up</string> + <key>location</key> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>extended_message</key> + <string>'name' is non-nil</string> + <key>message</key> + <string>'name' is non-nil</string> + </dict> + <dict> + <key>kind</key><string>control</string> + <key>edges</key> + <array> + <dict> + <key>start</key> + <array> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>6</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>745</integer> + <key>col</key><integer>9</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> <key>line</key><integer>746</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> diff --git a/clang/test/Analysis/NewDelete-path-notes.cpp b/clang/test/Analysis/NewDelete-path-notes.cpp index 2195b9d42a4..70fd973facf 100644 --- a/clang/test/Analysis/NewDelete-path-notes.cpp +++ b/clang/test/Analysis/NewDelete-path-notes.cpp @@ -6,8 +6,8 @@ void test() { int *p = new int; // expected-note@-1 {{Memory is allocated}} - if (p) - // expected-note@-1 {{Taking true branch}} + if (p) // expected-note {{'p' is non-null}} + // expected-note@-1 {{Taking true branch}} delete p; // expected-note@-1 {{Memory is released}} diff --git a/clang/test/Analysis/diagnostics/no-store-func-path-notes.c b/clang/test/Analysis/diagnostics/no-store-func-path-notes.c index c0208214cc3..fd0a90e85e2 100644 --- a/clang/test/Analysis/diagnostics/no-store-func-path-notes.c +++ b/clang/test/Analysis/diagnostics/no-store-func-path-notes.c @@ -5,7 +5,8 @@ typedef __typeof(sizeof(int)) size_t; void *memset(void *__s, int __c, size_t __n); int initializer1(int *p, int x) { - if (x) { // expected-note{{Taking false branch}} + if (x) { // expected-note{{'x' is 0}} + // expected-note@-1{{Taking false branch}} *p = 1; return 0; } else { @@ -30,7 +31,8 @@ int param_initialized_properly() { static int global; int initializer2(int **p, int x) { - if (x) { // expected-note{{Taking false branch}} + if (x) { // expected-note{{'x' is 0}} + // expected-note@-1{{Taking false branch}} *p = &global; return 0; } else { @@ -47,7 +49,8 @@ int param_not_written_into_by_func() { } void initializer3(int *p, int param) { - if (param) // expected-note{{Taking false branch}} + if (param) // expected-note{{'param' is 0}} + // expected-note@-1{{Taking false branch}} *p = 0; } // expected-note{{Returning without writing to '*p'}} @@ -60,12 +63,14 @@ int param_written_into_by_void_func() { } void initializer4(int *p, int param) { - if (param) // expected-note{{Taking false branch}} + if (param) // expected-note{{'param' is 0}} + // expected-note@-1{{Taking false branch}} *p = 0; } // expected-note{{Returning without writing to '*p'}} void initializer5(int *p, int param) { - if (!param) // expected-note{{Taking false branch}} + if (!param) // expected-note{{'param' is 1}} + // expected-note@-1{{Taking false branch}} *p = 0; } // expected-note{{Returning without writing to '*p'}} @@ -95,7 +100,8 @@ typedef struct { } S; int initializer7(S *s, int param) { - if (param) { // expected-note{{Taking false branch}} + if (param) { // expected-note{{'param' is 0}} + // expected-note@-1{{Taking false branch}} s->x = 0; return 0; } diff --git a/clang/test/Analysis/diagnostics/no-store-func-path-notes.cpp b/clang/test/Analysis/diagnostics/no-store-func-path-notes.cpp index 587c08fae13..39b7dd9e492 100644 --- a/clang/test/Analysis/diagnostics/no-store-func-path-notes.cpp +++ b/clang/test/Analysis/diagnostics/no-store-func-path-notes.cpp @@ -1,7 +1,8 @@ // RUN: %clang_analyze_cc1 -x c++ -std=c++14 -analyzer-checker=core -analyzer-output=text -verify %s int initializer1(int &p, int x) { - if (x) { // expected-note{{Taking false branch}} + if (x) { // expected-note{{'x' is 0}} + // expected-note@-1{{Taking false branch}} p = 1; return 0; } else { @@ -19,7 +20,8 @@ int param_not_initialized_by_func() { struct S { int initialize(int *p, int param) { - if (param) { //expected-note{{Taking false branch}} + if (param) { // expected-note{{'param' is 0}} + // expected-note@-1{{Taking false branch}} *p = 1; return 1; } diff --git a/clang/test/Analysis/diagnostics/no-store-func-path-notes.m b/clang/test/Analysis/diagnostics/no-store-func-path-notes.m index c0aa5144e76..0136389efe6 100644 --- a/clang/test/Analysis/diagnostics/no-store-func-path-notes.m +++ b/clang/test/Analysis/diagnostics/no-store-func-path-notes.m @@ -10,7 +10,8 @@ extern int coin(); @implementation I - (int)initVar:(int *)var param:(int)param { - if (param) { // expected-note{{Taking false branch}} + if (param) { // expected-note{{'param' is 0}} + // expected-note@-1{{Taking false branch}} *var = 1; return 0; } @@ -22,14 +23,16 @@ int foo(I *i) { int x; //expected-note{{'x' declared without an initial value}} int out = [i initVar:&x param:0]; //expected-note{{Calling 'initVar:param:'}} //expected-note@-1{{Returning from 'initVar:param:'}} - if (out) // expected-note{{Taking true branch}} + if (out) //expected-note{{'out' is 1}} + //expected-note@-1{{Taking true branch}} return x; //expected-warning{{Undefined or garbage value returned to caller}} //expected-note@-1{{Undefined or garbage value returned to caller}} return 0; } int initializer1(int *p, int x) { - if (x) { // expected-note{{Taking false branch}} + if (x) { // expected-note{{'x' is 0}} + // expected-note@-1{{Taking false branch}} *p = 1; return 0; } else { diff --git a/clang/test/Analysis/inline-plist.c b/clang/test/Analysis/inline-plist.c index b3fb554da70..dbcca5c2f79 100644 --- a/clang/test/Analysis/inline-plist.c +++ b/clang/test/Analysis/inline-plist.c @@ -43,7 +43,8 @@ void bar(int *p) { } if (p == 0) { - // expected-note@-1 {{Taking true branch}} + // expected-note@-1 {{'p' is equal to null}} + // expected-note@-2 {{Taking true branch}} triggers_bug(p); // expected-note@-1 {{Passing null pointer value via 1st parameter 'p'}} // expected-note@-2 {{Calling 'triggers_bug'}} diff --git a/clang/test/Analysis/osobject-retain-release.cpp b/clang/test/Analysis/osobject-retain-release.cpp index 98b3e95abfd..9d7cd854422 100644 --- a/clang/test/Analysis/osobject-retain-release.cpp +++ b/clang/test/Analysis/osobject-retain-release.cpp @@ -498,7 +498,8 @@ unsigned int check_dynamic_cast_no_null_on_orig(OSObject *obj) { void check_dynamic_cast_null_branch(OSObject *obj) { OSArray *arr1 = OSArray::withCapacity(10); // expected-note{{Call to method 'OSArray::withCapacity' returns an OSObject}} OSArray *arr = OSDynamicCast(OSArray, obj); // expected-note{{Assuming dynamic cast returns null due to type mismatch}} - if (!arr) // expected-note{{Taking true branch}} + if (!arr) // expected-note{{'arr' is null}} + // expected-note@-1{{Taking true branch}} return; // expected-warning{{Potential leak of an object stored into 'arr1'}} // expected-note@-1{{Object leaked}} arr1->release(); diff --git a/clang/test/Analysis/use-after-move.cpp b/clang/test/Analysis/use-after-move.cpp index ac4222bc776..e58301df8b5 100644 --- a/clang/test/Analysis/use-after-move.cpp +++ b/clang/test/Analysis/use-after-move.cpp @@ -242,10 +242,12 @@ void reinitializationTest(int i) { } { A a; - if (i == 1) { // peaceful-note 2 {{Taking false branch}} + if (i == 1) { // peaceful-note 2 {{'i' is not equal to 1}} + // peaceful-note@-1 2 {{Taking false branch}} std::move(a); } - if (i == 2) { // peaceful-note 2 {{Taking false branch}} + if (i == 2) { // peaceful-note 2 {{'i' is not equal to 2}} + // peaceful-note@-1 2 {{Taking false branch}} a = A(); a.foo(); } @@ -276,7 +278,8 @@ void reinitializationTest(int i) { // peaceful-note@-1 {{Taking false branch}} a = A(); } - if (i > 5) { // peaceful-note {{Taking true branch}} + if (i > 5) { // peaceful-note {{'i' is > 5}} + // peaceful-note@-1 {{Taking true branch}} a.foo(); // peaceful-warning {{Method called on moved-from object 'a'}} // peaceful-note@-1 {{Method called on moved-from object 'a'}} } @@ -559,7 +562,9 @@ void differentBranchesTest(int i) { // Same thing, but with a ternary operator. { A a, b; - i > 0 ? (void)(b = std::move(a)) : a.bar(); // no-warning // peaceful-note {{'?' condition is true}} + i > 0 ? (void)(b = std::move(a)) : a.bar(); // no-warning + // peaceful-note@-1 {{'i' is > 0}} + // peaceful-note@-2 {{'?' condition is true}} } // A variation on the theme above. { diff --git a/clang/test/Analysis/virtualcall.cpp b/clang/test/Analysis/virtualcall.cpp index 1929abf6f0a..5847110c093 100644 --- a/clang/test/Analysis/virtualcall.cpp +++ b/clang/test/Analysis/virtualcall.cpp @@ -164,8 +164,10 @@ public: X(int i) { if (i > 0) { #if !PUREONLY - // expected-note-re@-2 {{{{^}}Taking true branch}} - // expected-note-re@-3 {{{{^}}Taking false branch}} + // expected-note-re@-2 {{{{^}}'i' is > 0}} + // expected-note-re@-3 {{{{^}}Taking true branch}} + // expected-note-re@-4 {{{{^}}'i' is <= 0}} + // expected-note-re@-5 {{{{^}}Taking false branch}} #endif X x(i - 1); #if !PUREONLY |