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

Reply via email to