]> granicus.if.org Git - clang/commitdiff
[analyzer] Optimize by not generating empty transitions in CheckerContext
authorAnna Zaks <ganna@apple.com>
Thu, 27 Oct 2011 00:59:32 +0000 (00:59 +0000)
committerAnna Zaks <ganna@apple.com>
Thu, 27 Oct 2011 00:59:32 +0000 (00:59 +0000)
Go not generate a new transition by addTransition methods if nothing changed.

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

include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h

index b1aad7f63d26b1005b402cd551cbae17eeefd76b..c3a00bd97aefb92c2ad3ce9e6342b9339b05d325 100644 (file)
@@ -110,7 +110,6 @@ public:
 
   /// \brief Generates a default transition (containing checker tag but no
   /// checker state changes).
-  // TODO: Can we remove this one? We always generate autotransitions.
   ExplodedNode *addTransition() {
     return addTransition(getState());
   }
@@ -148,6 +147,9 @@ private:
                                  ExplodedNode *P = 0,
                                  const ProgramPointTag *Tag = 0) {
     assert(State);
+    if (State == Pred->getState() && !Tag && !MarkAsSink)
+      return Pred;
+
     ExplodedNode *node = NB.generateNode(Tag ? Location.withTag(Tag) : Location,
                                         State,
                                         P ? P : Pred, MarkAsSink);