master: Fix ldb transforms
stassats via Sbcl-commits <[email protected]>
| Newsgroups | gmane.lisp.steel-bank.cvs |
|---|---|
| Message-ID | <[email protected]> |
The branch "master" has been updated in SBCL:
via 06151ad1c15b0097deaa12176e999f278f6747ab (commit)
from 0a1f43ff5d5fbc95ad8aa41ac02b4d157b9e3413 (commit)
- Log -----------------------------------------------------------------
commit 06151ad1c15b0097deaa12176e999f278f6747ab
Author: Stas Boukarev <[email protected]>
Date: Mon Aug 17 18:23:13 2026 +0300
Fix ldb transforms
erase-node-type has to be called with value-types.
Reported by Eric Marsden.
---
src/compiler/ir1util.lisp | 25 ++++++++++++++-----------
src/compiler/srctran.lisp | 4 ++--
2 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/src/compiler/ir1util.lisp b/src/compiler/ir1util.lisp
index daab5d181..dad020266 100644
--- a/src/compiler/ir1util.lisp
+++ b/src/compiler/ir1util.lisp
@@ -652,17 +652,20 @@
(defun erase-node-type (node type &optional nth-value erase-calls)
(setf (node-derived-type node)
- (if (eq type t)
- (let ((derived (node-derived-type node)))
- (make-values-type
- (loop for i from 0
- for r in (values-type-required derived)
- collect (if (= i nth-value)
- *universal-type*
- r))
- (values-type-optional derived)
- (values-type-rest derived)))
- type))
+ (cond ((eq type t)
+ (let ((derived (node-derived-type node)))
+ (make-values-type
+ (loop for i from 0
+ for r in (values-type-required derived)
+ collect (if (= i nth-value)
+ *universal-type*
+ r))
+ (values-type-optional derived)
+ (values-type-rest derived))))
+ (t
+ (aver (or (eq type *wild-type*)
+ (values-type-p type)))
+ type)))
(erase-lvar-type (node-lvar node) nth-value erase-calls))
;;; The uses need to have the correct type before calling this.
diff --git a/src/compiler/srctran.lisp b/src/compiler/srctran.lisp
index 9c9416ae6..6c87e24d9 100644
--- a/src/compiler/srctran.lisp
+++ b/src/compiler/srctran.lisp
@@ -3621,7 +3621,7 @@
(cond ((and (<= mask most-positive-word)
(or (combination-matches '= '(* 0) (node-dest node))
(combination-matches '> '(* 0) (node-dest node))))
- (erase-node-type node (specifier-type 'word))
+ (erase-node-type node (values-specifier-type '(values word &optional)))
`(logand integer ,mask))
(t
(give-up-ir1-transform)))))
@@ -3630,7 +3630,7 @@
(deftransform %mask-field ((size posn int) * * :node node)
(cond ((or (combination-matches '= '(* 0) (node-dest node))
(combination-matches '> '(* 0) (node-dest node)))
- (erase-node-type node (specifier-type 'unsigned-byte))
+ (erase-node-type node (values-specifier-type '(values unsigned-byte &optional)))
`(%ldb size posn int))
(t
(give-up-ir1-transform))))
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL