#66: replace on simple-strings --------------------+------------------------------------------------------- Reporter: heller | Owner: somebody Type: defect | Status: new Priority: minor | Milestone: Component: Core | Version: 2012-12 Keywords: | --------------------+------------------------------------------------------- This code {{{ (deftype index () `(integer 0 #.array-total-size-limit))
(defun %move-string (from start end to index) (declare (type simple-string from to) (type index start end index)) (replace to from :start1 index :start2 start :end2 end))
(let ((x (make-string 35893164))) (%move-string x 4 4 x 35893164) nil) }}} when executed with `(load (compile-file "test.lisp"))` produces this error: {{{ Type-error in kernel::object-not-type-error-handler: -499451136 is not of type (mod 536870911) [Condition of type type-error] }}} I don't see the bug in my code, so it seems to be a bug in CMUCL.
lisp-implementation-version returns "snapshot-2012-12 (20D Unicode)"
#66: replace on simple-strings --------------------+------------------------------------------------------- Reporter: heller | Owner: somebody Type: defect | Status: new Priority: minor | Milestone: Component: Core | Version: 2012-12 Keywords: | --------------------+-------------------------------------------------------
Comment(by rtoy):
It's a bug in the {{{DEFTRANSFORM}}} for {{{REPLACE}}}. It uses {{{BIT- BASH-COPY}}} to copy things around and {{{BIT-BASH-COPY}}} uses bit indices. Characters are 16 bits (for unicode builds) so the size (35893164) times 16 overflows a fixnum.
Thanks for the report.
#66: replace on simple-strings ---------------------+------------------------------------------------------ Reporter: heller | Owner: somebody Type: defect | Status: closed Priority: minor | Milestone: Component: Core | Version: 2012-12 Resolution: fixed | Keywords: ---------------------+------------------------------------------------------ Changes (by rtoy):
* status: new => closed * resolution: => fixed
Comment:
Oops. This was fixed in commit cdf11377fbdb369d3a3810dd9bd01a8a73007255
There are still issues with very long strings; this needs to be solved in a different way.