From: Zhongxing Xu Date: Tue, 18 Aug 2009 08:46:04 +0000 (+0000) Subject: Now we can get the CFG from the ProgramPoint. No need to pass in the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=50d5bc4e3b53eb8bb4ebf198f1213348a3fa0f38;p=clang Now we can get the CFG from the ProgramPoint. No need to pass in the BugReporter. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79327 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/PathSensitive/AnalysisContext.h b/include/clang/Analysis/PathSensitive/AnalysisContext.h index e7ef89ae69..d945aebb99 100644 --- a/include/clang/Analysis/PathSensitive/AnalysisContext.h +++ b/include/clang/Analysis/PathSensitive/AnalysisContext.h @@ -79,6 +79,8 @@ public: LocationContext *getParent() const { return Parent; } + CFG *getCFG() const { return getAnalysisContext()->getCFG(); } + LiveVariables *getLiveVariables() const { return getAnalysisContext()->getLiveVariables(); } diff --git a/include/clang/Analysis/PathSensitive/BugReporter.h b/include/clang/Analysis/PathSensitive/BugReporter.h index b99eaee953..19d9ccd6aa 100644 --- a/include/clang/Analysis/PathSensitive/BugReporter.h +++ b/include/clang/Analysis/PathSensitive/BugReporter.h @@ -101,7 +101,7 @@ public: // object. // FIXME: If we do need it, we can probably just make it private to // BugReporter. - const Stmt* getStmt(BugReporter& BR) const; + const Stmt* getStmt() const; const std::string& getDescription() const { return Description; } diff --git a/lib/Analysis/BugReporter.cpp b/lib/Analysis/BugReporter.cpp index 354bafd989..745e90c38e 100644 --- a/lib/Analysis/BugReporter.cpp +++ b/lib/Analysis/BugReporter.cpp @@ -1206,12 +1206,14 @@ void BugType::FlushReports(BugReporter &BR) {} BugReport::~BugReport() {} RangedBugReport::~RangedBugReport() {} -const Stmt* BugReport::getStmt(BugReporter& BR) const { +const Stmt* BugReport::getStmt() const { ProgramPoint ProgP = EndNode->getLocation(); const Stmt *S = NULL; if (BlockEntrance* BE = dyn_cast(&ProgP)) { - if (BE->getBlock() == &BR.getCFG()->getExit()) S = GetPreviousStmt(EndNode); + CFGBlock &Exit = ProgP.getContext()->getCFG()->getExit(); + if (BE->getBlock() == &Exit) + S = GetPreviousStmt(EndNode); } if (!S) S = GetStmt(ProgP); @@ -1223,7 +1225,7 @@ PathDiagnosticPiece* BugReport::getEndPath(BugReporterContext& BRC, const ExplodedNode* EndPathNode) { - const Stmt* S = getStmt(BRC.getBugReporter()); + const Stmt* S = getStmt(); if (!S) return NULL; @@ -1246,7 +1248,7 @@ BugReport::getEndPath(BugReporterContext& BRC, void BugReport::getRanges(BugReporter& BR, const SourceRange*& beg, const SourceRange*& end) { - if (const Expr* E = dyn_cast_or_null(getStmt(BR))) { + if (const Expr* E = dyn_cast_or_null(getStmt())) { R = E->getSourceRange(); assert(R.isValid()); beg = &R;