[pypy-commit] pypy stackroot-speedup: (fijal, arigo)

arigo noreply at buildbot.pypy.org
Sat Jan 28 16:55:49 CET 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: stackroot-speedup
Changeset: r51912:20b7b00aefee
Date: 2012-01-28 16:55 +0100
http://bitbucket.org/pypy/pypy/changeset/20b7b00aefee/

Log:	(fijal, arigo)

	Test in progress.

diff --git a/pypy/rpython/memory/gctransform/test/test_framework.py b/pypy/rpython/memory/gctransform/test/test_framework.py
--- a/pypy/rpython/memory/gctransform/test/test_framework.py
+++ b/pypy/rpython/memory/gctransform/test/test_framework.py
@@ -332,3 +332,33 @@
     clean_setarrayitems = find_clean_setarrayitems(collect_analyzer,
                                                    t.graphs[0])
     assert len(clean_setarrayitems) == 1
+
+def test_contains_stack_check():
+    from pypy.translator.transform import insert_ll_stackcheck
+    from pypy.translator.c.genc import CStandaloneBuilder
+    #
+    class A:
+        pass
+    def f_non_recursive(n):
+        A()
+    def f_recursive(n):
+        A()
+        if n > 5:
+            f_recursive(n-1)
+    def f(n):
+        a = A()
+        f_non_recursive(n)
+        f_recursive(n)
+        return a
+
+    t = rtype(f, [int])
+    insert_ll_stackcheck(t)
+    g_non_recursive = t._graphof(f_non_recursive)
+    assert not hasattr(g_non_recursive, 'contains_stack_check')
+    g_recursive = t._graphof(f_recursive)
+    assert g_recursive.contains_stack_check is True
+    #
+    cbuild = CStandaloneBuilder(t, f, t.config,
+                                gcpolicy=FrameworkGcPolicy2)
+    db = cbuild.generate_graphs_for_llinterp()
+    import pdb; pdb.set_trace()
diff --git a/pypy/translator/transform.py b/pypy/translator/transform.py
--- a/pypy/translator/transform.py
+++ b/pypy/translator/transform.py
@@ -214,6 +214,8 @@
         # not consume any stack, so would turn into potentially infinite loops
         graph = block2graph[block]
         graph.inhibit_tail_call = True
+        # this other attribute is used by shadowstack.py
+        graph.contains_stack_check = True
     return len(insert_in)
 
 


More information about the pypy-commit mailing list