diff options
author | dim <dim@FreeBSD.org> | 2011-02-20 13:06:31 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2011-02-20 13:06:31 +0000 |
commit | 39fcc9a984e2820e4ea0fa2ac4abd17d9f3a31df (patch) | |
tree | a9243275843fbeaa590afc07ee888e006b8d54ea /examples/wpa/clang-wpa.cpp | |
parent | 69b4eca4a4255ba43baa5c1d9bbdec3ec17f479e (diff) | |
download | FreeBSD-src-39fcc9a984e2820e4ea0fa2ac4abd17d9f3a31df.zip FreeBSD-src-39fcc9a984e2820e4ea0fa2ac4abd17d9f3a31df.tar.gz |
Vendor import of clang trunk r126079:
http://llvm.org/svn/llvm-project/cfe/trunk@126079
Diffstat (limited to 'examples/wpa/clang-wpa.cpp')
-rw-r--r-- | examples/wpa/clang-wpa.cpp | 60 |
1 files changed, 45 insertions, 15 deletions
diff --git a/examples/wpa/clang-wpa.cpp b/examples/wpa/clang-wpa.cpp index 41dca0d..bbb9e14 100644 --- a/examples/wpa/clang-wpa.cpp +++ b/examples/wpa/clang-wpa.cpp @@ -14,10 +14,12 @@ #include "clang/Basic/FileManager.h" #include "clang/Basic/SourceManager.h" -#include "clang/Checker/PathSensitive/AnalysisManager.h" -#include "clang/Checker/PathSensitive/GRExprEngine.h" -#include "clang/Checker/PathSensitive/GRTransferFuncs.h" -#include "clang/Checker/Checkers/LocalCheckers.h" +#include "clang/StaticAnalyzer/Frontend/CheckerRegistration.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/TransferFuncs.h" +#include "clang/StaticAnalyzer/Core/CheckerManager.h" +#include "clang/StaticAnalyzer/Checkers/LocalCheckers.h" #include "clang/Frontend/ASTUnit.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Index/CallGraph.h" @@ -26,6 +28,7 @@ #include "clang/Index/DeclReferenceMap.h" #include "clang/Index/SelectorMap.h" #include "clang/Lex/Preprocessor.h" +#include "clang/Basic/TargetInfo.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/raw_ostream.h" @@ -91,7 +94,9 @@ int main(int argc, char **argv) { = CompilerInstance::createDiagnostics(DiagOpts, argc, argv); for (unsigned i = 0, e = InputFilenames.size(); i != e; ++i) { const std::string &InFile = InputFilenames[i]; - llvm::OwningPtr<ASTUnit> AST(ASTUnit::LoadFromASTFile(InFile, Diags)); + llvm::OwningPtr<ASTUnit> AST(ASTUnit::LoadFromASTFile(InFile, Diags, + FileSystemOptions(), + false, 0, 0, true)); if (!AST) return 1; @@ -129,20 +134,45 @@ int main(int argc, char **argv) { // Create an analysis engine. Preprocessor &PP = TU->getPreprocessor(); - // Hard code options for now. + AnalyzerOptions Opts; + + // Hard code options and checkers for now. + + Opts.MaxNodes = 300000; + Opts.MaxLoop = 3; + Opts.InlineCall = true; + Opts.CFGAddImplicitDtors = true; + Opts.EagerlyTrimEGraph = true; + + Opts.CheckersControlList.push_back(std::make_pair("core", true)); + if (PP.getTargetInfo().getTriple().getOS() != llvm::Triple::Win32) + Opts.CheckersControlList.push_back(std::make_pair("unix", true)); + if (PP.getTargetInfo().getTriple().getVendor() == llvm::Triple::Apple) + Opts.CheckersControlList.push_back(std::make_pair("macosx", true)); + + // Checks to perform for Objective-C/Objective-C++. + if (PP.getLangOptions().ObjC1) + Opts.CheckersControlList.push_back(std::make_pair("cocoa", true)); + + llvm::OwningPtr<ento::CheckerManager> checkerMgr; + checkerMgr.reset(ento::registerCheckers(Opts, PP.getDiagnostics())); + + using namespace clang::ento; AnalysisManager AMgr(TU->getASTContext(), PP.getDiagnostics(), PP.getLangOptions(), /* PathDiagnostic */ 0, CreateRegionStoreManager, - CreateRangeConstraintManager, &Idxer, - /* MaxNodes */ 300000, /* MaxLoop */ 3, - /* VisualizeEG */ false, /* VisualizeEGUbi */ false, - /* PurgeDead */ true, /* EagerlyAssume */ false, - /* TrimGraph */ false, /* InlineCall */ true, - /* UseUnoptimizedCFG */ false); - - GRTransferFuncs* TF = MakeCFRefCountTF(AMgr.getASTContext(), /*GC*/false, + CreateRangeConstraintManager, checkerMgr.get(), &Idxer, + Opts.MaxNodes, Opts.MaxLoop, + Opts.VisualizeEGDot, Opts.VisualizeEGUbi, + Opts.PurgeDead, Opts.EagerlyAssume, + Opts.TrimGraph, Opts.InlineCall, + Opts.UnoptimizedCFG, Opts.CFGAddImplicitDtors, + Opts.CFGAddInitializers, + Opts.EagerlyTrimEGraph); + + TransferFuncs* TF = MakeCFRefCountTF(AMgr.getASTContext(), /*GC*/false, AMgr.getLangOptions()); - GRExprEngine Eng(AMgr, TF); + ExprEngine Eng(AMgr, TF); Eng.ExecuteWorkList(AMgr.getStackFrame(FD, TU), AMgr.getMaxNodes()); |