From: Nikodemus Siivola Date: Thu, 18 Oct 2007 12:56:51 +0000 (+0000) Subject: 1.0.10.47: proper fix for "high-debug-known-function-inlining" X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=e066009ccdb61d10a6c6a640d59f402112973029;p=sbcl.git 1.0.10.47: proper fix for "high-debug-known-function-inlining" * Add ALLOW-INSTRUMENTING slot to CLAMBDA, taking it's value from *ALLOW-INSTRUMENTING*. * Require LAMBDA-ALLOW-INSTRUMENTING to be true for emission of BIND/UNBIND-SENTINEL. * Remove the earlier KLUDGE workaround. --- diff --git a/NEWS b/NEWS index 0447527..065cc81 100644 --- a/NEWS +++ b/NEWS @@ -28,6 +28,7 @@ changes in sbcl-1.0.11 relative to sbcl-1.0.10: * bug fix: instances of non-standard metaclasses using standard instance structure protocol sometimes missed the slot type checks in safe code. + * bug fix: known functions can be inlined in high-debug code. changes in sbcl-1.0.10 relative to sbcl-1.0.9: * minor incompatible change: the MSI installer on Windows no longer diff --git a/src/compiler/ir1opt.lisp b/src/compiler/ir1opt.lisp index 78ae5a8..98a5a93 100644 --- a/src/compiler/ir1opt.lisp +++ b/src/compiler/ir1opt.lisp @@ -843,12 +843,6 @@ (:inline t) (:no-chance nil) ((nil :maybe-inline) (policy call (zerop space)))) - ;; FIXME & KLUDGE: This LET-CONVERSION check was added as a - ;; half-assed workaround for the bug for which the test - ;; case :HIGH-DEBUG-KNOWN-FUNCTION-INLINING checks in - ;; compiler.pure.lisp. The _real_ culprit seems to be - ;; the insertion of BIND/UNBIND-SENTINEL vops. - (policy call (plusp let-conversion)) (defined-fun-p leaf) (defined-fun-inline-expansion leaf) (let ((fun (defined-fun-functional leaf))) diff --git a/src/compiler/ir2tran.lisp b/src/compiler/ir2tran.lisp index ebc963c..c28e37e 100644 --- a/src/compiler/ir2tran.lisp +++ b/src/compiler/ir2tran.lisp @@ -1181,8 +1181,9 @@ (ir2-physenv-return-pc env)) #!+unwind-to-frame-and-call-vop - (when (and (policy fun (>= insert-debug-catch 2)) - (lambda-return fun)) + (when (and (lambda-allow-instrumenting fun) + (lambda-return fun) + (policy fun (>= insert-debug-catch 2))) (vop sb!vm::bind-sentinel node block)) (let ((lab (gen-label))) @@ -1211,7 +1212,8 @@ (return-pc (ir2-physenv-return-pc env)) (returns (tail-set-info (lambda-tail-set fun)))) #!+unwind-to-frame-and-call-vop - (when (policy fun (>= insert-debug-catch 2)) + (when (and (lambda-allow-instrumenting fun) + (policy fun (>= insert-debug-catch 2))) (vop sb!vm::unbind-sentinel node block)) (cond ((and (eq (return-info-kind returns) :fixed) diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index 134a608..9896b06 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -962,7 +962,8 @@ (call-lexenv nil :type (or lexenv null)) ;; list of embedded lambdas (children nil :type list) - (parent nil :type (or clambda null))) + (parent nil :type (or clambda null)) + (allow-instrumenting *allow-instrumenting* :type boolean)) (defprinter (clambda :conc-name lambda- :identity t) %source-name %debug-name diff --git a/version.lisp-expr b/version.lisp-expr index 2502575..06be281 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.10.46" +"1.0.10.47"