diff options
author | Anna Zaks <ganna@apple.com> | 2011-09-14 00:25:17 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2011-09-14 00:25:17 +0000 |
commit | 43f48b0b1bc763dc56db6e01de4fcc44ad389bef (patch) | |
tree | 5262a9d9542ecbb526353c8a3995f32104de3e5e /lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp | |
parent | edc9592b2d100f841ae0ba69f07a5eaaccb08900 (diff) |
[analyzer] Refactor: Make PathDiagnosticLocation responsible for creating a valid object given an ExploadedNode (the same logic can be reused by other checkers).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139672 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp | 24 |
1 files changed, 1 insertions, 23 deletions
diff --git a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp index 97151337a7..481a31a045 100644 --- a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp @@ -2148,29 +2148,7 @@ CFRefLeakReportVisitor::getEndPath(BugReporterContext &BRC, // occur at an actual statement (e.g., transition between blocks; end // of function) so we need to walk the graph and compute a real location. const ExplodedNode *LeakN = EndN; - PathDiagnosticLocation L; - - while (LeakN) { - ProgramPoint P = LeakN->getLocation(); - - if (const StmtPoint *PS = dyn_cast<StmtPoint>(&P)) { - L = PathDiagnosticLocation(PS->getStmt()->getLocStart(), SMgr); - break; - } - else if (const BlockEdge *BE = dyn_cast<BlockEdge>(&P)) { - if (const Stmt *Term = BE->getSrc()->getTerminator()) { - L = PathDiagnosticLocation(Term->getLocStart(), SMgr); - break; - } - } - - LeakN = LeakN->succ_empty() ? 0 : *(LeakN->succ_begin()); - } - - if (!L.isValid()) { - const Decl &D = EndN->getCodeDecl(); - L = PathDiagnosticLocation(D.getBodyRBrace(), SMgr); - } + PathDiagnosticLocation L = PathDiagnosticLocation::create(LeakN, SMgr); std::string sbuf; llvm::raw_string_ostream os(sbuf); |