AnalyzerOptions.h revision 918ac48e315d42fed7fe856a3fce70d9d930cdcd
1918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar//===--- AnalysisConsumer.h - Front-end Analysis Engine Hooks ---*- C++ -*-===// 2e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// 3e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// The LLVM Compiler Infrastructure 4e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// 5e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// This file is distributed under the University of Illinois Open Source 6e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// License. See LICENSE.TXT for details. 7e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// 8e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman//===----------------------------------------------------------------------===// 9e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// 10e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// This header contains the functions necessary for a front-end to run various 11e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// analyses. 12e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman// 13e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman//===----------------------------------------------------------------------===// 14e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman 155746f1ff6286f5e5bd7fc28e5e2031f18e4676c9Daniel Dunbar#ifndef LLVM_CLANG_FRONTEND_ANALYSISCONSUMER_H 165746f1ff6286f5e5bd7fc28e5e2031f18e4676c9Daniel Dunbar#define LLVM_CLANG_FRONTEND_ANALYSISCONSUMER_H 175746f1ff6286f5e5bd7fc28e5e2031f18e4676c9Daniel Dunbar 18e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman#include <string> 19e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman#include <vector> 20e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman 21e1718aff224e7da84720beb42a39362199ca83f3Eli Friedmannamespace clang { 22e1718aff224e7da84720beb42a39362199ca83f3Eli Friedmanclass ASTConsumer; 23e1718aff224e7da84720beb42a39362199ca83f3Eli Friedmanclass Diagnostic; 24e1718aff224e7da84720beb42a39362199ca83f3Eli Friedmanclass Preprocessor; 25e1718aff224e7da84720beb42a39362199ca83f3Eli Friedmanclass LangOptions; 26e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman 27e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman/// Analysis - Set of available source code analyses. 28e1718aff224e7da84720beb42a39362199ca83f3Eli Friedmanenum Analyses { 29e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman#define ANALYSIS(NAME, CMDFLAG, DESC, SCOPE) NAME, 300ec78fa2c92b714de41cc87cfa79e4877ab5479eEli Friedman#include "clang/Frontend/Analyses.def" 31e1718aff224e7da84720beb42a39362199ca83f3Eli FriedmanNumAnalyses 32e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman}; 33e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman 34e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman/// AnalysisStores - Set of available analysis store models. 35e1718aff224e7da84720beb42a39362199ca83f3Eli Friedmanenum AnalysisStores { 36e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman#define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATFN) NAME##Model, 370ec78fa2c92b714de41cc87cfa79e4877ab5479eEli Friedman#include "clang/Frontend/Analyses.def" 38e1718aff224e7da84720beb42a39362199ca83f3Eli FriedmanNumStores 39e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman}; 40e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman 41e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman/// AnalysisConstraints - Set of available constraint models. 42e1718aff224e7da84720beb42a39362199ca83f3Eli Friedmanenum AnalysisConstraints { 43e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman#define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN) NAME##Model, 440ec78fa2c92b714de41cc87cfa79e4877ab5479eEli Friedman#include "clang/Frontend/Analyses.def" 45e1718aff224e7da84720beb42a39362199ca83f3Eli FriedmanNumConstraints 46e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman}; 47e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman 48e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman/// AnalysisDiagClients - Set of available diagnostic clients for rendering 49e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman/// analysis results. 50e1718aff224e7da84720beb42a39362199ca83f3Eli Friedmanenum AnalysisDiagClients { 51e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN, AUTOCREAT) PD_##NAME, 520ec78fa2c92b714de41cc87cfa79e4877ab5479eEli Friedman#include "clang/Frontend/Analyses.def" 53e1718aff224e7da84720beb42a39362199ca83f3Eli FriedmanNUM_ANALYSIS_DIAG_CLIENTS 54e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman}; 55e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman 56918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbarclass AnalyzerOptions { 57918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbarpublic: 58e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman std::vector<Analyses> AnalysisList; 59e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman AnalysisStores AnalysisStoreOpt; 60e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman AnalysisConstraints AnalysisConstraintsOpt; 61e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman AnalysisDiagClients AnalysisDiagOpt; 62e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman std::string AnalyzeSpecificFunction; 63918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar unsigned AnalyzeAll : 1; 64918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar unsigned AnalyzerDisplayProgress : 1; 65918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar unsigned EagerlyAssume : 1; 66918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar unsigned PurgeDead : 1; 67918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar unsigned TrimGraph : 1; 68918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar unsigned VisualizeEGDot : 1; 69918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar unsigned VisualizeEGUbi : 1; 70918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar 71918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbarpublic: 72918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar AnalyzerOptions() { 73918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar AnalyzeAll = 0; 74918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar AnalyzerDisplayProgress = 0; 75918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar EagerlyAssume = 0; 76918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar PurgeDead = 0; 77918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar TrimGraph = 0; 78918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar VisualizeEGDot = 0; 79918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar VisualizeEGUbi = 0; 80918ac48e315d42fed7fe856a3fce70d9d930cdcdDaniel Dunbar } 81e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman}; 82e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman 83e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman/// CreateAnalysisConsumer - Creates an ASTConsumer to run various code 84e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman/// analysis passes. (The set of analyses run is controlled by command-line 85e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman/// options.) 86efceabd2380f49306bc0229583458e93b062094bDaniel DunbarASTConsumer* CreateAnalysisConsumer(const Preprocessor &pp, 87e71b85feb0a2df9273b1b488f5b40279369a6255Eli Friedman const std::string &output, 88e71b85feb0a2df9273b1b488f5b40279369a6255Eli Friedman const AnalyzerOptions& Opts); 89e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman 90e1718aff224e7da84720beb42a39362199ca83f3Eli Friedman} 915746f1ff6286f5e5bd7fc28e5e2031f18e4676c9Daniel Dunbar 925746f1ff6286f5e5bd7fc28e5e2031f18e4676c9Daniel Dunbar#endif 93