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