1 //===--- AnalyzerOptions.h - Analysis Engine Options ------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This header contains the structures necessary for a front-end to specify 11 // various analyses. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CLANG_FRONTEND_ANALYZEROPTIONS_H 16 #define LLVM_CLANG_FRONTEND_ANALYZEROPTIONS_H 17 18 #include <string> 19 #include <vector> 20 21 namespace clang { 22 class ASTConsumer; 23 class DiagnosticsEngine; 24 class Preprocessor; 25 class LangOptions; 26 27 /// Analysis - Set of available source code analyses. 28 enum Analyses { 29 #define ANALYSIS(NAME, CMDFLAG, DESC, SCOPE) NAME, 30 #include "clang/Frontend/Analyses.def" 31 NumAnalyses 32 }; 33 34 /// AnalysisStores - Set of available analysis store models. 35 enum AnalysisStores { 36 #define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATFN) NAME##Model, 37 #include "clang/Frontend/Analyses.def" 38 NumStores 39 }; 40 41 /// AnalysisConstraints - Set of available constraint models. 42 enum AnalysisConstraints { 43 #define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN) NAME##Model, 44 #include "clang/Frontend/Analyses.def" 45 NumConstraints 46 }; 47 48 /// AnalysisDiagClients - Set of available diagnostic clients for rendering 49 /// analysis results. 50 enum AnalysisDiagClients { 51 #define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN, AUTOCREAT) PD_##NAME, 52 #include "clang/Frontend/Analyses.def" 53 NUM_ANALYSIS_DIAG_CLIENTS 54 }; 55 56 /// AnalysisPurgeModes - Set of available strategies for dead symbol removal. 57 enum AnalysisPurgeMode { 58 #define ANALYSIS_PURGE(NAME, CMDFLAG, DESC) NAME, 59 #include "clang/Frontend/Analyses.def" 60 NumPurgeModes 61 }; 62 63 /// AnalysisIPAMode - Set of inter-procedural modes. 64 enum AnalysisIPAMode { 65 #define ANALYSIS_IPA(NAME, CMDFLAG, DESC) NAME, 66 #include "clang/Frontend/Analyses.def" 67 NumIPAModes 68 }; 69 70 /// AnalysisInlineFunctionSelection - Set of inlining function selection heuristics. 71 enum AnalysisInliningMode { 72 #define ANALYSIS_INLINING_MODE(NAME, CMDFLAG, DESC) NAME, 73 #include "clang/Frontend/Analyses.def" 74 NumInliningModes 75 }; 76 77 class AnalyzerOptions { 78 public: 79 /// \brief Pair of checker name and enable/disable. 80 std::vector<std::pair<std::string, bool> > CheckersControlList; 81 AnalysisStores AnalysisStoreOpt; 82 AnalysisConstraints AnalysisConstraintsOpt; 83 AnalysisDiagClients AnalysisDiagOpt; 84 AnalysisPurgeMode AnalysisPurgeOpt; 85 AnalysisIPAMode IPAMode; 86 std::string AnalyzeSpecificFunction; 87 unsigned MaxNodes; 88 unsigned MaxLoop; 89 unsigned ShowCheckerHelp : 1; 90 unsigned AnalyzeAll : 1; 91 unsigned AnalyzerDisplayProgress : 1; 92 unsigned AnalyzeNestedBlocks : 1; 93 unsigned EagerlyAssume : 1; 94 unsigned TrimGraph : 1; 95 unsigned VisualizeEGDot : 1; 96 unsigned VisualizeEGUbi : 1; 97 unsigned UnoptimizedCFG : 1; 98 unsigned CFGAddImplicitDtors : 1; 99 unsigned CFGAddInitializers : 1; 100 unsigned EagerlyTrimEGraph : 1; 101 unsigned PrintStats : 1; 102 unsigned NoRetryExhausted : 1; 103 unsigned InlineMaxStackDepth; 104 unsigned InlineMaxFunctionSize; 105 AnalysisInliningMode InliningMode; 106 107 public: 108 AnalyzerOptions() { 109 AnalysisStoreOpt = RegionStoreModel; 110 AnalysisConstraintsOpt = RangeConstraintsModel; 111 AnalysisDiagOpt = PD_HTML; 112 AnalysisPurgeOpt = PurgeStmt; 113 IPAMode = Inlining; 114 ShowCheckerHelp = 0; 115 AnalyzeAll = 0; 116 AnalyzerDisplayProgress = 0; 117 AnalyzeNestedBlocks = 0; 118 EagerlyAssume = 0; 119 TrimGraph = 0; 120 VisualizeEGDot = 0; 121 VisualizeEGUbi = 0; 122 UnoptimizedCFG = 0; 123 CFGAddImplicitDtors = 0; 124 CFGAddInitializers = 0; 125 EagerlyTrimEGraph = 0; 126 PrintStats = 0; 127 NoRetryExhausted = 0; 128 // Cap the stack depth at 4 calls (5 stack frames, base + 4 calls). 129 InlineMaxStackDepth = 5; 130 InlineMaxFunctionSize = 200; 131 InliningMode = NoRedundancy; 132 } 133 }; 134 135 } 136 137 #endif 138