about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2019-04-26 09:05:38 +0200
committerserpilliere <serpilliere@droids-corp.org>2020-02-15 15:39:10 +0100
commit3473e177bfb5c0c34fe4644610e1e3f4ac6ba822 (patch)
tree6d725e0804627b4a4b7e452a265adf424220f282
parente49bda765ae0a33bf4ce70660300f20544f9dee1 (diff)
downloadmiasm-3473e177bfb5c0c34fe4644610e1e3f4ac6ba822.tar.gz
miasm-3473e177bfb5c0c34fe4644610e1e3f4ac6ba822.zip
SSA: raise error on non connected graphs
-rw-r--r--miasm/analysis/ssa.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/miasm/analysis/ssa.py b/miasm/analysis/ssa.py
index 8e0b6838..7f0b0f13 100644
--- a/miasm/analysis/ssa.py
+++ b/miasm/analysis/ssa.py
@@ -423,12 +423,13 @@ class SSADiGraph(SSA):
         a set of IRBlocks in which the variable gets assigned
         """
 
+        visited_loc = set()
         for loc_key in self.graph.walk_depth_first_forward(head):
             irblock = self.get_block(loc_key)
             if irblock is None:
                 # Incomplete graph
                 continue
-
+            visited_loc.add(loc_key)
             # search for block's IR definitions/destinations
             for assignblk in irblock.assignblks:
                 for dst in assignblk:
@@ -439,6 +440,8 @@ class SSADiGraph(SSA):
                             continue
                         # map variable definition to blocks
                         self.defs.setdefault(dst, set()).add(irblock.loc_key)
+        if visited_loc != set(self.graph.blocks):
+            raise RuntimeError("Cannot operate on a non connected graph")
 
     def _place_phi(self, head):
         """