Files
clang-p2996/clang/test/Analysis/exploded-graph-rewriter/environment_diff.dot
isuckatcs b032e3ff61 [analyzer] Evaluate construction of non-POD type arrays
Introducing the support for evaluating the constructor
of every element in an array. The idea is to record the
index of the current array member being constructed and
create a loop during the analysis. We looping over the
same CXXConstructExpr as many times as many elements
the array has.

Differential Revision: https://reviews.llvm.org/D127973
2022-07-14 23:30:21 +02:00

150 lines
3.8 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,
"constructing_objects": null,
"index_of_element": 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,
"index_of_element": 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,
"index_of_element": 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}"];