]> granicus.if.org Git - clang/commitdiff
[analyzer] Stats: Add the stats about remove dead bindings, correct the
authorAnna Zaks <ganna@apple.com>
Tue, 28 Feb 2012 21:49:04 +0000 (21:49 +0000)
committerAnna Zaks <ganna@apple.com>
Tue, 28 Feb 2012 21:49:04 +0000 (21:49 +0000)
test.

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

lib/StaticAnalyzer/Core/ExprEngine.cpp
test/Analysis/stats.c

index 77b71decc5240f63c9dd6c79d32c6ca02de6bb3c..ffc0916ed1e7e5ebb9cc9d4acf89956bfed2b79a 100644 (file)
@@ -13,6 +13,8 @@
 //
 //===----------------------------------------------------------------------===//
 
+#define DEBUG_TYPE "ExprEngine"
+
 #include "clang/StaticAnalyzer/Core/CheckerManager.h"
 #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
@@ -27,6 +29,7 @@
 #include "clang/Basic/PrettyStackTrace.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/ADT/ImmutableList.h"
+#include "llvm/ADT/Statistic.h"
 
 #ifndef NDEBUG
 #include "llvm/Support/GraphWriter.h"
@@ -36,6 +39,11 @@ using namespace clang;
 using namespace ento;
 using llvm::APSInt;
 
+STATISTIC(NumRemoveDeadBindings,
+            "The # of times RemoveDeadBindings is called");
+STATISTIC(NumRemoveDeadBindingsSkipped,
+            "The # of times RemoveDeadBindings is skipped");
+
 //===----------------------------------------------------------------------===//
 // Utility functions.
 //===----------------------------------------------------------------------===//
@@ -261,6 +269,7 @@ void ExprEngine::ProcessStmt(const CFGStmt S,
   SymbolReaper SymReaper(LC, currentStmt, SymMgr, getStoreManager());
 
   if (shouldRemoveDeadBindings(AMgr, S, Pred, LC)) {
+    NumRemoveDeadBindings++;
     getCheckerManager().runCheckersForLiveSymbols(CleanedState, SymReaper);
 
     const StackFrameContext *SFC = LC->getCurrentStackFrame();
@@ -269,6 +278,8 @@ void ExprEngine::ProcessStmt(const CFGStmt S,
     // and the store. TODO: The function should just return new env and store,
     // not a new state.
     CleanedState = StateMgr.removeDeadBindings(CleanedState, SFC, SymReaper);
+  } else {
+    NumRemoveDeadBindingsSkipped++;
   }
 
   // Process any special transfer function for dead symbols.
index dbe11608ed84da72e5b3d3fc25c6e01530b76c5e..79cc7c3aea013366949aafb3e7cd7502d4981da9 100644 (file)
@@ -1,7 +1,7 @@
-// RUN: %clang_cc1 -analyze -analyzer-stats %s 2>&1 | FileCheck %s
-// XFAIL: *
+// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-stats %s > FileCheck %s
 
 void foo() {
-  ;
+  int x;
 }
 // CHECK: ... Statistics Collected ...
+// CHECK:The # of times RemoveDeadBindings is called