Commit 26839b37 authored by Nikodemus Siivola's avatar Nikodemus Siivola
Browse files

1.0.24.40: fix regression from 1.0.24.37

 * TNs with KIND :CONSTANT don't have leaves if they represent load
   time values.

 * Reported by Attila Lendvai.
parent 5234b3ca
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -276,7 +276,9 @@ of SBCL which maintained the CMU-CL-style split into two packages.)"
               "GET-VECTOR-SUBTYPE"
               "GET-TOPLEVELISH-FILE-INFO"
               "HALT"
               "IF-EQ" "INLINE-SYNTACTIC-CLOSURE-LAMBDA"
               "IF-EQ"
               "IMMEDIATE-TN-P"
               "INLINE-SYNTACTIC-CLOSURE-LAMBDA"
               "INSERT-STEP-CONDITIONS"
               "IR2-COMPONENT-CONSTANTS" "IR2-CONVERT"
               "IR2-PHYSENV-NUMBER-STACK-P"
+10 −0
Original line number Diff line number Diff line
@@ -445,6 +445,16 @@
  (aver (eq (tn-kind tn) :constant))
  (constant-value (tn-leaf tn)))

(defun immediate-tn-p (tn)
  (declare (type tn tn))
  (let ((leaf (tn-leaf tn)))
    ;; Leaves with KIND :CONSTANT can have NIL as the leaf if they
    ;; represent load time values.
    (and leaf
         (eq (tn-kind tn) :constant)
         (eq (immediate-constant-sc (constant-value leaf))
             (sc-number-or-lose 'sb!vm::immediate)))))

;;; Force TN to be allocated in a SC that doesn't need to be saved: an
;;; unbounded non-save-p SC. We don't actually make it a real "restricted" TN,
;;; but since we change the SC to an unbounded one, we should always succeed in
+0 −4
Original line number Diff line number Diff line
@@ -103,10 +103,6 @@
        (let ((scn (sc-number-or-lose representation)))
          (labels ((make-tn ()
                     (make-representation-tn ptype scn))
                   (immediate-tn-p (tn)
                     (and (eq (sb!c::tn-kind tn) :constant)
                          (eq (sb!c::immediate-constant-sc (tn-value tn))
                              (sc-number-or-lose 'immediate))))
                   (frob-tn (tn)
                     (if (immediate-tn-p tn)
                         tn
+0 −4
Original line number Diff line number Diff line
@@ -91,10 +91,6 @@
        (let ((scn (sc-number-or-lose representation)))
          (labels ((make-tn ()
                     (make-representation-tn ptype scn))
                   (immediate-tn-p (tn)
                     (and (eq (sb!c::tn-kind tn) :constant)
                          (eq (sb!c::immediate-constant-sc (tn-value tn))
                              (sc-number-or-lose 'immediate))))
                   (frob-tn (tn)
                     (if (immediate-tn-p tn)
                         tn
+5 −0
Original line number Diff line number Diff line
@@ -2691,6 +2691,11 @@
                       t)
              t)))

(with-test (:name :regression-1.0.24.37)
  (compile nil '(lambda (&key (test (constantly t)))
                 (when (funcall test)
                   :quux))))

;;; Attempt to test a decent cross section of conditions
;;; and values types to move conditionally.
(macrolet
Loading