Author: Armin Rigo <ar...@tunes.org> Branch: ffi-backend Changeset: r56635:16860593dc11 Date: 2012-08-07 15:46 +0200 http://bitbucket.org/pypy/pypy/changeset/16860593dc11/
Log: Add an assert that prevents "ffi_cif" from being written in the C code if OS_LIBFFI_CALL is never used. Fixes x86/test/test_zrpy_gc. diff --git a/pypy/jit/codewriter/call.py b/pypy/jit/codewriter/call.py --- a/pypy/jit/codewriter/call.py +++ b/pypy/jit/codewriter/call.py @@ -16,6 +16,7 @@ class CallControl(object): virtualref_info = None # optionally set from outside + has_libffi_call = False # default value def __init__(self, cpu=None, jitdrivers_sd=[]): assert isinstance(jitdrivers_sd, list) # debugging diff --git a/pypy/jit/codewriter/jtransform.py b/pypy/jit/codewriter/jtransform.py --- a/pypy/jit/codewriter/jtransform.py +++ b/pypy/jit/codewriter/jtransform.py @@ -1731,6 +1731,7 @@ if oopspec_name == 'libffi_call': oopspecindex = EffectInfo.OS_LIBFFI_CALL extraeffect = EffectInfo.EF_RANDOM_EFFECTS + self.callcontrol.has_libffi_call = True else: assert False, 'unsupported oopspec: %s' % oopspec_name return self._handle_oopspec_call(op, args, oopspecindex, extraeffect) diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py --- a/pypy/jit/metainterp/pyjitpl.py +++ b/pypy/jit/metainterp/pyjitpl.py @@ -1486,6 +1486,7 @@ self.jitdrivers_sd = codewriter.callcontrol.jitdrivers_sd self.virtualref_info = codewriter.callcontrol.virtualref_info self.callinfocollection = codewriter.callcontrol.callinfocollection + self.has_libffi_call = codewriter.callcontrol.has_libffi_call # # store this information for fastpath of call_assembler # (only the paths that can actually be taken) @@ -2539,6 +2540,10 @@ """Generate a direct call to C code, patching the CALL_MAY_FORCE to jit_ffi_call() that occurred just now. """ + # an 'assert' that constant-folds away the rest of this function + # if the codewriter didn't produce any OS_LIBFFI_CALL at all. + assert self.staticdata.has_libffi_call + # from pypy.rpython.lltypesystem import llmemory from pypy.rlib.jit_libffi import CIF_DESCRIPTION_P from pypy.jit.backend.llsupport.ffisupport import get_arg_descr _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit