fhdl.ir: don't crash propagataing ports in empty fragments.

This commit is contained in:
whitequark 2018-12-13 11:25:49 +00:00
parent 72257b6935
commit b150f1915d
2 changed files with 10 additions and 2 deletions

View file

@ -131,8 +131,8 @@ class Fragment:
def _propagate_ports(self, ports): def _propagate_ports(self, ports):
# Collect all signals we're driving (on LHS of statements), and signals we're using # Collect all signals we're driving (on LHS of statements), and signals we're using
# (on RHS of statements, or in clock domains). # (on RHS of statements, or in clock domains).
self_driven = union(s._lhs_signals() for s in self.statements) self_driven = union(s._lhs_signals() for s in self.statements) or ValueSet()
self_used = union(s._rhs_signals() for s in self.statements) self_used = union(s._rhs_signals() for s in self.statements) or ValueSet()
for domain, _ in self.iter_sync(): for domain, _ in self.iter_sync():
cd = self.domains[domain] cd = self.domains[domain]
self_used.add(cd.clk) self_used.add(cd.clk)

View file

@ -13,6 +13,14 @@ class FragmentPortsTestCase(FHDLTestCase):
self.c2 = Signal() self.c2 = Signal()
self.c3 = Signal() self.c3 = Signal()
def test_empty(self):
f = Fragment()
ins, outs = f._propagate_ports(ports=())
self.assertEqual(ins, ValueSet())
self.assertEqual(outs, ValueSet())
self.assertEqual(f.ports, ValueSet())
def test_self_contained(self): def test_self_contained(self):
f = Fragment() f = Fragment()
f.add_statements( f.add_statements(