diff options
| author | Ted Kremenek <kremenek@apple.com> | 2009-11-13 01:15:47 +0000 | 
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2009-11-13 01:15:47 +0000 | 
| commit | aedb7434c8cdbca163d08af90ad09ecb02a19fcc (patch) | |
| tree | cb851561149bf8002c14ef14c8a238d1f72d4e35 /clang | |
| parent | 1e886ebe8ceb1d642456ce0e6ee4c81a0f689ce8 (diff) | |
| download | bcm5719-llvm-aedb7434c8cdbca163d08af90ad09ecb02a19fcc.tar.gz bcm5719-llvm-aedb7434c8cdbca163d08af90ad09ecb02a19fcc.zip | |
Add clang-cc option "-analyzer-experimental-checks" to enable experimental path-sensitive checks.  The idea is to separate "barely working" or "skunkworks" checks from ones that should always run.  Later we need more fine-grain checker control.
llvm-svn: 87053
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Analysis/LocalCheckers.h | 1 | ||||
| -rw-r--r-- | clang/include/clang/Frontend/AnalysisConsumer.h | 2 | ||||
| -rw-r--r-- | clang/lib/Analysis/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | clang/lib/Analysis/GRExprEngineExperimentalChecks.cpp | 23 | ||||
| -rw-r--r-- | clang/lib/Frontend/AnalysisConsumer.cpp | 4 | ||||
| -rw-r--r-- | clang/tools/clang-cc/Options.cpp | 13 | 
6 files changed, 39 insertions, 5 deletions
| diff --git a/clang/include/clang/Analysis/LocalCheckers.h b/clang/include/clang/Analysis/LocalCheckers.h index cd2d6b3ec70..5182d63b0dd 100644 --- a/clang/include/clang/Analysis/LocalCheckers.h +++ b/clang/include/clang/Analysis/LocalCheckers.h @@ -50,6 +50,7 @@ void CheckObjCInstMethSignature(const ObjCImplementationDecl *ID,  void CheckObjCUnusedIvar(const ObjCImplementationDecl *D, BugReporter& BR);  void RegisterAppleChecks(GRExprEngine& Eng, const Decl &D); +void RegisterExperimentalChecks(GRExprEngine &Eng);  void CheckSecuritySyntaxOnly(const Decl *D, BugReporter &BR); diff --git a/clang/include/clang/Frontend/AnalysisConsumer.h b/clang/include/clang/Frontend/AnalysisConsumer.h index d8fe9f33a9f..fb0baff0052 100644 --- a/clang/include/clang/Frontend/AnalysisConsumer.h +++ b/clang/include/clang/Frontend/AnalysisConsumer.h @@ -67,6 +67,7 @@ public:    unsigned TrimGraph : 1;    unsigned VisualizeEGDot : 1;    unsigned VisualizeEGUbi : 1; +  unsigned EnableExperimentalChecks : 1;  public:    AnalyzerOptions() { @@ -77,6 +78,7 @@ public:      TrimGraph = 0;      VisualizeEGDot = 0;      VisualizeEGUbi = 0; +    EnableExperimentalChecks = 0;    }  }; diff --git a/clang/lib/Analysis/CMakeLists.txt b/clang/lib/Analysis/CMakeLists.txt index 3638b831a7f..8e8c1e7b25e 100644 --- a/clang/lib/Analysis/CMakeLists.txt +++ b/clang/lib/Analysis/CMakeLists.txt @@ -30,6 +30,7 @@ add_clang_library(clangAnalysis    GRBlockCounter.cpp    GRCoreEngine.cpp    GRExprEngine.cpp +  GRExprEngineExperimentalChecks.cpp    GRExprEngineInternalChecks.cpp    GRState.cpp    LiveVariables.cpp diff --git a/clang/lib/Analysis/GRExprEngineExperimentalChecks.cpp b/clang/lib/Analysis/GRExprEngineExperimentalChecks.cpp new file mode 100644 index 00000000000..e50dbeba688 --- /dev/null +++ b/clang/lib/Analysis/GRExprEngineExperimentalChecks.cpp @@ -0,0 +1,23 @@ +//=-- GRExprEngineExperimentalChecks.h ------------------------------*- C++ -*-= +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +//  This file defines functions to instantiate and register experimental +//  checks in GRExprEngine. +// +//===----------------------------------------------------------------------===// + +#include "GRExprEngineExperimentalChecks.h" +#include "clang/Analysis/LocalCheckers.h" + +using namespace clang; + +void clang::RegisterExperimentalChecks(GRExprEngine &Eng) { +  RegisterPthreadLockChecker(Eng);   +} + diff --git a/clang/lib/Frontend/AnalysisConsumer.cpp b/clang/lib/Frontend/AnalysisConsumer.cpp index d51730c20f2..e8bd920d412 100644 --- a/clang/lib/Frontend/AnalysisConsumer.cpp +++ b/clang/lib/Frontend/AnalysisConsumer.cpp @@ -332,7 +332,9 @@ static void ActionGRExprEngine(AnalysisConsumer &C, AnalysisManager& mgr, Decl *    Eng.RegisterInternalChecks(); // FIXME: Internal checks should just                                  // automatically register.    RegisterAppleChecks(Eng, *D); - +   +  if (C.Opts.EnableExperimentalChecks) +    RegisterExperimentalChecks(Eng);    // Set the graph auditor.    llvm::OwningPtr<ExplodedNode::Auditor> Auditor; diff --git a/clang/tools/clang-cc/Options.cpp b/clang/tools/clang-cc/Options.cpp index 5d01e03a9ca..5b3800f3f20 100644 --- a/clang/tools/clang-cc/Options.cpp +++ b/clang/tools/clang-cc/Options.cpp @@ -78,11 +78,15 @@ static llvm::cl::opt<bool>  AnalyzeAll("analyzer-opt-analyze-headers",      llvm::cl::desc("Force the static analyzer to analyze "                     "functions defined in header files")); - +    static llvm::cl::opt<bool>  AnalyzerDisplayProgress("analyzer-display-progress", -          llvm::cl::desc("Emit verbose output about the analyzer's progress.")); +          llvm::cl::desc("Emit verbose output about the analyzer's progress")); +static llvm::cl::opt<bool> +AnalyzerExperimentalChecks("analyzer-experimental-checks", +          llvm::cl::desc("Use experimental path-sensitive checks")); +    static llvm::cl::opt<std::string>  AnalyzeSpecificFunction("analyze-function",                 llvm::cl::desc("Run analysis on specific function")); @@ -91,13 +95,13 @@ static llvm::cl::opt<bool>  EagerlyAssume("analyzer-eagerly-assume",            llvm::cl::init(false),                llvm::cl::desc("Eagerly assume the truth/falseness of some " -                             "symbolic constraints.")); +                             "symbolic constraints"));  static llvm::cl::opt<bool>  PurgeDead("analyzer-purge-dead",            llvm::cl::init(true),            llvm::cl::desc("Remove dead symbols, bindings, and constraints before" -                         " processing a statement.")); +                         " processing a statement"));  static llvm::cl::opt<bool>  TrimGraph("trim-egraph", @@ -126,6 +130,7 @@ void clang::InitializeAnalyzerOptions(AnalyzerOptions &Opts) {    Opts.PurgeDead = PurgeDead;    Opts.EagerlyAssume = EagerlyAssume;    Opts.AnalyzeSpecificFunction = AnalyzeSpecificFunction; +  Opts.EnableExperimentalChecks = AnalyzerExperimentalChecks;    Opts.TrimGraph = TrimGraph;  } | 

