Home | History | Annotate | Download | only in Frontend
      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