Raymond Toy pushed to branch master at cmucl / cmucl Commits: bb4afde9 by Raymond Toy at 2016-05-13T17:37:58-07:00 Fix #22 where coerce was returning the wrong type of float. src/compiler/float.lisp: o The deftransform coerce was checking for a type of 'float and using %single-float to do the conversion. This is incorrect; it should only apply if the type is 'single-float. tests/issues.lisp o Add test for this. Verified that the test fails on the current snapshot and ix fixed by this change. - - - - - 2 changed files: - src/compiler/float-tran.lisp - tests/issues.lisp Changes: ===================================== src/compiler/float-tran.lisp ===================================== --- a/src/compiler/float-tran.lisp +++ b/src/compiler/float-tran.lisp @@ -76,7 +76,7 @@ '(%double-double-float n)) ((csubtypep tspec (specifier-type 'double-float)) '(%double-float n)) - ((csubtypep tspec (specifier-type 'float)) + ((csubtypep tspec (specifier-type 'single-float)) '(%single-float n)) #+double-double ((csubtypep tspec (specifier-type '(complex double-double-float))) ===================================== tests/issues.lisp ===================================== --- a/tests/issues.lisp +++ b/tests/issues.lisp @@ -200,3 +200,13 @@ tests)) `(progn ,@(nreverse tests))))) (make-tests))) + +(define-test issue.22 + (:tag :issues) + (let ((tester (compile nil '(lambda (x) + (coerce x 'float))))) + (assert-eql 1.0 (funcall tester 1)) + (assert-eql 2f0 (funcall tester 2f0)) + (assert-eql 3d0 (funcall tester 3d0)) + (assert-eql 4w0 (funcall tester 4w0)))) + View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/commit/bb4afde9814ae938cc7f8de539...