Author: dergachev Date: Fri Oct 18 13:15:29 2019 New Revision: 375278 URL: http://llvm.org/viewvc/llvm-project?rev=375278&view=rev Log: [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 Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp cfe/trunk/test/Analysis/dump_egraph.c Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=375278&r1=375277&r2=375278&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp Fri Oct 18 13:15:29 2019 @@ -3030,22 +3030,16 @@ struct DOTGraphTraits<ExplodedGraph*> : 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; } Modified: cfe/trunk/test/Analysis/dump_egraph.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/dump_egraph.c?rev=375278&r1=375277&r2=375278&view=diff ============================================================================== --- cfe/trunk/test/Analysis/dump_egraph.c (original) +++ cfe/trunk/test/Analysis/dump_egraph.c Fri Oct 18 13:15:29 2019 @@ -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\" \} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits