summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/ProgramPoint.cpp
diff options
context:
space:
mode:
authorArtem Dergachev <artem.dergachev@gmail.com>2019-07-12 02:10:33 +0000
committerArtem Dergachev <artem.dergachev@gmail.com>2019-07-12 02:10:33 +0000
commited035ff8264fcfd8ba380a6966c8f29097deb251 (patch)
tree767a08dcbc5c4b3e4cbacadc7f880b0f7caa3496 /clang/lib/Analysis/ProgramPoint.cpp
parentdc0396614f84281ae662f98dbee4b6de4c3d79eb (diff)
downloadbcm5719-llvm-ed035ff8264fcfd8ba380a6966c8f29097deb251.tar.gz
bcm5719-llvm-ed035ff8264fcfd8ba380a6966c8f29097deb251.zip
[analyzer] exploded-graph-rewriter: Improve source location dumps.
- Correctly display macro expansion and spelling locations. - Use the same procedure to display location context call site locations. - Display statement IDs for program points. llvm-svn: 365861
Diffstat (limited to 'clang/lib/Analysis/ProgramPoint.cpp')
-rw-r--r--clang/lib/Analysis/ProgramPoint.cpp32
1 files changed, 11 insertions, 21 deletions
diff --git a/clang/lib/Analysis/ProgramPoint.cpp b/clang/lib/Analysis/ProgramPoint.cpp
index 0398251b5ea..97e90965d00 100644
--- a/clang/lib/Analysis/ProgramPoint.cpp
+++ b/clang/lib/Analysis/ProgramPoint.cpp
@@ -12,6 +12,7 @@
//===----------------------------------------------------------------------===//
#include "clang/Analysis/ProgramPoint.h"
+#include "clang/Basic/JsonSupport.h"
using namespace clang;
@@ -46,19 +47,6 @@ LLVM_DUMP_METHOD void ProgramPoint::dump() const {
return printJson(llvm::errs());
}
-static void printLocJson(raw_ostream &Out, SourceLocation Loc,
- const SourceManager &SM) {
- Out << "\"location\": ";
- if (!Loc.isFileID()) {
- Out << "null";
- return;
- }
-
- Out << "{ \"line\": " << SM.getExpansionLineNumber(Loc)
- << ", \"column\": " << SM.getExpansionColumnNumber(Loc)
- << ", \"file\": \"" << SM.getFilename(Loc) << "\" }";
-}
-
void ProgramPoint::printJson(llvm::raw_ostream &Out, const char *NL) const {
const ASTContext &Context =
getLocationContext()->getAnalysisDeclContext()->getASTContext();
@@ -112,16 +100,18 @@ void ProgramPoint::printJson(llvm::raw_ostream &Out, const char *NL) const {
case ProgramPoint::PreImplicitCallKind: {
ImplicitCallPoint PC = castAs<ImplicitCallPoint>();
Out << "PreCall\", \"decl\": \""
- << PC.getDecl()->getAsFunction()->getQualifiedNameAsString() << "\", ";
- printLocJson(Out, PC.getLocation(), SM);
+ << PC.getDecl()->getAsFunction()->getQualifiedNameAsString()
+ << "\", \"location\": ";
+ printSourceLocationAsJson(Out, PC.getLocation(), SM);
break;
}
case ProgramPoint::PostImplicitCallKind: {
ImplicitCallPoint PC = castAs<ImplicitCallPoint>();
Out << "PostCall\", \"decl\": \""
- << PC.getDecl()->getAsFunction()->getQualifiedNameAsString() << "\", ";
- printLocJson(Out, PC.getLocation(), SM);
+ << PC.getDecl()->getAsFunction()->getQualifiedNameAsString()
+ << "\", \"location\": ";
+ printSourceLocationAsJson(Out, PC.getLocation(), SM);
break;
}
@@ -153,8 +143,8 @@ void ProgramPoint::printJson(llvm::raw_ostream &Out, const char *NL) const {
E.getSrc()->printTerminatorJson(Out, Context.getLangOpts(),
/*AddQuotes=*/true);
- Out << ", ";
- printLocJson(Out, T->getBeginLoc(), SM);
+ Out << ", \"location\": ";
+ printSourceLocationAsJson(Out, T->getBeginLoc(), SM);
Out << ", \"term_kind\": \"";
if (isa<SwitchStmt>(T)) {
@@ -202,8 +192,8 @@ void ProgramPoint::printJson(llvm::raw_ostream &Out, const char *NL) const {
S->printJson(Out, nullptr, PP, AddQuotes);
- Out << ", ";
- printLocJson(Out, S->getBeginLoc(), SM);
+ Out << ", \"location\": ";
+ printSourceLocationAsJson(Out, S->getBeginLoc(), SM);
Out << ", \"stmt_point_kind\": \"";
if (getAs<PreLoad>())
OpenPOWER on IntegriCloud