AnalyzerOptions.h revision 81fb169f42769e02c7425b23885a261c025fd5e6
19cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek//===--- AnalyzerOptions.h - Analysis Engine Options ------------*- C++ -*-===//
29cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek//
39cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek//                     The LLVM Compiler Infrastructure
49cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek//
59cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek// This file is distributed under the University of Illinois Open Source
69cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek// License. See LICENSE.TXT for details.
79cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek//
89cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek//===----------------------------------------------------------------------===//
99cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek//
109cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek// This header contains the structures necessary for a front-end to specify
119cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek// various analyses.
129cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek//
139cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek//===----------------------------------------------------------------------===//
149cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek
159cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek#ifndef LLVM_CLANG_FRONTEND_ANALYZEROPTIONS_H
169cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek#define LLVM_CLANG_FRONTEND_ANALYZEROPTIONS_H
1722d6a639ce04ababc6900ea8b50ed7167db0f39cTed Kremenek
18a6e24811207ad2179b0dabe3d7e6ec551e6686dfTed Kremenek#include <string>
197a4648df321be70bb009a8dc56e0162c3f13c18cTed Kremenek#include <vector>
209d9f254f7781c157256dbde4d4d961a2d89e8599Ted Kremenek
2123cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremeneknamespace clang {
2223cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenekclass ASTConsumer;
23cd25c13ade3afa829c87ca1ed0ed0d379f426251Ted Kremenekclass DiagnosticsEngine;
247cba11262458df05951432b54997eb40a35dbf9eTed Kremenekclass Preprocessor;
259cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenekclass LangOptions;
269cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek
279cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek/// Analysis - Set of available source code analyses.
28f4cdf41fc7a9026b24d369ba932396e7c51209b7Ted Kremenekenum Analyses {
29f4cdf41fc7a9026b24d369ba932396e7c51209b7Ted Kremenek#define ANALYSIS(NAME, CMDFLAG, DESC, SCOPE) NAME,
309cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek#include "clang/Frontend/Analyses.def"
310e6893840fdd69a8a4d6561663a5a29af237ae08Ted KremenekNumAnalyses
32c9480dd03522f0bab5fff7d30402cb7ee31117dcTed Kremenek};
330e6893840fdd69a8a4d6561663a5a29af237ae08Ted Kremenek
3423cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek/// AnalysisStores - Set of available analysis store models.
357cba11262458df05951432b54997eb40a35dbf9eTed Kremenekenum AnalysisStores {
367cba11262458df05951432b54997eb40a35dbf9eTed Kremenek#define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATFN) NAME##Model,
377cba11262458df05951432b54997eb40a35dbf9eTed Kremenek#include "clang/Frontend/Analyses.def"
387cba11262458df05951432b54997eb40a35dbf9eTed KremenekNumStores
397cba11262458df05951432b54997eb40a35dbf9eTed Kremenek};
40f8e8a3eeff891d1c056c96b6d6be404533741ba7Anna Zaks
417cba11262458df05951432b54997eb40a35dbf9eTed Kremenek/// AnalysisConstraints - Set of available constraint models.
427cba11262458df05951432b54997eb40a35dbf9eTed Kremenekenum AnalysisConstraints {
437cba11262458df05951432b54997eb40a35dbf9eTed Kremenek#define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN) NAME##Model,
447cba11262458df05951432b54997eb40a35dbf9eTed Kremenek#include "clang/Frontend/Analyses.def"
457cba11262458df05951432b54997eb40a35dbf9eTed KremenekNumConstraints
467cba11262458df05951432b54997eb40a35dbf9eTed Kremenek};
47b7770c0b4970606b53cca14ae3ca0588a0bfcb30Ted Kremenek
48b7770c0b4970606b53cca14ae3ca0588a0bfcb30Ted Kremenek/// AnalysisDiagClients - Set of available diagnostic clients for rendering
49b7770c0b4970606b53cca14ae3ca0588a0bfcb30Ted Kremenek///  analysis results.
50b7770c0b4970606b53cca14ae3ca0588a0bfcb30Ted Kremenekenum AnalysisDiagClients {
5123cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN, AUTOCREAT) PD_##NAME,
5223cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek#include "clang/Frontend/Analyses.def"
5323cfca3760c482f8543daab62051f5eaa1f98fb4Ted KremenekNUM_ANALYSIS_DIAG_CLIENTS
5423cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek};
5523cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek
5623cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek/// AnalysisPurgeModes - Set of available strategies for dead symbol removal.
5723cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenekenum AnalysisPurgeMode {
5823cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek#define ANALYSIS_PURGE(NAME, CMDFLAG, DESC) NAME,
5923cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek#include "clang/Frontend/Analyses.def"
6023cfca3760c482f8543daab62051f5eaa1f98fb4Ted KremenekNumPurgeModes
61991c54b9b7409656e5593364e065878b5210d556Ted Kremenek};
62991c54b9b7409656e5593364e065878b5210d556Ted Kremenek
63938eef139ad43345248235da31f78a759dd18f13Ted Kremenekclass AnalyzerOptions {
64938eef139ad43345248235da31f78a759dd18f13Ted Kremenekpublic:
65991c54b9b7409656e5593364e065878b5210d556Ted Kremenek  /// \brief Pair of checker name and enable/disable.
66e2c8663ad2b110712401145b866072bb94108058Nico Weber  std::vector<std::pair<std::string, bool> > CheckersControlList;
67991c54b9b7409656e5593364e065878b5210d556Ted Kremenek  AnalysisStores AnalysisStoreOpt;
68991c54b9b7409656e5593364e065878b5210d556Ted Kremenek  AnalysisConstraints AnalysisConstraintsOpt;
6923cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  AnalysisDiagClients AnalysisDiagOpt;
7023cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  AnalysisPurgeMode AnalysisPurgeOpt;
7123cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  std::string AnalyzeSpecificFunction;
7223cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  unsigned MaxNodes;
7323cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  unsigned MaxLoop;
7423cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  unsigned ShowCheckerHelp : 1;
7523cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  unsigned AnalyzeAll : 1;
7623cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  unsigned AnalyzerDisplayProgress : 1;
7723cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  unsigned AnalyzeNestedBlocks : 1;
7823cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  unsigned EagerlyAssume : 1;
7923cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  unsigned TrimGraph : 1;
8023cfca3760c482f8543daab62051f5eaa1f98fb4Ted Kremenek  unsigned VisualizeEGDot : 1;
819cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek  unsigned VisualizeEGUbi : 1;
828db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek  unsigned InlineCall : 1;
838db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek  unsigned UnoptimizedCFG : 1;
848db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek  unsigned CFGAddImplicitDtors : 1;
858db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek  unsigned CFGAddInitializers : 1;
868db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek  unsigned EagerlyTrimEGraph : 1;
878db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek  unsigned PrintStats : 1;
888db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek
898db26ce0464c712058ab60b72e2a70c04148020eTed Kremenekpublic:
908db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek  AnalyzerOptions() {
918db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek    AnalysisStoreOpt = RegionStoreModel;
928db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek    AnalysisConstraintsOpt = RangeConstraintsModel;
938db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek    AnalysisDiagOpt = PD_HTML;
948db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek    AnalysisPurgeOpt = PurgeStmt;
958db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek    ShowCheckerHelp = 0;
968db26ce0464c712058ab60b72e2a70c04148020eTed Kremenek    AnalyzeAll = 0;
97810e6229e59796f8109e94e4a469a2dc17cf3e6dTed Kremenek    AnalyzerDisplayProgress = 0;
98b7770c0b4970606b53cca14ae3ca0588a0bfcb30Ted Kremenek    AnalyzeNestedBlocks = 0;
99b7770c0b4970606b53cca14ae3ca0588a0bfcb30Ted Kremenek    EagerlyAssume = 0;
100e01ca51f4167b5a7fd1d6230f2e2f1f177fd68e3Ted Kremenek    TrimGraph = 0;
101810e6229e59796f8109e94e4a469a2dc17cf3e6dTed Kremenek    VisualizeEGDot = 0;
102810e6229e59796f8109e94e4a469a2dc17cf3e6dTed Kremenek    VisualizeEGUbi = 0;
103810e6229e59796f8109e94e4a469a2dc17cf3e6dTed Kremenek    InlineCall = 0;
104fd9df0eddd7d2b190f740f33a3d08f611c0be3f0Ted Kremenek    UnoptimizedCFG = 0;
105b7770c0b4970606b53cca14ae3ca0588a0bfcb30Ted Kremenek    CFGAddImplicitDtors = 0;
106fc1d340169265375704404a8eec1d8acf1c2038dTed Kremenek    CFGAddInitializers = 0;
1079cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek    EagerlyTrimEGraph = 0;
1089cc8c2cc79d8c91627c0dcc5cb679aad4e37c7f5Ted Kremenek    PrintStats = 0;
109a0e226621b424e9fcaf6bf145c6ab439fbb7b8e6Sam Bishop  }
110fc1d340169265375704404a8eec1d8acf1c2038dTed Kremenek};
1112a3a8b9f47b0a8f3fdd57bc4fbd08684feb4fa85Ted Kremenek
112fc1d340169265375704404a8eec1d8acf1c2038dTed Kremenek}
113fc1d340169265375704404a8eec1d8acf1c2038dTed Kremenek
1143fa3c44d624d2df9ef2649ca1a7efa97d81b36d8Jordan Rose#endif
1153fa3c44d624d2df9ef2649ca1a7efa97d81b36d8Jordan Rose