From 74c0d388e8c1feaf08856a7ec0149f3d77891921 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Sat, 4 May 2013 01:12:55 +0000 Subject: [PATCH] [analyzer;alternate edges] - add in events (loop iterations, etc) These were being dropped due a transcription mistake from the original algorithm. llvm-svn: 181083 --- clang/lib/StaticAnalyzer/Core/BugReporter.cpp | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/clang/lib/StaticAnalyzer/Core/BugReporter.cpp b/clang/lib/StaticAnalyzer/Core/BugReporter.cpp index 4606b2151db9..1df4970f6e4a 100644 --- a/clang/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/clang/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::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); } }