diff options
Diffstat (limited to 'lib/StaticAnalyzer/Core/PathDiagnostic.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Core/PathDiagnostic.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/StaticAnalyzer/Core/PathDiagnostic.cpp b/lib/StaticAnalyzer/Core/PathDiagnostic.cpp index 2ebadcaa23..cfe35251a9 100644 --- a/lib/StaticAnalyzer/Core/PathDiagnostic.cpp +++ b/lib/StaticAnalyzer/Core/PathDiagnostic.cpp @@ -588,6 +588,8 @@ PathDiagnosticLocation } else if (const StmtPoint *SP = dyn_cast<StmtPoint>(&P)) { S = SP->getStmt(); + if (isa<PostStmtPurgeDeadSymbols>(P)) + return PathDiagnosticLocation::createEnd(S, SMng, P.getLocationContext()); } else if (const PostImplicitCall *PIE = dyn_cast<PostImplicitCall>(&P)) { return PathDiagnosticLocation(PIE->getLocation(), SMng); @@ -619,12 +621,16 @@ PathDiagnosticLocation while (NI) { ProgramPoint P = NI->getLocation(); - if (const StmtPoint *PS = dyn_cast<StmtPoint>(&P)) + if (const StmtPoint *PS = dyn_cast<StmtPoint>(&P)) { S = PS->getStmt(); - else if (const BlockEdge *BE = dyn_cast<BlockEdge>(&P)) + if (isa<PostStmtPurgeDeadSymbols>(P)) + return PathDiagnosticLocation::createEnd(S, SM, + NI->getLocationContext()); + break; + } else if (const BlockEdge *BE = dyn_cast<BlockEdge>(&P)) { S = BE->getSrc()->getTerminator(); - if (S) break; + } NI = NI->succ_empty() ? 0 : *(NI->succ_begin()); } |