diff options
author | Anna Zaks <ganna@apple.com> | 2011-08-03 01:57:49 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2011-08-03 01:57:49 +0000 |
commit | eb3058a114edd3a3bff1011554aafc95b529a975 (patch) | |
tree | b5a12f828a85e1e74db4bcce253b897754538a29 /lib/StaticAnalyzer/Core/BugReporter.cpp | |
parent | 40f9c302f23a35611cd354f40b22b37f2c554a40 (diff) |
Static Analyzer diagnostics visualization: when the last location on a path is end of the function, the arrow should point to the closing brace, not the statement before it. Patch by Ted Kremenek.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@136761 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Core/BugReporter.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Core/BugReporter.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/StaticAnalyzer/Core/BugReporter.cpp b/lib/StaticAnalyzer/Core/BugReporter.cpp index 84535d5b1e..de59943d63 100644 --- a/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -1233,14 +1233,29 @@ PathDiagnosticPiece* BugReport::getEndPath(BugReporterContext& BRC, const ExplodedNode* EndPathNode) { - const Stmt* S = getStmt(); + const ProgramPoint &PP = EndPathNode->getLocation(); + PathDiagnosticLocation L; + + if (const BlockEntrance *BE = dyn_cast<BlockEntrance>(&PP)) { + const CFGBlock *block = BE->getBlock(); + if (block->getBlockID() == 0) { + L = PathDiagnosticLocation( + EndPathNode->getLocationContext()->getDecl()->getBodyRBrace(), + BRC.getSourceManager()); + } + } - if (!S) - return NULL; + if (!L.isValid()) { + const Stmt* S = getStmt(); + + if (!S) + return NULL; + + L = PathDiagnosticLocation(S, BRC.getSourceManager()); + } BugReport::ranges_iterator Beg, End; llvm::tie(Beg, End) = getRanges(); - PathDiagnosticLocation L(S, BRC.getSourceManager()); // Only add the statement itself as a range if we didn't specify any // special ranges for this report. |