[pypy-commit] pypy stmgc-c7: With STM, lightweight finalizers must not contain any setfield.
arigo
noreply at buildbot.pypy.org
Wed Nov 12 11:24:32 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-c7
Changeset: r74474:0c90b2da771b
Date: 2014-11-12 11:24 +0100
http://bitbucket.org/pypy/pypy/changeset/0c90b2da771b/
Log: With STM, lightweight finalizers must not contain any setfield.
diff --git a/rpython/translator/backendopt/finalizer.py b/rpython/translator/backendopt/finalizer.py
--- a/rpython/translator/backendopt/finalizer.py
+++ b/rpython/translator/backendopt/finalizer.py
@@ -33,11 +33,13 @@
if (op.opname.startswith('int_') or op.opname.startswith('float_')
or op.opname.startswith('uint_') or op.opname.startswith('cast_')):
return self.bottom_result()
- if op.opname == 'setfield' or op.opname == 'bare_setfield':
- TP = op.args[2].concretetype
- if not isinstance(TP, lltype.Ptr) or TP.TO._gckind == 'raw':
- # primitive type
- return self.bottom_result()
+ ## # All setfields are forbidden. Commented out in test_finalizer too.
+ ## # This is needed for STM and could maybe be justified in general.
+ ## if op.opname == 'setfield' or op.opname == 'bare_setfield':
+ ## TP = op.args[2].concretetype
+ ## if not isinstance(TP, lltype.Ptr) or TP.TO._gckind == 'raw':
+ ## # primitive type
+ ## return self.bottom_result()
if op.opname == 'getfield':
TP = op.result.concretetype
if not isinstance(TP, lltype.Ptr) or TP.TO._gckind == 'raw':
diff --git a/rpython/translator/backendopt/test/test_finalizer.py b/rpython/translator/backendopt/test/test_finalizer.py
--- a/rpython/translator/backendopt/test/test_finalizer.py
+++ b/rpython/translator/backendopt/test/test_finalizer.py
@@ -53,12 +53,12 @@
v2 = varoftype(lltype.Signed)
v3 = varoftype(X)
v4 = varoftype(Z)
- assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('x'),
- v2], None))
+ ## assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('x'),
+ ## v2], None))
assert f.analyze(SpaceOperation('bare_setfield', [v1, Constant('y'),
v3], None))
- assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('z'),
- v4], None))
+ ## assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('z'),
+ ## v4], None))
def test_malloc(self):
S = lltype.GcStruct('S')
More information about the pypy-commit
mailing list