summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorGeorge Karpenkov <ekarpenkov@apple.com>2018-09-15 02:01:26 +0000
committerGeorge Karpenkov <ekarpenkov@apple.com>2018-09-15 02:01:26 +0000
commit40cbde9ce28af51a8a1124d3a6f6b1477a6efce8 (patch)
treee2045a834cf6a0e61f4f470882a4a5210704bd6e /clang
parentac9f7fb9a1c6508949aa57e88fe3a73ab4c4b645 (diff)
downloadbcm5719-llvm-40cbde9ce28af51a8a1124d3a6f6b1477a6efce8.tar.gz
bcm5719-llvm-40cbde9ce28af51a8a1124d3a6f6b1477a6efce8.zip
[analyzer] Skip printing duplicate nodes, even if nodes have multiple predecessors/successors
Still generate a node, but leave the redundant field empty. Differential Revision: https://reviews.llvm.org/D51821 llvm-svn: 342308
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/StaticAnalyzer/Core/ExprEngine.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
index 638fc5de10f..a1fcd121311 100644
--- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
@@ -3177,7 +3177,12 @@ struct DOTGraphTraits<ExplodedNode*> : public DefaultDOTGraphTraits {
<< ")"
<< " NodeID: " << N->getID(&Graph) << " (" << (const void *)N << ")\\|";
- State->printDOT(Out, N->getLocationContext());
+ bool SameAsAllPredecessors =
+ std::all_of(N->pred_begin(), N->pred_end(), [&](const ExplodedNode *P) {
+ return P->getState() == State;
+ });
+ if (!SameAsAllPredecessors)
+ State->printDOT(Out, N->getLocationContext());
return Out.str();
}
};
OpenPOWER on IntegriCloud