diff options
Diffstat (limited to 'include/clang/StaticAnalyzer/Frontend/FrontendActions.h')
-rw-r--r-- | include/clang/StaticAnalyzer/Frontend/FrontendActions.h | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/include/clang/StaticAnalyzer/Frontend/FrontendActions.h b/include/clang/StaticAnalyzer/Frontend/FrontendActions.h index 21ecfc2..36afb4b 100644 --- a/include/clang/StaticAnalyzer/Frontend/FrontendActions.h +++ b/include/clang/StaticAnalyzer/Frontend/FrontendActions.h @@ -7,13 +7,17 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_GR_FRONTENDACTIONS_H -#define LLVM_CLANG_GR_FRONTENDACTIONS_H +#ifndef LLVM_CLANG_STATICANALYZER_FRONTEND_FRONTENDACTIONS_H +#define LLVM_CLANG_STATICANALYZER_FRONTEND_FRONTENDACTIONS_H #include "clang/Frontend/FrontendAction.h" +#include "llvm/ADT/StringMap.h" +#include "llvm/ADT/StringRef.h" namespace clang { +class Stmt; + namespace ento { //===----------------------------------------------------------------------===// @@ -22,8 +26,29 @@ namespace ento { class AnalysisAction : public ASTFrontendAction { protected: - ASTConsumer *CreateASTConsumer(CompilerInstance &CI, - StringRef InFile) override; + std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, + StringRef InFile) override; +}; + +/// \brief Frontend action to parse model files. +/// +/// This frontend action is responsible for parsing model files. Model files can +/// not be parsed on their own, they rely on type information that is available +/// in another translation unit. The parsing of model files is done by a +/// separate compiler instance that reuses the ASTContext and othen information +/// from the main translation unit that is being compiled. After a model file is +/// parsed, the function definitions will be collected into a StringMap. +class ParseModelFileAction : public ASTFrontendAction { +public: + ParseModelFileAction(llvm::StringMap<Stmt *> &Bodies); + bool isModelParsingAction() const override { return true; } + +protected: + std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, + StringRef InFile) override; + +private: + llvm::StringMap<Stmt *> &Bodies; }; void printCheckerHelp(raw_ostream &OS, ArrayRef<std::string> plugins); |