Author: Armin Rigo <[email protected]>
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')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit