[pypy-commit] pypy default: Fix

arigo noreply at buildbot.pypy.org
Sun Dec 1 20:35:24 CET 2013


Author: Armin Rigo <arigo at 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:


More information about the pypy-commit mailing list