ExplodedGraph nodes will now have a numeric identifier stored in them which will keep track of the order in which the nodes were created and it will be fully deterministic both accross runs and across machines. This is extremely useful for debugging as it allows reliably setting conditional breakpoints by node IDs. llvm-svn: 375186
150 lines
3.7 KiB
Plaintext
150 lines
3.7 KiB
Plaintext
// RUN: %exploded_graph_rewriter -d %s | FileCheck %s
|
|
|
|
// FIXME: Substitution doesn't seem to work on Windows.
|
|
// UNSUPPORTED: system-windows
|
|
|
|
// 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,
|
|
"constructing_objects": 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,
|
|
"constructing_objects": 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,
|
|
"constructing_objects": 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}"];
|