diff options
author | Anna Zaks <ganna@apple.com> | 2012-02-27 21:33:16 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2012-02-27 21:33:16 +0000 |
commit | b02865403112ce582af2a73ef4f142bffe8ea012 (patch) | |
tree | 0b275087e055a9b1db29dfe747b49e76965644d4 | |
parent | 84e6e5cd1a68c28ff0b118f02738d476ba63d357 (diff) | |
download | bcm5719-llvm-b02865403112ce582af2a73ef4f142bffe8ea012.tar.gz bcm5719-llvm-b02865403112ce582af2a73ef4f142bffe8ea012.zip |
[analyzer] Add -analyzer-stats, which hooks up LLVM stats tracking.
As in http://llvm.org/docs/ProgrammersManual.html#Statistic
llvm-svn: 151570
-rw-r--r-- | clang/include/clang/Driver/CC1Options.td | 2 | ||||
-rw-r--r-- | clang/include/clang/Frontend/AnalyzerOptions.h | 2 | ||||
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 1 | ||||
-rw-r--r-- | clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp | 3 | ||||
-rw-r--r-- | clang/test/Analysis/stats.c | 6 |
5 files changed, 14 insertions, 0 deletions
diff --git a/clang/include/clang/Driver/CC1Options.td b/clang/include/clang/Driver/CC1Options.td index b885288baeb..9789a85da7b 100644 --- a/clang/include/clang/Driver/CC1Options.td +++ b/clang/include/clang/Driver/CC1Options.td @@ -86,6 +86,8 @@ def analyzer_max_nodes : Separate<"-analyzer-max-nodes">, HelpText<"The maximum number of nodes the analyzer can generate (150000 default, 0 = no limit)">; def analyzer_max_loop : Separate<"-analyzer-max-loop">, HelpText<"The maximum number of times the analyzer will go through a loop">; +def analyzer_stats : Flag<"-analyzer-stats">, + HelpText<"Print internal analyzer statistics.">; def analyzer_checker : Separate<"-analyzer-checker">, HelpText<"Choose analyzer checkers to enable">; diff --git a/clang/include/clang/Frontend/AnalyzerOptions.h b/clang/include/clang/Frontend/AnalyzerOptions.h index 3565a51d075..66d0c377778 100644 --- a/clang/include/clang/Frontend/AnalyzerOptions.h +++ b/clang/include/clang/Frontend/AnalyzerOptions.h @@ -84,6 +84,7 @@ public: unsigned CFGAddImplicitDtors : 1; unsigned CFGAddInitializers : 1; unsigned EagerlyTrimEGraph : 1; + unsigned PrintStats : 1; public: AnalyzerOptions() { @@ -104,6 +105,7 @@ public: CFGAddImplicitDtors = 0; CFGAddInitializers = 0; EagerlyTrimEGraph = 0; + PrintStats = 0; } }; diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 862a6547f82..c46c52c7bdd 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1043,6 +1043,7 @@ static bool ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args, Opts.MaxLoop = Args.getLastArgIntValue(OPT_analyzer_max_loop, 4, Diags); Opts.EagerlyTrimEGraph = !Args.hasArg(OPT_analyzer_no_eagerly_trim_egraph); Opts.InlineCall = Args.hasArg(OPT_analyzer_inline_call); + Opts.PrintStats = Args.hasArg(OPT_analyzer_stats); Opts.CheckersControlList.clear(); for (arg_iterator it = Args.filtered_begin(OPT_analyzer_checker, diff --git a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp index 93c879ee96a..074ad23ce46 100644 --- a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -35,6 +35,7 @@ #include "llvm/Support/Path.h" #include "llvm/Support/Program.h" #include "llvm/ADT/OwningPtr.h" +#include "llvm/ADT/Statistic.h" using namespace clang; using namespace ento; @@ -157,6 +158,8 @@ public: Opts.UnoptimizedCFG, Opts.CFGAddImplicitDtors, Opts.CFGAddInitializers, Opts.EagerlyTrimEGraph)); + if (Opts.PrintStats) + llvm::EnableStatistics(); } virtual void HandleTranslationUnit(ASTContext &C); diff --git a/clang/test/Analysis/stats.c b/clang/test/Analysis/stats.c new file mode 100644 index 00000000000..004ed3f0d25 --- /dev/null +++ b/clang/test/Analysis/stats.c @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -analyze -analyzer-stats %s 2> FileCheck + +void foo() { + ; +} +// CHECK: ... Statistics Collected ... |