From c91d26129c41671ad9971b0e03ec8ce05d670bdf Mon Sep 17 00:00:00 2001 From: Ali Rezvani <3788964+rzvxa@users.noreply.github.com> Date: Fri, 10 May 2024 17:41:25 +0330 Subject: [PATCH] fix(semantic): connect `test` expression of `for` statements to the cfg. (#3122) I don't know if it is correct or not, Fixes my issues with dangling cfg nodes created in for statements. #3071 --- crates/oxc_semantic/src/builder.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/oxc_semantic/src/builder.rs b/crates/oxc_semantic/src/builder.rs index 00bbe64fe..094135fb2 100644 --- a/crates/oxc_semantic/src/builder.rs +++ b/crates/oxc_semantic/src/builder.rs @@ -785,6 +785,7 @@ impl<'a> Visit<'a> for SemanticBuilder<'a> { } /* cfg */ + let after_test_graph_ix = self.cfg.current_node_ix; let update_graph_ix = self.cfg.new_basic_block(); /* cfg */ @@ -803,10 +804,10 @@ impl<'a> Visit<'a> for SemanticBuilder<'a> { /* cfg */ let after_for_stmt = self.cfg.new_basic_block(); self.cfg.add_edge(before_for_graph_ix, test_graph_ix, EdgeType::Normal); - self.cfg.add_edge(test_graph_ix, body_graph_ix, EdgeType::Normal); + self.cfg.add_edge(after_test_graph_ix, body_graph_ix, EdgeType::Normal); self.cfg.add_edge(body_graph_ix, update_graph_ix, EdgeType::Backedge); self.cfg.add_edge(update_graph_ix, test_graph_ix, EdgeType::Backedge); - self.cfg.add_edge(test_graph_ix, after_for_stmt, EdgeType::Normal); + self.cfg.add_edge(after_test_graph_ix, after_for_stmt, EdgeType::Normal); self.cfg.after_statement( &statement_state,