//===--- AnalyzerOptions.h - Analysis Engine Options ------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This header contains the structures necessary for a front-end to specify // various analyses. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_FRONTEND_ANALYZEROPTIONS_H #define LLVM_CLANG_FRONTEND_ANALYZEROPTIONS_H #include #include namespace clang { class ASTConsumer; class DiagnosticsEngine; class Preprocessor; class LangOptions; /// Analysis - Set of available source code analyses. enum Analyses { #define ANALYSIS(NAME, CMDFLAG, DESC, SCOPE) NAME, #include "clang/Frontend/Analyses.def" NumAnalyses }; /// AnalysisStores - Set of available analysis store models. enum AnalysisStores { #define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATFN) NAME##Model, #include "clang/Frontend/Analyses.def" NumStores }; /// AnalysisConstraints - Set of available constraint models. enum AnalysisConstraints { #define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN) NAME##Model, #include "clang/Frontend/Analyses.def" NumConstraints }; /// AnalysisDiagClients - Set of available diagnostic clients for rendering /// analysis results. enum AnalysisDiagClients { #define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN, AUTOCREAT) PD_##NAME, #include "clang/Frontend/Analyses.def" NUM_ANALYSIS_DIAG_CLIENTS }; /// AnalysisPurgeModes - Set of available strategies for dead symbol removal. enum AnalysisPurgeMode { #define ANALYSIS_PURGE(NAME, CMDFLAG, DESC) NAME, #include "clang/Frontend/Analyses.def" NumPurgeModes }; /// AnalysisIPAMode - Set of inter-procedural modes. enum AnalysisIPAMode { #define ANALYSIS_IPA(NAME, CMDFLAG, DESC) NAME, #include "clang/Frontend/Analyses.def" NumIPAModes }; /// AnalysisInlineFunctionSelection - Set of inlining function selection heuristics. enum AnalysisInliningMode { #define ANALYSIS_INLINING_MODE(NAME, CMDFLAG, DESC) NAME, #include "clang/Frontend/Analyses.def" NumInliningModes }; class AnalyzerOptions { public: /// \brief Pair of checker name and enable/disable. std::vector > CheckersControlList; AnalysisStores AnalysisStoreOpt; AnalysisConstraints AnalysisConstraintsOpt; AnalysisDiagClients AnalysisDiagOpt; AnalysisPurgeMode AnalysisPurgeOpt; AnalysisIPAMode IPAMode; std::string AnalyzeSpecificFunction; unsigned MaxNodes; unsigned MaxLoop; unsigned ShowCheckerHelp : 1; unsigned AnalyzeAll : 1; unsigned AnalyzerDisplayProgress : 1; unsigned AnalyzeNestedBlocks : 1; unsigned EagerlyAssume : 1; unsigned TrimGraph : 1; unsigned VisualizeEGDot : 1; unsigned VisualizeEGUbi : 1; unsigned UnoptimizedCFG : 1; unsigned CFGAddImplicitDtors : 1; unsigned CFGAddInitializers : 1; unsigned EagerlyTrimEGraph : 1; unsigned PrintStats : 1; unsigned NoRetryExhausted : 1; unsigned InlineMaxStackDepth; unsigned InlineMaxFunctionSize; AnalysisInliningMode InliningMode; public: AnalyzerOptions() { AnalysisStoreOpt = RegionStoreModel; AnalysisConstraintsOpt = RangeConstraintsModel; AnalysisDiagOpt = PD_HTML; AnalysisPurgeOpt = PurgeStmt; IPAMode = Inlining; ShowCheckerHelp = 0; AnalyzeAll = 0; AnalyzerDisplayProgress = 0; AnalyzeNestedBlocks = 0; EagerlyAssume = 0; TrimGraph = 0; VisualizeEGDot = 0; VisualizeEGUbi = 0; UnoptimizedCFG = 0; CFGAddImplicitDtors = 0; CFGAddInitializers = 0; EagerlyTrimEGraph = 0; PrintStats = 0; NoRetryExhausted = 0; // Cap the stack depth at 4 calls (5 stack frames, base + 4 calls). InlineMaxStackDepth = 5; InlineMaxFunctionSize = 200; InliningMode = NoRedundancy; } }; } #endif