mirror of
https://github.com/opnsense/src.git
synced 2026-06-03 22:02:58 -04:00
128 lines
3.2 KiB
C++
128 lines
3.2 KiB
C++
//== AnalysisManager.h - Path sensitive analysis data manager ------*- C++ -*-//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the AnalysisManager class that manages the data and policy
|
|
// for path sensitive analysis.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_GR_ANALYSISMANAGER_H
|
|
#define LLVM_CLANG_GR_ANALYSISMANAGER_H
|
|
|
|
#include "clang/Analysis/AnalysisContext.h"
|
|
#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
|
|
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
|
|
#include "clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h"
|
|
#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h"
|
|
|
|
namespace clang {
|
|
|
|
namespace ento {
|
|
class CheckerManager;
|
|
|
|
class AnalysisManager : public BugReporterData {
|
|
virtual void anchor();
|
|
AnalysisDeclContextManager AnaCtxMgr;
|
|
|
|
ASTContext &Ctx;
|
|
DiagnosticsEngine &Diags;
|
|
const LangOptions &LangOpts;
|
|
PathDiagnosticConsumers PathConsumers;
|
|
|
|
// Configurable components creators.
|
|
StoreManagerCreator CreateStoreMgr;
|
|
ConstraintManagerCreator CreateConstraintMgr;
|
|
|
|
CheckerManager *CheckerMgr;
|
|
|
|
public:
|
|
AnalyzerOptions &options;
|
|
|
|
AnalysisManager(ASTContext &ctx,DiagnosticsEngine &diags,
|
|
const LangOptions &lang,
|
|
const PathDiagnosticConsumers &Consumers,
|
|
StoreManagerCreator storemgr,
|
|
ConstraintManagerCreator constraintmgr,
|
|
CheckerManager *checkerMgr,
|
|
AnalyzerOptions &Options);
|
|
|
|
~AnalysisManager();
|
|
|
|
void ClearContexts() {
|
|
AnaCtxMgr.clear();
|
|
}
|
|
|
|
AnalysisDeclContextManager& getAnalysisDeclContextManager() {
|
|
return AnaCtxMgr;
|
|
}
|
|
|
|
StoreManagerCreator getStoreManagerCreator() {
|
|
return CreateStoreMgr;
|
|
}
|
|
|
|
ConstraintManagerCreator getConstraintManagerCreator() {
|
|
return CreateConstraintMgr;
|
|
}
|
|
|
|
CheckerManager *getCheckerManager() const { return CheckerMgr; }
|
|
|
|
virtual ASTContext &getASTContext() {
|
|
return Ctx;
|
|
}
|
|
|
|
virtual SourceManager &getSourceManager() {
|
|
return getASTContext().getSourceManager();
|
|
}
|
|
|
|
virtual DiagnosticsEngine &getDiagnostic() {
|
|
return Diags;
|
|
}
|
|
|
|
const LangOptions &getLangOpts() const {
|
|
return LangOpts;
|
|
}
|
|
|
|
ArrayRef<PathDiagnosticConsumer*> getPathDiagnosticConsumers() {
|
|
return PathConsumers;
|
|
}
|
|
|
|
void FlushDiagnostics();
|
|
|
|
bool shouldVisualize() const {
|
|
return options.visualizeExplodedGraphWithGraphViz ||
|
|
options.visualizeExplodedGraphWithUbiGraph;
|
|
}
|
|
|
|
bool shouldInlineCall() const {
|
|
return options.IPAMode != None;
|
|
}
|
|
|
|
CFG *getCFG(Decl const *D) {
|
|
return AnaCtxMgr.getContext(D)->getCFG();
|
|
}
|
|
|
|
template <typename T>
|
|
T *getAnalysis(Decl const *D) {
|
|
return AnaCtxMgr.getContext(D)->getAnalysis<T>();
|
|
}
|
|
|
|
ParentMap &getParentMap(Decl const *D) {
|
|
return AnaCtxMgr.getContext(D)->getParentMap();
|
|
}
|
|
|
|
AnalysisDeclContext *getAnalysisDeclContext(const Decl *D) {
|
|
return AnaCtxMgr.getContext(D);
|
|
}
|
|
};
|
|
|
|
} // enAnaCtxMgrspace
|
|
|
|
} // end clang namespace
|
|
|
|
#endif
|