r361983 - [analyzer] print() JSONify: Program state implementation
Csaba Dabis via cfe-commits
cfe-commits at lists.llvm.org
Wed May 29 09:22:22 PDT 2019
Author: charusso
Date: Wed May 29 09:22:21 2019
New Revision: 361983
URL: http://llvm.org/viewvc/llvm-project?rev=361983&view=rev
Log:
[analyzer] print() JSONify: Program state implementation
Summary: -
Reviewers: NoQ, xazax.hun, ravikandhadai, baloghadamsoftware, Szelethus
Reviewed By: NoQ
Subscribers: szepet, rnkovacs, a.sidorin, mikhail.ramalho, donat.nagy,
dkrupp
Tags: #clang
Differential Revision: https://reviews.llvm.org/D62087
Modified:
cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp
cfe/trunk/test/Analysis/dump_egraph.cpp
cfe/trunk/test/Analysis/expr-inspection.c
Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h?rev=361983&r1=361982&r2=361983&view=diff
==============================================================================
--- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h (original)
+++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h Wed May 29 09:22:21 2019
@@ -425,8 +425,8 @@ public:
// Pretty-printing.
void printJson(raw_ostream &Out, const LocationContext *LCtx = nullptr,
- const char *NL = "\n", const char *Sep = "",
- unsigned int Space = 0, bool IsDot = false) const;
+ const char *NL = "\n", unsigned int Space = 0,
+ bool IsDot = false) const;
void printDOT(raw_ostream &Out, const LocationContext *LCtx = nullptr,
unsigned int Space = 0) const;
Modified: cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp?rev=361983&r1=361982&r2=361983&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp Wed May 29 09:22:21 2019
@@ -10,13 +10,14 @@
//
//===----------------------------------------------------------------------===//
-#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/Analysis/CFG.h"
+#include "clang/Basic/JsonSupport.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h"
#include "llvm/Support/raw_ostream.h"
using namespace clang;
@@ -441,15 +442,18 @@ void ProgramState::setStore(const StoreR
//===----------------------------------------------------------------------===//
void ProgramState::printJson(raw_ostream &Out, const LocationContext *LCtx,
- const char *NL, const char *Sep,
- unsigned int Space, bool IsDot) const {
- // Print the store.
+ const char *NL, unsigned int Space,
+ bool IsDot) const {
+ Indent(Out, Space, IsDot) << "\"program_state\": {" << NL;
+ ++Space;
+
ProgramStateManager &Mgr = getStateManager();
- const ASTContext &Context = getStateManager().getContext();
+
+ // Print the store.
Mgr.getStoreManager().printJson(Out, getStore(), NL, Space, IsDot);
// Print out the environment.
- Env.printJson(Out, Context, LCtx, NL, Space, IsDot);
+ Env.printJson(Out, Mgr.getContext(), LCtx, NL, Space, IsDot);
// Print out the constraints.
Mgr.getConstraintManager().printJson(Out, this, NL, Space, IsDot);
@@ -459,11 +463,14 @@ void ProgramState::printJson(raw_ostream
// Print checker-specific data.
Mgr.getOwningEngine().printJson(Out, this, LCtx, NL, Space, IsDot);
+
+ --Space;
+ Indent(Out, Space, IsDot) << '}';
}
void ProgramState::printDOT(raw_ostream &Out, const LocationContext *LCtx,
unsigned int Space) const {
- printJson(Out, LCtx, "\\l", "\\|", Space, /*IsDot=*/true);
+ printJson(Out, LCtx, /*NL=*/"\\l", Space, /*IsDot=*/true);
}
LLVM_DUMP_METHOD void ProgramState::dump() const {
Modified: cfe/trunk/test/Analysis/dump_egraph.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/dump_egraph.cpp?rev=361983&r1=361982&r2=361983&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/dump_egraph.cpp (original)
+++ cfe/trunk/test/Analysis/dump_egraph.cpp Wed May 29 09:22:21 2019
@@ -16,9 +16,9 @@ void foo() {
T t;
}
-// CHECK: \"constructing_objects\": [\l \{ \"location_context\": \"#0 Call\", \"calling\": \"foo\", \"call_line\": null, \"items\": [\l \{ \"lctx_id\": 1, \"stmt_id\": 1155, \"kind\": \"construct into local variable\", \"argument_index\": null, \"pretty\": \"T t;\"
+// CHECK: \"constructing_objects\": [\l \{ \"location_context\": \"#0 Call\", \"calling\": \"foo\", \"call_line\": null, \"items\": [\l \{ \"lctx_id\": 1, \"stmt_id\": 1155, \"kind\": \"construct into local variable\", \"argument_index\": null, \"pretty\": \"T t;\", \"value\": \"&t\"
-// CHECK: \"constructing_objects\": [\l \{ \"location_context\": \"#0 Call\", \"calling\": \"T::T\", \"call_line\": \"16\", \"items\": [\l \{ \"lctx_id\": 2, \"init_id\": 1092, \"kind\": \"construct into member variable\", \"argument_index\": null, \"pretty\": \"s\", \"value\": \"&t-\>s\"
+// CHECK: \"constructing_objects\": [\l \{ \"location_context\": \"#0 Call\", \"calling\": \"T::T\", \"call_line\": \"16\", \"items\": [\l \{ \"lctx_id\": 2, \"init_id\": 1092, \"kind\": \"construct into member variable\", \"argument_index\": null, \"pretty\": \"s\", \"value\": \"&t-\>s\"
-// CHECK: \"store\": [\l \{ \"cluster\": \"t\", \"items\": [\l \{ \"kind\": \"Default\", \"offset\": 0, \"value\": \"conj_$3\{int, LC3, no stmt, #1\}\"
+// CHECK: \"store\": [\l \{ \"cluster\": \"t\", \"items\": [\l \{ \"kind\": \"Default\", \"offset\": 0, \"value\": \"conj_$3\{int, LC3, no stmt, #1\}\"
Modified: cfe/trunk/test/Analysis/expr-inspection.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/expr-inspection.c?rev=361983&r1=361982&r2=361983&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/expr-inspection.c (original)
+++ cfe/trunk/test/Analysis/expr-inspection.c Wed May 29 09:22:21 2019
@@ -23,20 +23,22 @@ void foo(int x) {
}
}
-// CHECK: "store": [
-// CHECK-NEXT: { "cluster": "y", "items": [
-// CHECK-NEXT: { "kind": "Direct", "offset": 0, "value": "2 S32b" }
-// 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": 847, "pretty": "clang_analyzer_printState", "value": "&code{clang_analyzer_printState}" }
-// CHECK-NEXT: ]}
-// CHECK-NEXT: ],
-// CHECK-NEXT: "constraints": [
-// CHECK-NEXT: { "symbol": "reg_$0<int x>", "range": "{ [-2147483648, 13] }" }
-// CHECK-NEXT: ],
-// CHECK-NEXT: "dynamic_types": null,
-// CHECK-NEXT: "constructing_objects": null,
-// CHECK-NEXT: "checker_messages": null
+// CHECK: "program_state": {
+// CHECK-NEXT: "store": [
+// CHECK-NEXT: { "cluster": "y", "items": [
+// CHECK-NEXT: { "kind": "Direct", "offset": 0, "value": "2 S32b" }
+// 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": 847, "pretty": "clang_analyzer_printState", "value": "&code{clang_analyzer_printState}" }
+// CHECK-NEXT: ]}
+// CHECK-NEXT: ],
+// CHECK-NEXT: "constraints": [
+// CHECK-NEXT: { "symbol": "reg_$0<int x>", "range": "{ [-2147483648, 13] }" }
+// CHECK-NEXT: ],
+// CHECK-NEXT: "dynamic_types": null,
+// CHECK-NEXT: "constructing_objects": null,
+// CHECK-NEXT: "checker_messages": null
+// CHECK-NEXT: }
More information about the cfe-commits
mailing list