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