Author: Armin Rigo <[email protected]>
Branch: improve-vmprof-testing
Changeset: r86056:cde94224c375
Date: 2016-08-07 11:32 +0200
http://bitbucket.org/pypy/pypy/changeset/cde94224c375/

Log:    Trying but failing to write a test

diff --git a/rpython/jit/backend/test/test_rvmprof.py 
b/rpython/jit/backend/test/test_rvmprof.py
--- a/rpython/jit/backend/test/test_rvmprof.py
+++ b/rpython/jit/backend/test/test_rvmprof.py
@@ -111,3 +111,44 @@
         cintf.vmprof_tl_stack.setraw(null)
         self.meta_interp(main, [30], inline=True)
         assert visited[:3] == [[(1, 12), (1, 8)], [(1, 12), (1, 8)], [(1, 12), 
(1, 8)]]
+
+
+    def test_leaving_with_exception_in_blackhole(self):
+        visited, llfn, CodeObj, get_code_fn, get_name = self.misc
+        driver = jit.JitDriver(greens=['code'], reds=['c', 'i', 'n', 'codes'])
+
+        class MyExc(Exception):
+            def __init__(self, c):
+                self.c = c
+
+        @vmprof_execute_code("main", get_code_fn,
+                             _hack_update_stack_untranslated=True)
+        def f(codes, code, n, c):
+            i = 0
+            while i < n:
+                driver.jit_merge_point(code=code, c=c, i=i, codes=codes, n=n)
+                if code.name == "main":
+                    try:
+                        f(codes, codes[1], 1, c)
+                    except MyExc as e:
+                        c = e.c
+                else:
+                    llfn()
+                    c -= 1
+                i += 1
+            jit.promote(c + 5)     # failing guard
+            raise MyExc(c)
+
+        def main(n):
+            codes = [CodeObj("main"), CodeObj("not main")]
+            for code in codes:
+                register_code(code, get_name)
+            try:
+                f(codes, codes[0], n, 8)
+            except MyExc as e:
+                return e.c
+
+        null = lltype.nullptr(cintf.VMPROFSTACK)
+        cintf.vmprof_tl_stack.setraw(null)
+        self.meta_interp(main, [30], inline=True)
+        assert visited[:3] == [[(1, 12), (1, 8)], [(1, 12), (1, 8)], [(1, 12), 
(1, 8)]]
diff --git a/rpython/jit/metainterp/blackhole.py 
b/rpython/jit/metainterp/blackhole.py
--- a/rpython/jit/metainterp/blackhole.py
+++ b/rpython/jit/metainterp/blackhole.py
@@ -375,6 +375,16 @@
                 target = ord(code[position+1]) | (ord(code[position+2])<<8)
                 self.position = target
                 return
+            if opcode == self.op_rvmprof_code:
+                import pdb;pdb.set_trace()
+                # do the 'jit_rvmprof_code(1)' for rvmprof, but then
+                # continue popping frames.  Decode jit_rvmprof_code
+                # manually here.
+                from rpython.rlib.rvmprof import cintf
+                arg1 = self.registers_i[ord(code[position + 1])]
+                arg2 = self.registers_i[ord(code[position + 2])]
+                assert arg1 == 1
+                cintf.jit_rvmprof_code(arg1, arg2)
         # no 'catch_exception' insn follows: just reraise
         reraise(e)
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to