[analyzer]scan-build: report the total number of steps analyzer performs
This would be useful to investigate performance issues. llvm-svn: 159038
This commit is contained in:
parent
e4b6d5e1c1
commit
7aa3687bb6
|
@ -11,6 +11,7 @@
|
|||
// which represent a path-sensitive, intra-procedural "exploded graph."
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#define DEBUG_TYPE "CoreEngine"
|
||||
|
||||
#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
|
||||
#include "clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h"
|
||||
|
@ -20,11 +21,15 @@
|
|||
#include "llvm/ADT/DenseSet.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include <vector>
|
||||
|
||||
using namespace clang;
|
||||
using namespace ento;
|
||||
|
||||
STATISTIC(NumNodesWithMoreThanTwoSucc,
|
||||
"The # of nodes with more than 2 successors.");
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Node auditing.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -170,6 +175,8 @@ void ExplodedNode::addPredecessor(ExplodedNode *V, ExplodedGraph &G) {
|
|||
assert (!V->isSink());
|
||||
Preds.addNode(V, G);
|
||||
V->Succs.addNode(this, G);
|
||||
if (V->Succs.size() == 3)
|
||||
NumNodesWithMoreThanTwoSucc++;
|
||||
#ifndef NDEBUG
|
||||
if (NodeAuditor) NodeAuditor->AddEdge(V, this);
|
||||
#endif
|
||||
|
|
|
@ -438,6 +438,9 @@ my $StoreModel = $ENV{'CCC_ANALYZER_STORE_MODEL'};
|
|||
# Get the constraints engine.
|
||||
my $ConstraintsModel = $ENV{'CCC_ANALYZER_CONSTRAINTS_MODEL'};
|
||||
|
||||
#Get the internal stats setting.
|
||||
my $InternalStats = $ENV{'CCC_ANALYZER_INTERNAL_STATS'};
|
||||
|
||||
# Get the output format.
|
||||
my $OutputFormat = $ENV{'CCC_ANALYZER_OUTPUT_FORMAT'};
|
||||
if (!defined $OutputFormat) { $OutputFormat = "html"; }
|
||||
|
@ -642,6 +645,10 @@ if ($Action eq 'compile' or $Action eq 'link') {
|
|||
if (defined $ConstraintsModel) {
|
||||
push @AnalyzeArgs, "-analyzer-constraints=$ConstraintsModel";
|
||||
}
|
||||
|
||||
if (defined $InternalStats) {
|
||||
push @AnalyzeArgs, "-analyzer-stats";
|
||||
}
|
||||
|
||||
if (defined $Analyses) {
|
||||
push @AnalyzeArgs, split '\s+', $Analyses;
|
||||
|
|
|
@ -1025,7 +1025,8 @@ ADVANCED OPTIONS:
|
|||
-maxloop N - specifiy the number of times a block can be visited before giving
|
||||
up. Default is 4. Increase for more comprehensive coverage at a
|
||||
cost of speed.
|
||||
|
||||
-internal-stats - Generate internal analyzer statistics.
|
||||
|
||||
CONTROLLING CHECKERS:
|
||||
|
||||
A default group of checkers are always run unless explicitly disabled.
|
||||
|
@ -1194,6 +1195,7 @@ my $ExitStatusFoundBugs = 0; # Exit status reflects whether bugs were found
|
|||
my @AnalysesToRun;
|
||||
my $StoreModel;
|
||||
my $ConstraintsModel;
|
||||
my $InternalStats;
|
||||
my $OutputFormat = "html";
|
||||
my $AnalyzerStats = 0;
|
||||
my $MaxLoop = 0;
|
||||
|
@ -1325,6 +1327,12 @@ while (@ARGV) {
|
|||
$ConstraintsModel = shift @ARGV;
|
||||
next;
|
||||
}
|
||||
|
||||
if ($arg eq "-internal-stats") {
|
||||
shift @ARGV;
|
||||
$InternalStats = 1;
|
||||
next;
|
||||
}
|
||||
|
||||
if ($arg eq "-plist") {
|
||||
shift @ARGV;
|
||||
|
@ -1442,6 +1450,9 @@ if (defined $StoreModel) {
|
|||
if (defined $ConstraintsModel) {
|
||||
$ENV{'CCC_ANALYZER_CONSTRAINTS_MODEL'} = $ConstraintsModel;
|
||||
}
|
||||
if (defined $InternalStats) {
|
||||
$ENV{'CCC_ANALYZER_INTERNAL_STATS'} = 1;
|
||||
}
|
||||
if (defined $OutputFormat) {
|
||||
$ENV{'CCC_ANALYZER_OUTPUT_FORMAT'} = $OutputFormat;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue