
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
144 lines
3.6 KiB
Plaintext
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}"];
|