Type mismatch from SETQing lexical variables used to dump CTYPE
structs directly. Splice a type specifier in instead during
IR1 conversion of SETQ so that the source form remains dumpable.
Reported with the test case by Xach on #lisp.
Fixes lp#890750.
resolved to directories.
* bug fix: SB-KERNEL:MAKE-LISP-OBJ on GENCGC no longer categorically
refuses to create SIMPLE-FUN objects.
+ * bug fix: type mismatch when assigning to lexical variables no longer
+ result in fasl-dumping internal type objects. (lp#890750)
changes in sbcl-1.0.53 relative to sbcl-1.0.52:
* enhancement: on 64-bit targets, in src/compiler/generic/early-vm.lisp,
(dest-lvar (make-lvar))
(type (or (lexenv-find var type-restrictions)
(leaf-type var))))
- (ir1-convert start dest-ctran dest-lvar `(the ,type ,value))
+ (ir1-convert start dest-ctran dest-lvar `(the ,(type-specifier type)
+ ,value))
(let ((res (make-set :var var :value dest-lvar)))
(setf (lvar-dest dest-lvar) res)
(setf (leaf-ever-used var) t)
EOF
expect_clean_cload $tmpfilename
+cat > $tmpfilename <<EOF
+(in-package :cl-user)
+
+(defun foo ()
+ (declare (muffle-conditions warning))
+ (let ((em 0d0))
+ (declare (type double-float em))
+ (dotimes (i 42)
+ (setf em (float (1+ i))))))
+EOF
+expect_clean_compile $tmpfilename
+
# success
exit $EXIT_TEST_WIN