forked from OSchip/llvm-project
[analyzer] Fix hidden node traversal in exploded graph dumps.
The joined nodes now actually have the same state. That was intended from the start but the original implementation turned out to be buggy. Differential Revision: https://reviews.llvm.org/D69150 llvm-svn: 375278
This commit is contained in:
parent
9f9151d494
commit
7a17f19709
|
@ -3030,22 +3030,16 @@ struct DOTGraphTraits<ExplodedGraph*> : public DefaultDOTGraphTraits {
|
|||
llvm::function_ref<void(const ExplodedNode *)> PreCallback,
|
||||
llvm::function_ref<void(const ExplodedNode *)> PostCallback,
|
||||
llvm::function_ref<bool(const ExplodedNode *)> Stop) {
|
||||
const ExplodedNode *FirstHiddenNode = N;
|
||||
while (FirstHiddenNode->pred_size() == 1 &&
|
||||
isNodeHidden(*FirstHiddenNode->pred_begin())) {
|
||||
FirstHiddenNode = *FirstHiddenNode->pred_begin();
|
||||
}
|
||||
const ExplodedNode *OtherNode = FirstHiddenNode;
|
||||
while (true) {
|
||||
PreCallback(OtherNode);
|
||||
if (Stop(OtherNode))
|
||||
PreCallback(N);
|
||||
if (Stop(N))
|
||||
return true;
|
||||
|
||||
if (OtherNode == N)
|
||||
if (N->succ_size() != 1 || !isNodeHidden(N->getFirstSucc()))
|
||||
break;
|
||||
PostCallback(OtherNode);
|
||||
PostCallback(N);
|
||||
|
||||
OtherNode = *OtherNode->succ_begin();
|
||||
N = N->getFirstSucc();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -18,10 +18,30 @@ int foo() {
|
|||
return *x + *y;
|
||||
}
|
||||
|
||||
// CHECK: \"program_points\": [\l \{ \"kind\": \"Edge\", \"src_id\": 2, \"dst_id\": 1, \"terminator\": null, \"term_kind\": null, \"tag\": null, \"node_id\": 1, \"is_sink\": 0, \"has_report\": 0 \}\l ],\l \"program_state\": null
|
||||
|
||||
// CHECK: \"program_points\": [\l \{ \"kind\": \"BlockEntrance\", \"block_id\": 1
|
||||
|
||||
// CHECK: \"program_points\": [\l
|
||||
// CHECK-SAME: \{ \"kind\": \"Edge\", \"src_id\": 2, \"dst_id\": 1,
|
||||
// CHECK-SAME: \"terminator\": null, \"term_kind\": null, \"tag\": null,
|
||||
// CHECK-SAME: \"node_id\": 1, \"is_sink\": 0, \"has_report\": 0
|
||||
// CHECK-SAME: \},
|
||||
// CHECK-SAME: \{ \"kind\": \"BlockEntrance\", \"block_id\": 1, \"tag\": null,
|
||||
// CHECK-SAME: \"node_id\": 2, \"is_sink\": 0, \"has_report\": 0
|
||||
// CHECK-SAME: \},
|
||||
// CHECK-SAME: \{ \"kind\": \"Statement\", \"stmt_kind\": \"IntegerLiteral\",
|
||||
// CHECK-SAME: \"stmt_id\": 597, \"pointer\": \"0x{{[0-9a-f]*}}\",
|
||||
// CHECK-SAME: \"pretty\": \"0\", \"location\": \{
|
||||
// CHECK-SAME: \"line\": 15, \"column\": 12, \"file\":
|
||||
// CHECK-SAME: \}, \"stmt_point_kind\": \"PreStmtPurgeDeadSymbols\",
|
||||
// CHECK-SAME: \"tag\": \"ExprEngine : Clean Node\", \"node_id\": 3,
|
||||
// CHECK-SAME: \"is_sink\": 0, \"has_report\": 0
|
||||
// CHECK-SAME: \},
|
||||
// CHECK-SAME: \{ \"kind\": \"Statement\", \"stmt_kind\": \"IntegerLiteral\",
|
||||
// CHECK-SAME: \"stmt_id\": 597, \"pointer\": \"0x{{[0-9a-f]*}}\",
|
||||
// CHECK-SAME: \"pretty\": \"0\", \"location\": \{
|
||||
// CHECK-SAME: \"line\": 15, \"column\": 12, \"file\":
|
||||
// CHECK-SAME: \}, \"stmt_point_kind\": \"PostStmt\", \"tag\": null,
|
||||
// CHECK-SAME: \"node_id\": 4, \"is_sink\": 0, \"has_report\": 0
|
||||
// CHECK-SAME: \}
|
||||
// CHECK-SAME: ]
|
||||
|
||||
// CHECK: \"pretty\": \"*x\", \"location\": \{ \"line\": 18, \"column\": 10, \"file\": \"{{(.+)}}dump_egraph.c\" \}
|
||||
|
||||
|
|
Loading…
Reference in New Issue