isuckatcs b5147937b2 [analyzer] Add more information to the Exploded Graph
This patch dumps every state trait in the egraph. Also
the empty state traits are no longer dumped, instead
they are treated as null by the egraph rewriter script,
which solves reverse compatibility issues.

Differential Revision: https://reviews.llvm.org/D131187
2022-09-03 00:21:05 +02:00

144 lines
3.6 KiB
Plaintext

// RUN: %exploded_graph_rewriter -d %s | FileCheck %s
// No diffs on the first node, nothing to check.
Node0x1 [shape=record,label=
"{
{
"state_id": 2,
"program_points": [
{
"kind": "BlockEntrance", "block_id": 1,
"terminator": null, "term_kind": null,
"tag": null, "node_id": 1,
"has_report": 0, "is_sink": 0
}
],
"program_state": {
"store": null,
"constraints": null,
"dynamic_types": null,
"checker_messages": null,
"environment": {
"pointer": "0x2",
"items": [
{
"location_context": "#0 Call",
"lctx_id": 3,
"calling": "foo",
"location": null,
"items": [
{
"stmt_id": 5,
"pretty": "bar()",
"value": "Unknown"
}
]
}
]
}
}
}
\l}"];
Node0x1 -> Node0x6;
// CHECK: Node0x6 [
// CHECK-SAME: <tr>
// CHECK-SAME: <td><font color="red">-</font></td>
// CHECK-SAME: <td align="left"><i>S5</i></td>
// CHECK-SAME: <td align="left">bar()</td>
// CHECK-SAME: <td align="left">Unknown</td>
// CHECK-SAME: </tr>
// CHECK-SAME: <tr>
// CHECK-SAME: <td><font color="forestgreen">+</font></td>
// CHECK-SAME: <td align="left"><i>S9</i></td>
// CHECK-SAME: <td align="left">baz()</td>
// CHECK-SAME: <td align="left">Undefined</td>
// CHECK-SAME: </tr>
Node0x6 [shape=record,label=
"{
{
"state_id": 7,
"program_points": [
{
"kind": "BlockEntrance", "block_id": 1,
"terminator": null, "term_kind": null,
"tag": null, "node_id": 1,
"has_report": 0, "is_sink": 0
}
],
"program_state": {
"store": null,
"constraints": null,
"dynamic_types": null,
"checker_messages": null,
"environment": {
"pointer": "0x2",
"items": [
{
"location_context": "#0 Call",
"lctx_id": 3,
"calling": "foo",
"location": null,
"items": [
{
"stmt_id": 9,
"pretty": "baz()",
"value": "Undefined"
}
]
}
]
}
}
}
\l}"];
Node0x6 -> Node0x9;
// Make sure that the last node in the path is not diffed.
// CHECK: Node0x9 [
// CHECK-SAME: <tr>
// CHECK-SAME: <td></td>
// CHECK-SAME: <td align="left"><i>S9</i></td>
// CHECK-SAME: <td align="left">baz()</td>
// CHECK-SAME: <td align="left">Undefined</td>
// CHECK-SAME: </tr>
Node0x9 [shape=record,label=
"{
{
"state_id": 7,
"program_points": [
{
"kind": "BlockEntrance", "block_id": 1,
"terminator": null, "term_kind": null,
"tag": null, "node_id": 1,
"has_report": 0, "is_sink": 0
}
],
"program_state": {
"store": null,
"constraints": null,
"dynamic_types": null,
"checker_messages": null,
"environment": {
"pointer": "0x2",
"items": [
{
"location_context": "#0 Call",
"lctx_id": 3,
"calling": "foo",
"location": null,
"items": [
{
"stmt_id": 9,
"pretty": "baz()",
"value": "Undefined"
}
]
}
]
}
}
}
\l}"];