Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r68351:d95d0c9bb988
Date: 2013-12-01 20:34 +0100
http://bitbucket.org/pypy/pypy/changeset/d95d0c9bb988/

Log:    Fix

diff --git a/rpython/translator/c/gcc/trackgcroot.py 
b/rpython/translator/c/gcc/trackgcroot.py
--- a/rpython/translator/c/gcc/trackgcroot.py
+++ b/rpython/translator/c/gcc/trackgcroot.py
@@ -149,6 +149,14 @@
             else:
                 del self.insns[i]
 
+        # the remaining instructions must have their 'previous_insns' list
+        # trimmed of dead previous instructions
+        all_remaining_insns = set(self.insns)
+        assert self.insns[0].previous_insns == ()
+        for insn in self.insns[1:]:
+            insn.previous_insns = [previnsn for previnsn in insn.previous_insns
+                                            if previnsn in all_remaining_insns]
+
     def find_noncollecting_calls(self):
         cannot_collect = {}
         for line in self.lines:
@@ -286,6 +294,17 @@
                     else:
                         insn1.framesize = size_at_insn1
 
+        # trim: instructions with no framesize are removed from self.insns,
+        # and from the 'previous_insns' lists
+        assert hasattr(self.insns[0], 'framesize')
+        old = self.insns[1:]
+        del self.insns[1:]
+        for insn in old:
+            if hasattr(insn, 'framesize'):
+                self.insns.append(insn)
+                insn.previous_insns = [previnsn for previnsn in 
insn.previous_insns
+                                                if hasattr(previnsn, 
'framesize')]
+
     def fixlocalvars(self):
         def fixvar(localvar):
             if localvar is None:
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to