]> granicus.if.org Git - clang/commitdiff
[analyzer] Skip printing duplicate nodes, even if nodes have multiple predecessors...
authorGeorge Karpenkov <ekarpenkov@apple.com>
Sat, 15 Sep 2018 02:01:26 +0000 (02:01 +0000)
committerGeorge Karpenkov <ekarpenkov@apple.com>
Sat, 15 Sep 2018 02:01:26 +0000 (02:01 +0000)
Still generate a node, but leave the redundant field empty.

Differential Revision: https://reviews.llvm.org/D51821

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@342308 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Core/ExprEngine.cpp

index 638fc5de10f9cdcd7f8d8512fa4a23e98c7ad48e..a1fcd121311f6152beb4c702d02c1f8f9e6f12d2 100644 (file)
@@ -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();
   }
 };