Skip to content

Commit

Permalink
1.0.24.40: fix regression from 1.0.24.37
Browse files Browse the repository at this point in the history
 * TNs with KIND :CONSTANT don't have leaves if they represent load
   time values.

 * Reported by Attila Lendvai.
  • Loading branch information
nikodemus committed Jan 12, 2009
1 parent 5234b3c commit 26839b3
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 10 deletions.
4 changes: 3 additions & 1 deletion package-data-list.lisp-expr
Expand Up @@ -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"
Expand Down
10 changes: 10 additions & 0 deletions src/compiler/tn.lisp
Expand Up @@ -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
Expand Down
4 changes: 0 additions & 4 deletions src/compiler/x86-64/pred.lisp
Expand Up @@ -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
Expand Down
4 changes: 0 additions & 4 deletions src/compiler/x86/pred.lisp
Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions tests/compiler.pure.lisp
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion version.lisp-expr
Expand Up @@ -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.24.39"
"1.0.24.40"

0 comments on commit 26839b3

Please sign in to comment.