mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 12:26:52 +08:00
[analyzer] Fix JSON dumps for location contexts.
Location context ID is a property of the location context, not of an item within it. It's useful to know the id even when there are no items in the context, eg. for the purposes of figuring out how did contents of the Environment for the same location context changed across states. Differential Revision: https://reviews.llvm.org/D62754 llvm-svn: 363895
This commit is contained in:
@@ -527,7 +527,8 @@ void LocationContext::printJson(raw_ostream &Out, const char *NL,
|
||||
|
||||
unsigned Frame = 0;
|
||||
for (const LocationContext *LCtx = this; LCtx; LCtx = LCtx->getParent()) {
|
||||
Indent(Out, Space, IsDot) << "{ \"location_context\": \"";
|
||||
Indent(Out, Space, IsDot)
|
||||
<< "{ \"lctx_id\": " << LCtx->getID() << ", \"location_context\": \"";
|
||||
switch (LCtx->getKind()) {
|
||||
case StackFrame:
|
||||
Out << '#' << Frame << " Call\", \"calling\": \"";
|
||||
@@ -541,7 +542,7 @@ void LocationContext::printJson(raw_ostream &Out, const char *NL,
|
||||
if (const Stmt *S = cast<StackFrameContext>(LCtx)->getCallSite()) {
|
||||
Out << '\"';
|
||||
printLocation(Out, SM, S->getBeginLoc());
|
||||
Out << '\"';
|
||||
Out << '\"';
|
||||
} else {
|
||||
Out << "null";
|
||||
}
|
||||
|
||||
@@ -261,8 +261,7 @@ void Environment::printJson(raw_ostream &Out, const ASTContext &Ctx,
|
||||
|
||||
const Stmt *S = I->first.getStmt();
|
||||
Indent(Out, InnerSpace, IsDot)
|
||||
<< "{ \"lctx_id\": " << LC->getID()
|
||||
<< ", \"stmt_id\": " << S->getID(Ctx) << ", \"pretty\": ";
|
||||
<< "{ \"stmt_id\": " << S->getID(Ctx) << ", \"pretty\": ";
|
||||
S->printJson(Out, nullptr, PP, /*AddQuotes=*/true);
|
||||
|
||||
Out << ", \"value\": ";
|
||||
|
||||
@@ -149,9 +149,6 @@ public:
|
||||
if (!S)
|
||||
I = getItem().getCXXCtorInitializer();
|
||||
|
||||
// IDs
|
||||
Out << "\"lctx_id\": " << getLocationContext()->getID() << ", ";
|
||||
|
||||
if (S)
|
||||
Out << "\"stmt_id\": " << S->getID(getASTContext());
|
||||
else
|
||||
|
||||
@@ -18,9 +18,9 @@ void foo() {
|
||||
new S;
|
||||
}
|
||||
|
||||
// CHECK: \"location_context\": \"#0 Call\", \"calling\": \"foo\", \"call_line\": null, \"items\": [\l \{ \"lctx_id\": 1, \"stmt_id\": {{[0-9]+}}, \"kind\": \"construct into local variable\", \"argument_index\": null, \"pretty\": \"T t;\", \"value\": \"&t\"
|
||||
// CHECK: \"location_context\": \"#0 Call\", \"calling\": \"foo\", \"call_line\": null, \"items\": [\l \{ \"stmt_id\": {{[0-9]+}}, \"kind\": \"construct into local variable\", \"argument_index\": null, \"pretty\": \"T t;\", \"value\": \"&t\"
|
||||
|
||||
// CHECK: \"location_context\": \"#0 Call\", \"calling\": \"T::T\", \"call_line\": \"16\", \"items\": [\l \{ \"lctx_id\": 2, \"init_id\": {{[0-9]+}}, \"kind\": \"construct into member variable\", \"argument_index\": null, \"pretty\": \"s\", \"value\": \"&t-\>s\"
|
||||
// CHECK: \"location_context\": \"#0 Call\", \"calling\": \"T::T\", \"call_line\": \"16\", \"items\": [\l \{ \"init_id\": {{[0-9]+}}, \"kind\": \"construct into member variable\", \"argument_index\": null, \"pretty\": \"s\", \"value\": \"&t-\>s\"
|
||||
|
||||
// CHECK: \"cluster\": \"t\", \"items\": [\l \{ \"kind\": \"Default\", \"offset\": 0, \"value\": \"conj_$2\{int, LC5, no stmt, #1\}\"
|
||||
|
||||
|
||||
@@ -30,8 +30,8 @@ void foo(int x) {
|
||||
// CHECK-NEXT: ]}
|
||||
// CHECK-NEXT: ],
|
||||
// CHECK-NEXT: "environment": [
|
||||
// CHECK-NEXT: { "location_context": "#0 Call", "calling": "foo", "call_line": null, "items": [
|
||||
// CHECK-NEXT: { "lctx_id": 1, "stmt_id": {{[0-9]+}}, "pretty": "clang_analyzer_printState", "value": "&code{clang_analyzer_printState}" }
|
||||
// CHECK-NEXT: { "lctx_id": 1, "location_context": "#0 Call", "calling": "foo", "call_line": null, "items": [
|
||||
// CHECK-NEXT: { "stmt_id": {{[0-9]+}}, "pretty": "clang_analyzer_printState", "value": "&code{clang_analyzer_printState}" }
|
||||
// CHECK-NEXT: ]}
|
||||
// CHECK-NEXT: ],
|
||||
// CHECK-NEXT: "constraints": [
|
||||
|
||||
Reference in New Issue
Block a user