[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