1.0.10.47: proper fix for "high-debug-known-function-inlining"
authorNikodemus Siivola <nikodemus@random-state.net>
Thu, 18 Oct 2007 12:56:51 +0000 (12:56 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Thu, 18 Oct 2007 12:56:51 +0000 (12:56 +0000)
* 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.

NEWS
src/compiler/ir1opt.lisp
src/compiler/ir2tran.lisp
src/compiler/node.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 0447527..065cc81 100644 (file)
--- 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
index 78ae5a8..98a5a93 100644 (file)
              (: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)))
index ebc963c..c28e37e 100644 (file)
                (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)))
          (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)
index 134a608..9896b06 100644 (file)
   (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
index 2502575..06be281 100644 (file)
@@ -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"