From: Anna Zaks Date: Mon, 27 Feb 2012 21:33:16 +0000 (+0000) Subject: [analyzer] Add -analyzer-stats, which hooks up LLVM stats tracking. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=81fb169f42769e02c7425b23885a261c025fd5e6;p=clang [analyzer] Add -analyzer-stats, which hooks up LLVM stats tracking. As in http://llvm.org/docs/ProgrammersManual.html#Statistic git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151570 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/CC1Options.td b/include/clang/Driver/CC1Options.td index b885288bae..9789a85da7 100644 --- a/include/clang/Driver/CC1Options.td +++ b/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/include/clang/Frontend/AnalyzerOptions.h b/include/clang/Frontend/AnalyzerOptions.h index 3565a51d07..66d0c37777 100644 --- a/include/clang/Frontend/AnalyzerOptions.h +++ b/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/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 862a6547f8..c46c52c7bd 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/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/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp index 93c879ee96..074ad23ce4 100644 --- a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ b/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/test/Analysis/stats.c b/test/Analysis/stats.c new file mode 100644 index 0000000000..004ed3f0d2 --- /dev/null +++ b/test/Analysis/stats.c @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -analyze -analyzer-stats %s 2> FileCheck + +void foo() { + ; +} +// CHECK: ... Statistics Collected ...