aboutsummaryrefslogtreecommitdiff
path: root/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2011-09-20 01:38:47 +0000
committerAnna Zaks <ganna@apple.com>2011-09-20 01:38:47 +0000
commit1531bb0c69d9afff6a6434e4cadf345eb628b287 (patch)
treecb12b3eb00dd8f48093bd59ab9e6011b6f2917a3 /lib/StaticAnalyzer/Core/PathDiagnostic.cpp
parenteecb6a1e8b95fcdb7d1a0d92b0a0311c041440cd (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.cpp23
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