AnalysisManager.h revision 651f13cea278ec967336033dd032faef0e9fc2ec
1bb8e6488bda12b41b32fc22397a44510cacdac50Zhongxing Xu//== AnalysisManager.h - Path sensitive analysis data manager ------*- C++ -*-// 2fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// 3fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// The LLVM Compiler Infrastructure 4fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// 5fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// This file is distributed under the University of Illinois Open Source 6fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// License. See LICENSE.TXT for details. 7fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// 8fda7832b000ff8927386f093b52c067641679469Zhongxing Xu//===----------------------------------------------------------------------===// 9fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// 10fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// This file defines the AnalysisManager class that manages the data and policy 11fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// for path sensitive analysis. 12fda7832b000ff8927386f093b52c067641679469Zhongxing Xu// 13fda7832b000ff8927386f093b52c067641679469Zhongxing Xu//===----------------------------------------------------------------------===// 14fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 155a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis#ifndef LLVM_CLANG_GR_ANALYSISMANAGER_H 165a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis#define LLVM_CLANG_GR_ANALYSISMANAGER_H 17fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 181309f9a3b225ea846e5822691c39a77423125505Ted Kremenek#include "clang/Analysis/AnalysisContext.h" 19987695a5ddd78beca784d4e503ffbc2dc879181aTed Kremenek#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h" 209b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h" 219b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#include "clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h" 22c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h" 23fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 24fda7832b000ff8927386f093b52c067641679469Zhongxing Xunamespace clang { 25fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 269ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremeneknamespace ento { 2743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis class CheckerManager; 285a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis 29fda7832b000ff8927386f093b52c067641679469Zhongxing Xuclass AnalysisManager : public BugReporterData { 3099ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 311d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek AnalysisDeclContextManager AnaCtxMgr; 32fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 33fda7832b000ff8927386f093b52c067641679469Zhongxing Xu ASTContext &Ctx; 34d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie DiagnosticsEngine &Diags; 354e4d08403ca5cfd4d558fa2936215d3a4e5a528dDavid Blaikie const LangOptions &LangOpts; 36c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek PathDiagnosticConsumers PathConsumers; 37d07a0d0279c09d1017f8450fce575a94dc9703c0Zhongxing Xu 38fda7832b000ff8927386f093b52c067641679469Zhongxing Xu // Configurable components creators. 39fda7832b000ff8927386f093b52c067641679469Zhongxing Xu StoreManagerCreator CreateStoreMgr; 40fda7832b000ff8927386f093b52c067641679469Zhongxing Xu ConstraintManagerCreator CreateConstraintMgr; 41fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 4243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis CheckerManager *CheckerMgr; 4343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 44fda7832b000ff8927386f093b52c067641679469Zhongxing Xupublic: 45622b6fb0a1d280c16e135c7e427b79cafffbde1fTed Kremenek AnalyzerOptions &options; 467b73e0832b20af1f43601a3d19e76d02d9f4dce5Ted Kremenek 47c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek AnalysisManager(ASTContext &ctx,DiagnosticsEngine &diags, 48c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek const LangOptions &lang, 49c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek const PathDiagnosticConsumers &Consumers, 50fda7832b000ff8927386f093b52c067641679469Zhongxing Xu StoreManagerCreator storemgr, 51c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu ConstraintManagerCreator constraintmgr, 5243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis CheckerManager *checkerMgr, 53622b6fb0a1d280c16e135c7e427b79cafffbde1fTed Kremenek AnalyzerOptions &Options); 544fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek 55c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek ~AnalysisManager(); 56b01f06ca72362d527bb65fbf018ac53df575ded1Ted Kremenek 5758f5ec7d56b1ebf5f90ee11226ebe7663f2821eaTed Kremenek void ClearContexts() { 5858f5ec7d56b1ebf5f90ee11226ebe7663f2821eaTed Kremenek AnaCtxMgr.clear(); 5958f5ec7d56b1ebf5f90ee11226ebe7663f2821eaTed Kremenek } 609b823e8e1ccb8a2cb49923bad22a80ca96f41f92Ted Kremenek 611d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek AnalysisDeclContextManager& getAnalysisDeclContextManager() { 629b823e8e1ccb8a2cb49923bad22a80ca96f41f92Ted Kremenek return AnaCtxMgr; 639b823e8e1ccb8a2cb49923bad22a80ca96f41f92Ted Kremenek } 641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 65fda7832b000ff8927386f093b52c067641679469Zhongxing Xu StoreManagerCreator getStoreManagerCreator() { 66fda7832b000ff8927386f093b52c067641679469Zhongxing Xu return CreateStoreMgr; 677177dee8aee4b432911c91f1b788963bec0cac9fDaniel Dunbar } 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines AnalyzerOptions& getAnalyzerOptions() override { 70d95b70175646829c26344d5f0bda1ec3009f2a5bAnna Zaks return options; 71d95b70175646829c26344d5f0bda1ec3009f2a5bAnna Zaks } 72fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 73fda7832b000ff8927386f093b52c067641679469Zhongxing Xu ConstraintManagerCreator getConstraintManagerCreator() { 74fda7832b000ff8927386f093b52c067641679469Zhongxing Xu return CreateConstraintMgr; 75fda7832b000ff8927386f093b52c067641679469Zhongxing Xu } 761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 7743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis CheckerManager *getCheckerManager() const { return CheckerMgr; } 7843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines ASTContext &getASTContext() override { 80fda7832b000ff8927386f093b52c067641679469Zhongxing Xu return Ctx; 81fda7832b000ff8927386f093b52c067641679469Zhongxing Xu } 821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines SourceManager &getSourceManager() override { 845032ffe4259e7d436f2eb19e5a29fdae559e7c12Zhongxing Xu return getASTContext().getSourceManager(); 85fda7832b000ff8927386f093b52c067641679469Zhongxing Xu } 861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines DiagnosticsEngine &getDiagnostic() override { 88fda7832b000ff8927386f093b52c067641679469Zhongxing Xu return Diags; 89fda7832b000ff8927386f093b52c067641679469Zhongxing Xu } 901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 914e4d08403ca5cfd4d558fa2936215d3a4e5a528dDavid Blaikie const LangOptions &getLangOpts() const { 924e4d08403ca5cfd4d558fa2936215d3a4e5a528dDavid Blaikie return LangOpts; 93fda7832b000ff8927386f093b52c067641679469Zhongxing Xu } 941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines ArrayRef<PathDiagnosticConsumer*> getPathDiagnosticConsumers() override { 96c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek return PathConsumers; 97b01f06ca72362d527bb65fbf018ac53df575ded1Ted Kremenek } 9818c7c06033cafe8c0cdcbe5759c802728688b49fZhongxing Xu 99c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek void FlushDiagnostics(); 100c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek 101fda7832b000ff8927386f093b52c067641679469Zhongxing Xu bool shouldVisualize() const { 1023b8a04004afa46057a9af4afbd086be71d619793Ted Kremenek return options.visualizeExplodedGraphWithGraphViz || 1033b8a04004afa46057a9af4afbd086be71d619793Ted Kremenek options.visualizeExplodedGraphWithUbiGraph; 104fda7832b000ff8927386f093b52c067641679469Zhongxing Xu } 105fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 106255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek bool shouldInlineCall() const { 107bfa9ab8183e2fdc74f8633d758cb0c6201314320Anna Zaks return options.getIPAMode() != IPAK_None; 108255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek } 1097b99d12b4ca67fccdf5090761ba257732e954e75Zhongxing Xu 110b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu CFG *getCFG(Decl const *D) { 111b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu return AnaCtxMgr.getContext(D)->getCFG(); 112b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu } 113b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu 114a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek template <typename T> 115a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek T *getAnalysis(Decl const *D) { 116a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek return AnaCtxMgr.getContext(D)->getAnalysis<T>(); 117b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu } 118b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu 119b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu ParentMap &getParentMap(Decl const *D) { 120b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu return AnaCtxMgr.getContext(D)->getParentMap(); 121b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu } 122b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu 1231d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek AnalysisDeclContext *getAnalysisDeclContext(const Decl *D) { 124c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu return AnaCtxMgr.getContext(D); 125c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu } 126fda7832b000ff8927386f093b52c067641679469Zhongxing Xu}; 127fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 128b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek} // enAnaCtxMgrspace 1295a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis 1305a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis} // end clang namespace 131fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 132fda7832b000ff8927386f093b52c067641679469Zhongxing Xu#endif 133