1//===-- FrontendActions.h - Useful Frontend Actions -------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef LLVM_CLANG_STATICANALYZER_FRONTEND_FRONTENDACTIONS_H 11#define LLVM_CLANG_STATICANALYZER_FRONTEND_FRONTENDACTIONS_H 12 13#include "clang/Frontend/FrontendAction.h" 14#include "llvm/ADT/StringMap.h" 15#include "llvm/ADT/StringRef.h" 16 17namespace clang { 18 19class Stmt; 20 21namespace ento { 22 23//===----------------------------------------------------------------------===// 24// AST Consumer Actions 25//===----------------------------------------------------------------------===// 26 27class AnalysisAction : public ASTFrontendAction { 28protected: 29 std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, 30 StringRef InFile) override; 31}; 32 33/// \brief Frontend action to parse model files. 34/// 35/// This frontend action is responsible for parsing model files. Model files can 36/// not be parsed on their own, they rely on type information that is available 37/// in another translation unit. The parsing of model files is done by a 38/// separate compiler instance that reuses the ASTContext and othen information 39/// from the main translation unit that is being compiled. After a model file is 40/// parsed, the function definitions will be collected into a StringMap. 41class ParseModelFileAction : public ASTFrontendAction { 42public: 43 ParseModelFileAction(llvm::StringMap<Stmt *> &Bodies); 44 bool isModelParsingAction() const override { return true; } 45 46protected: 47 std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, 48 StringRef InFile) override; 49 50private: 51 llvm::StringMap<Stmt *> &Bodies; 52}; 53 54void printCheckerHelp(raw_ostream &OS, ArrayRef<std::string> plugins); 55 56} // end GR namespace 57 58} // end namespace clang 59 60#endif 61