Author: Carl Friedrich Bolz <[email protected]>
Branch:
Changeset: r69613:366c6b15a89b
Date: 2014-03-02 14:17 +0100
http://bitbucket.org/pypy/pypy/changeset/366c6b15a89b/
Log: try to print the class of the virtual that is being promoted
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py
b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -271,7 +271,13 @@
def optimize_GUARD_VALUE(self, op):
value = self.getvalue(op.getarg(0))
if value.is_virtual():
- raise InvalidLoop('A promote of a virtual (a recently allocated
object) never makes sense!')
+ arg = value.get_constant_class(self.optimizer.cpu)
+ if arg:
+ addr = arg.getaddr()
+ name = self.optimizer.metainterp_sd.get_name_from_address(addr)
+ else:
+ name = "<unknown>"
+ raise InvalidLoop('A promote of a virtual %s (a recently allocated
object) never makes sense!' % name)
if value.last_guard:
# there already has been a guard_nonnull or guard_class or
# guard_nonnull_class on this value, which is rather silly.
diff --git
a/rpython/jit/metainterp/optimizeopt/test/test_disable_optimizations.py
b/rpython/jit/metainterp/optimizeopt/test/test_disable_optimizations.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_disable_optimizations.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_disable_optimizations.py
@@ -35,8 +35,8 @@
def raises(self, e, fn, *args):
try:
fn(*args)
- except e:
- pass
+ except Exception, e:
+ return e
opt = allopts[optnum]
exec "TestNo%sLLtype = TestLLtype" % (opt[0].upper() + opt[1:])
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -91,7 +91,7 @@
return loop
def raises(self, e, fn, *args):
- py.test.raises(e, fn, *args)
+ return py.test.raises(e, fn, *args).value
class OptimizeOptTest(BaseTestWithUnroll):
@@ -2824,8 +2824,10 @@
guard_value(p2, ConstPtr(myptr)) []
jump(p2)
"""
- self.raises(InvalidLoop, self.optimize_loop,
- ops, "crash!")
+ exc = self.raises(InvalidLoop, self.optimize_loop,
+ ops, "crash!")
+ if exc:
+ assert "node" in exc.msg
def test_merge_guard_class_guard_value(self):
ops = """
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -321,6 +321,13 @@
max_retrace_guards = 15
jitcounter = DeterministicJitCounter()
+ def get_name_from_address(self, addr):
+ # hack
+ try:
+ return "".join(addr.ptr.name)[:-1] # remove \x00
+ except AttributeError:
+ return ""
+
class Storage(compile.ResumeGuardDescr):
"for tests."
def __init__(self, metainterp_sd=None, original_greenkey=None):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit