diff options
author | Ted Kremenek <kremenek@apple.com> | 2013-05-04 01:12:55 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2013-05-04 01:12:55 +0000 |
commit | cd389d8cc9abeffb1416b70dd58148e66e5d822b (patch) | |
tree | 9d073c6d5086bf55b187bad716d9e59ab4a00507 | |
parent | efa78d163214fd9e909ab2bf6911edfbc7a2b9df (diff) |
[analyzer;alternate edges] - add in events (loop iterations, etc)
These were being dropped due a transcription mistake from the original
algorithm.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181083 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/StaticAnalyzer/Core/BugReporter.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/StaticAnalyzer/Core/BugReporter.cpp b/lib/StaticAnalyzer/Core/BugReporter.cpp index 4606b2151d..1df4970f6e 100644 --- a/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -1595,6 +1595,12 @@ GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD, reversePropagateIntererstingSymbols(*PDB.getBugReport(), IE, N->getState().getPtr(), Ex, N->getLocationContext()); + + PathDiagnosticLocation L = + cleanUpLocation(PathDiagnosticLocation::createBegin(PS->getStmt(), SM, + LC), LC); + + addEdgeToPath(PD.getActivePath(), PrevLoc, L, LC); break; } @@ -1686,6 +1692,7 @@ GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD, p->setPrunable(true); addEdgeToPath(PD.getActivePath(), PrevLoc, p->getLocation(), LC); + PD.getActivePath().push_front(p); if (CS) { addEdgeToPath(PD.getActivePath(), PrevLoc, @@ -1706,12 +1713,13 @@ GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD, N), Term)) { - PathDiagnosticLocation L(Term, SM, PDB.LC); - PathDiagnosticEventPiece *PE = + PathDiagnosticLocation L(Term, SM, PDB.LC); + PathDiagnosticEventPiece *PE = new PathDiagnosticEventPiece(L, "Loop body executed 0 times"); - PE->setPrunable(true); - addEdgeToPath(PD.getActivePath(), PrevLoc, - PE->getLocation(), LC); + PE->setPrunable(true); + addEdgeToPath(PD.getActivePath(), PrevLoc, + PE->getLocation(), LC); + PD.getActivePath().push_front(PE); } } break; @@ -1722,12 +1730,12 @@ GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD, continue; // Add pieces from custom visitors. - BugReport *R = PDB.getBugReport(); for (ArrayRef<BugReporterVisitor *>::iterator I = visitors.begin(), E = visitors.end(); I != E; ++I) { - if (PathDiagnosticPiece *p = (*I)->VisitNode(N, NextNode, PDB, *R)) { + if (PathDiagnosticPiece *p = (*I)->VisitNode(N, NextNode, PDB, *report)) { addEdgeToPath(PD.getActivePath(), PrevLoc, p->getLocation(), LC); + PD.getActivePath().push_front(p); updateStackPiecesWithMessage(p, CallStack); } } |