diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-24 01:00:23 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-24 01:00:23 +0000 |
| commit | 6252156da5066bd47f63f8bd40404d1f89909d32 (patch) | |
| tree | 743d1b59945b071890dc19b6bf5e9d3ff0d1399b /lib/StaticAnalyzer/Core/BugReporter.cpp | |
| parent | 461a67fa15370a9ec88f8f8a240bf7c123bb2029 (diff) | |
Diffstat (limited to 'lib/StaticAnalyzer/Core/BugReporter.cpp')
| -rw-r--r-- | lib/StaticAnalyzer/Core/BugReporter.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/StaticAnalyzer/Core/BugReporter.cpp b/lib/StaticAnalyzer/Core/BugReporter.cpp index 4a5d25fc5634..dc284888eb03 100644 --- a/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -885,8 +885,12 @@ static bool GenerateMinimalPathDiagnostic( if (NextNode) { // Add diagnostic pieces from custom visitors. BugReport *R = PDB.getBugReport(); + llvm::FoldingSet<PathDiagnosticPiece> DeduplicationSet; for (auto &V : visitors) { if (auto p = V->VisitNode(N, NextNode, PDB, *R)) { + if (DeduplicationSet.GetOrInsertNode(p.get()) != p.get()) + continue; + updateStackPiecesWithMessage(*p, CallStack); PD.getActivePath().push_front(std::move(p)); } @@ -1584,8 +1588,12 @@ static bool GenerateExtensivePathDiagnostic( // Add pieces from custom visitors. BugReport *R = PDB.getBugReport(); + llvm::FoldingSet<PathDiagnosticPiece> DeduplicationSet; for (auto &V : visitors) { if (auto p = V->VisitNode(N, NextNode, PDB, *R)) { + if (DeduplicationSet.GetOrInsertNode(p.get()) != p.get()) + continue; + const PathDiagnosticLocation &Loc = p->getLocation(); EB.addEdge(Loc, true); updateStackPiecesWithMessage(*p, CallStack); @@ -1879,8 +1887,12 @@ static bool GenerateAlternateExtensivePathDiagnostic( continue; // Add pieces from custom visitors. + llvm::FoldingSet<PathDiagnosticPiece> DeduplicationSet; for (auto &V : visitors) { if (auto p = V->VisitNode(N, NextNode, PDB, *report)) { + if (DeduplicationSet.GetOrInsertNode(p.get()) != p.get()) + continue; + addEdgeToPath(PD.getActivePath(), PrevLoc, p->getLocation(), PDB.LC); updateStackPiecesWithMessage(*p, CallStack); PD.getActivePath().push_front(std::move(p)); |
