diff options
author | Anna Zaks <ganna@apple.com> | 2011-09-20 01:38:47 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2011-09-20 01:38:47 +0000 |
commit | 1531bb0c69d9afff6a6434e4cadf345eb628b287 (patch) | |
tree | cb12b3eb00dd8f48093bd59ab9e6011b6f2917a3 /lib/StaticAnalyzer/Core/PathDiagnostic.cpp | |
parent | eecb6a1e8b95fcdb7d1a0d92b0a0311c041440cd (diff) |
[analyzer] Use more create methods in the PathDiagnostic, cleanup.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140130 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Core/PathDiagnostic.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Core/PathDiagnostic.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/StaticAnalyzer/Core/PathDiagnostic.cpp b/lib/StaticAnalyzer/Core/PathDiagnostic.cpp index 3c798e0fac..1faace5464 100644 --- a/lib/StaticAnalyzer/Core/PathDiagnostic.cpp +++ b/lib/StaticAnalyzer/Core/PathDiagnostic.cpp @@ -156,6 +156,7 @@ PathDiagnosticLocation return PathDiagnosticLocation(getValidSourceLocation(S, LC), SM, SingleLocK); } + PathDiagnosticLocation PathDiagnosticLocation::createOperatorLoc(const BinaryOperator *BO, const SourceManager &SM) { @@ -192,15 +193,16 @@ PathDiagnosticLocation PathDiagnosticLocation PathDiagnosticLocation::createDeclEnd(const LocationContext *LC, - const SourceManager &SM) { + const SourceManager &SM) { SourceLocation L = LC->getDecl()->getBodyRBrace(); return PathDiagnosticLocation(L, SM, SingleLocK); } -PathDiagnosticLocation::PathDiagnosticLocation(const ProgramPoint& P, - const SourceManager &SMng) - : K(StmtK), S(0), D(0), SM(&SMng), LC(P.getLocationContext()) { +PathDiagnosticLocation + PathDiagnosticLocation::create(const ProgramPoint& P, + const SourceManager &SMng) { + const Stmt* S = 0; if (const BlockEdge *BE = dyn_cast<BlockEdge>(&P)) { const CFGBlock *BSrc = BE->getSrc(); S = BSrc->getTerminatorCondition(); @@ -209,8 +211,10 @@ PathDiagnosticLocation::PathDiagnosticLocation(const ProgramPoint& P, S = PS->getStmt(); } + return PathDiagnosticLocation(S, SMng, P.getLocationContext()); + if (!S) - invalidate(); + return PathDiagnosticLocation(); } PathDiagnosticLocation @@ -223,9 +227,8 @@ PathDiagnosticLocation while (NI) { ProgramPoint P = NI->getLocation(); const LocationContext *LC = P.getLocationContext(); - if (const StmtPoint *PS = dyn_cast<StmtPoint>(&P)) { + if (const StmtPoint *PS = dyn_cast<StmtPoint>(&P)) return PathDiagnosticLocation(PS->getStmt(), SM, LC); - } else if (const BlockEdge *BE = dyn_cast<BlockEdge>(&P)) { const Stmt *Term = BE->getSrc()->getTerminator(); assert(Term); @@ -237,6 +240,12 @@ PathDiagnosticLocation return createDeclEnd(N->getLocationContext(), SM); } +PathDiagnosticLocation PathDiagnosticLocation::createSingleLocation( + const PathDiagnosticLocation &PDL) { + FullSourceLoc L = PDL.asLocation(); + return PathDiagnosticLocation(L, L.getManager(), SingleLocK); +} + FullSourceLoc PathDiagnosticLocation::asLocation() const { assert(isValid()); // Note that we want a 'switch' here so that the compiler can warn us in |