master: Warn about bad subseq ranges after transforming (concatenate .. (subseq ..))
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 ca4a7476645288c0370d52ec87a3b01ad88b29d4 (commit)
from a29743a9a4535a012e92fedfbe9d82cbcfa1adac (commit)
- Log -----------------------------------------------------------------
commit ca4a7476645288c0370d52ec87a3b01ad88b29d4
Author: Stas Boukarev <[email protected]>
Date: Fri Apr 17 23:48:12 2026 +0300
Warn about bad subseq ranges after transforming (concatenate .. (subseq ..))
---
src/compiler/srctran.lisp | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/src/compiler/srctran.lisp b/src/compiler/srctran.lisp
index bc861db43..4c722a27c 100644
--- a/src/compiler/srctran.lisp
+++ b/src/compiler/srctran.lisp
@@ -453,6 +453,31 @@
(defoptimizer (%concatenate-to-vector-subseq externally-checkable-type) ((type &rest args) node lvar)
(concatenate-subseq-type lvar args))
+(defun concatenate-subseq-check-ranges (args node)
+ (loop while args
+ do (let ((arg (pop args)))
+ (when (constant-lvar-p arg)
+ (case (lvar-value arg)
+ (sb-impl::%subseq
+ (check-sequence-ranges (pop args) (pop args) (pop args) node))
+ (sb-impl::%splice
+ (loop repeat (lvar-value (pop args))
+ do (pop args)))
+ (sb-impl::%repeat
+ (pop args)
+ (pop args)))))))
+
+(defoptimizer (%concatenate-to-string-subseq ir2-hook) ((&rest args) node)
+ (concatenate-subseq-check-ranges args node))
+(defoptimizer (%concatenate-to-base-string-subseq ir2-hook) ((&rest args) node)
+ (concatenate-subseq-check-ranges args node))
+(defoptimizer (%concatenate-to-list-subseq ir2-hook) ((&rest args) node)
+ (concatenate-subseq-check-ranges args node))
+(defoptimizer (%concatenate-to-simple-vector-subseq ir2-hook) ((&rest args) node)
+ (concatenate-subseq-check-ranges args node))
+(defoptimizer (%concatenate-to-vector-subseq ir2-hook) ((type &rest args) node)
+ (concatenate-subseq-check-ranges args node))
+
(defoptimizer (%concatenate-to-list derive-type) ((&rest args))
(loop for arg in args
for min = (nth-value 1 (sequence-lvar-dimensions arg))
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL