diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-04-26 09:05:38 +0200 |
|---|---|---|
| committer | serpilliere <serpilliere@droids-corp.org> | 2020-02-15 15:39:10 +0100 |
| commit | 3473e177bfb5c0c34fe4644610e1e3f4ac6ba822 (patch) | |
| tree | 6d725e0804627b4a4b7e452a265adf424220f282 | |
| parent | e49bda765ae0a33bf4ce70660300f20544f9dee1 (diff) | |
| download | miasm-3473e177bfb5c0c34fe4644610e1e3f4ac6ba822.tar.gz miasm-3473e177bfb5c0c34fe4644610e1e3f4ac6ba822.zip | |
SSA: raise error on non connected graphs
| -rw-r--r-- | miasm/analysis/ssa.py | 5 |
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): """ |