Opened 12 years ago
Closed 12 years ago
#66 closed defect (fixed)
replace on simple-strings
Reported by: | Helmut Eller | Owned by: | somebody |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | Core | Version: | 2012-12 |
Keywords: | Cc: |
Description
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)"
Change History (2)
comment:1 Changed 12 years ago by
comment:2 Changed 12 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
Oops. This was fixed in commit cdf11377fbdb369d3a3810dd9bd01a8a73007255
There are still issues with very long strings; this needs to be solved in a different way.
Note: See
TracTickets for help on using
tickets.
It's a bug in the
DEFTRANSFORM
forREPLACE
. It usesBIT-BASH-COPY
to copy things around andBIT-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.