From 9ce0d4443f09a65fed9ab87d4e96886fa8fa1c3a Mon Sep 17 00:00:00 2001 From: Xinlong Hu Date: Fri, 18 Jul 2025 21:01:50 -0500 Subject: [PATCH] Updated conditions for encompassed nodes --- .../control_flow_reconstruction/templates/Loop.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pylingual/control_flow_reconstruction/templates/Loop.py b/pylingual/control_flow_reconstruction/templates/Loop.py index ea852fb..f2d26f5 100644 --- a/pylingual/control_flow_reconstruction/templates/Loop.py +++ b/pylingual/control_flow_reconstruction/templates/Loop.py @@ -140,7 +140,7 @@ class FixLoop(ControlFlowTemplate): encompassed_nodes = [ v for u, v, d in dfs_edges if d == "forward" and v != node - ][1:] + ] edges_to_remove = [] # Find the candidate end that break connect to @@ -160,7 +160,13 @@ class FixLoop(ControlFlowTemplate): if encompassed_nodes is not None: for succ in encompassed_nodes: if cfg.get_edge_data(succ, candidate_end) != None: - edges_to_remove.append((succ, candidate_end)) + for parent in cfg.predecessors(succ): + if parent in encompassed_nodes: + continue + else: + break + else: + edges_to_remove.append((succ, candidate_end)) valid = [] for pred, succ in edges_to_remove: