AnalyzerOptions.h revision 81fb169f42769e02c7425b23885a261c025fd5e6
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
21namespace clang {
22class ASTConsumer;
23class DiagnosticsEngine;
24class Preprocessor;
25class LangOptions;
26
27/// Analysis - Set of available source code analyses.
28enum Analyses {
29#define ANALYSIS(NAME, CMDFLAG, DESC, SCOPE) NAME,
30#include "clang/Frontend/Analyses.def"
31NumAnalyses
32};
33
34/// AnalysisStores - Set of available analysis store models.
35enum AnalysisStores {
36#define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATFN) NAME##Model,
37#include "clang/Frontend/Analyses.def"
38NumStores
39};
40
41/// AnalysisConstraints - Set of available constraint models.
42enum AnalysisConstraints {
43#define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN) NAME##Model,
44#include "clang/Frontend/Analyses.def"
45NumConstraints
46};
47
48/// AnalysisDiagClients - Set of available diagnostic clients for rendering
49///  analysis results.
50enum AnalysisDiagClients {
51#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN, AUTOCREAT) PD_##NAME,
52#include "clang/Frontend/Analyses.def"
53NUM_ANALYSIS_DIAG_CLIENTS
54};
55
56/// AnalysisPurgeModes - Set of available strategies for dead symbol removal.
57enum AnalysisPurgeMode {
58#define ANALYSIS_PURGE(NAME, CMDFLAG, DESC) NAME,
59#include "clang/Frontend/Analyses.def"
60NumPurgeModes
61};
62
63class AnalyzerOptions {
64public:
65  /// \brief Pair of checker name and enable/disable.
66  std::vector<std::pair<std::string, bool> > CheckersControlList;
67  AnalysisStores AnalysisStoreOpt;
68  AnalysisConstraints AnalysisConstraintsOpt;
69  AnalysisDiagClients AnalysisDiagOpt;
70  AnalysisPurgeMode AnalysisPurgeOpt;
71  std::string AnalyzeSpecificFunction;
72  unsigned MaxNodes;
73  unsigned MaxLoop;
74  unsigned ShowCheckerHelp : 1;
75  unsigned AnalyzeAll : 1;
76  unsigned AnalyzerDisplayProgress : 1;
77  unsigned AnalyzeNestedBlocks : 1;
78  unsigned EagerlyAssume : 1;
79  unsigned TrimGraph : 1;
80  unsigned VisualizeEGDot : 1;
81  unsigned VisualizeEGUbi : 1;
82  unsigned InlineCall : 1;
83  unsigned UnoptimizedCFG : 1;
84  unsigned CFGAddImplicitDtors : 1;
85  unsigned CFGAddInitializers : 1;
86  unsigned EagerlyTrimEGraph : 1;
87  unsigned PrintStats : 1;
88
89public:
90  AnalyzerOptions() {
91    AnalysisStoreOpt = RegionStoreModel;
92    AnalysisConstraintsOpt = RangeConstraintsModel;
93    AnalysisDiagOpt = PD_HTML;
94    AnalysisPurgeOpt = PurgeStmt;
95    ShowCheckerHelp = 0;
96    AnalyzeAll = 0;
97    AnalyzerDisplayProgress = 0;
98    AnalyzeNestedBlocks = 0;
99    EagerlyAssume = 0;
100    TrimGraph = 0;
101    VisualizeEGDot = 0;
102    VisualizeEGUbi = 0;
103    InlineCall = 0;
104    UnoptimizedCFG = 0;
105    CFGAddImplicitDtors = 0;
106    CFGAddInitializers = 0;
107    EagerlyTrimEGraph = 0;
108    PrintStats = 0;
109  }
110};
111
112}
113
114#endif
115