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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.