Don't use host values of most-fooative fixnum. (Also expand on the comment about using an exclusive test for floats within the fixnum range)
The alignment restrictions on movaps for moving a pair of single floats are too strict; use movq instead. (From Paul Khuong)
Code of the form (defun foo (x) (declare (type simple-vector x)) (coerce x '(vector (unsigned-byte 8)))) should not cause a full WARNING, but with the new COERCE transforms, expanded into one of those IFs where one branch is dead, but the compiler couldn't prove it. Define a whole heap of new backend type predicates for all specialized vectors, generalizing VECTOR-T-P. (Some specialized vectors are implemented using widetags, and so are excluded from these new definitions).
In the 1.0.29.x series, DELETE-FILE started deleting the truename of the given pathname designator (rather than the pathname itself), meaning that symlinks could no longer be deleted. Revert back to the historical behaviour. (Noted on sbcl-devel by Luis Oliveira 2009-08-18.) Although the behaviour hasn't changed recently, there's a similar issue in RENAME-FILE, but that operator has such bizarre behaviour anyway it might be worth just letting sleeping pathname functions lie.
The sap-ref-with-offset stuff was wrong in that the displacement was multiplied by a notional element size, rather than being uniformly treated as a number of bytes. Mostly this codepath wasn't exposed at all (other than with sap-ref-8, which worked by "accident"), but attempts to implement UTF-16, which requires (sap-ref-16 sap (+ offset 2)), showed up the problem.
Patch by Tobias Rittweiler: * Add a PPRINT-DECLARE which a) makes sure that (DECLARE (FUNCTION F)) is not printed as (DECLARE #'F), and b) places each declaration specifier on its own line. Also used for DECLAIM. * Better pprint SETQ forms which assign to multiple variables. At the moment it's printed like (SETQ FOO (FROB-FOO 0 1 2 3 4 5 6 7 8 9) QUUX (FROB-QUUX 9 8 7 6 5 4 3 2 1 0)) With the patch it's indented like (SETQ FOO (FROB-FOO 0 1 2 3 4 5 6 7 8 9) QUUX (FROB-QUUX 9 8 7 6 5 4 3 2 1 0)) It uses the former indentation style if the value (e.g. the "(FROB-FOO ...)") does not fit on a single line. This also affects PSETQ, SETF, PSETF. * Add pprint entry for SB-INT:DX-FLET because there are CL macros which expand to that. * Fix typo in *LOOP-SEPARATING-CLAUSES*; I mistakenly put WHERE instead of WITH in it. * Fix PPRINT-IF to make sure that the predicate is always printed right after the IF. The current definition may occassionally print an IF form like (IF (PREDICATE) (THEN) (ELSE)) * Some small refactoring work: - Use PPRINT-LINEAR, and PPRINT-FILL instead of equivalent, but hairy FORMAT calls. - Add PPRINT-SPREAD-FUN-CALL which is the common subtrate of pretty-printing simple LOOP forms, and DECLARE forms.
...as they should signal an error for non-floats in safe code, and hence UNSAFELY-FLUSHABLE. Ditto for FLOAT-SIGN, FLOAT-RADIX, FLOAT-DIGITS, and FLOAT-PRECISION, though for some reason Python seemed unwilling to delete these calls despite them being marked as flushable as well. See: https://bugs.launchpad.net/sbcl/+bug/412416
...by passing ERRORP=NIL to COMBINATION-FUN-SOURCE-NAME. Also smooth the return value convention of C-F-S-N by adding a secondary value: NIL is a valid name for a local function. See: https://bugs.launchpad.net/sbcl/+bug/411563
* Ignore the :LARGE property on PPC, where is seems to bounce back and forth. Reported by Bruce O'Neel. (This is not a real fix, of course: the question of _why_ PPC sometimes has (or thinks it has) #'CONS on a large object page remains.)
* Specialized %UNARY-TRUNCATE/SINGLE-FLOAT and %UNARY-TRUNCATE/DOUBLE-FLOAT. * Explicit coercions to appropriate float types in the TRUNCATE transforms. This gets rid of generic arithmetic in the general case (Python is reluctant to insert explicit integer-tofloat coercions for integers of unknown range due to precision issues.) * Since COERCE (and %SINGLE-FLOAT and %DOUBLE-FLOAT) are not flushable, take core not to generate leftover code in the TRUNCATE transform when the result lvar has a single-value type. * Rename %UNARY-TRUNCATE float VOPs, so that transforming to a specialized floating point version doesn't make use unable to implement it directly as a VOP when the range of the float is sufficiently constrained.
* Mishandled return value.
Provide for the construction of Hangul syllable character names, as required by Unicode ("This character name is a normative property of the character"). At present done at build-time; if the increase in core size is too painful, it can be done algorithmically in CHAR-NAME and NAME-CHAR.
* I at least am starting to find myself having to insert (EVAL-WHEN (...) (REQUIRE :SB-INTROSPECT)) in too many places. This may be a sign that things aught to be in SB-EXT instead, but ASDFication seems like a logical next step. ...arguably all contribs but ASDF itself should be ASDF systems.
Patch by Larry D'Anna. He explains: This snippit (labels ((K (&optional x) #'k))) fails with failed AVER: (XEP-P XEP), in %ALLOCATE-CLOSURES-IR2-CONVERT-OPTIMIZER The problem is that it's trying to allocate a closure for the XEP for K, but K has been deleted because nothing references K except itself. %ALLOCATE-CLOSURES-IR2-CONVERT-OPTIMIZER already skips any leafs that lacks a XEP. This patch makes it also skip leafs who's XEPs have been deleted.
* Patch by Larry D'Anna.
* Improved pretty-printing of simple LOOP forms, IF, and MULTIPLE-VALUE-CALL. Patches by Tobias Rittweiler. * Improved pretty-printing of general macro calls by inspecting location of &BODY in the lambda-list. Patch by Tobias Rittweiler. * Make tests in walker.impure.lisp ignore newlines as well.
See https://bugs.launchpad.net/sbcl/+bug/392203 Patch by Larry D'Anna. His comments: Ever since Spice Lisp, convert-mv-call had returned without doing anything if (functional-entry-fun fun) is not null, ie if fun possesses a XEP. 0.8.5.5 replaces this criterion with "if the last optional entry has references", and signals an error if the last optional entry has no references and the XEP exists. I can't know exactly what Alexy was thinking when he put the aver in, but I can guess: If the XEP exists it should contain a reference to the last entry point, so if the last entry point has no refs and a XEP exists something went wrong. However, if the number of required + optional arguments is 0, then XEP doesn't need the "last" entry point, it can always use the "more" entry point instead, which is exactly what seems to have happened in this case. This patch combines the two conditions. convert-mv-call will return without action if *either* a XEP exists, *or* the last optional entry has references."
* OpenBSD refuses to nanosleep() over 100 million seconds (returning EINVAL), so loop with 100 million second sleeps till the time left is smaller than that. ...who knows, maybe there is a good reason to sleep over 3 years? Bug reported by Johsh Elsasser.
* Patch by Josh Elsasser. He says: "The current address space locations for x86 OpenBSD are adequate, but could still be better chosen. The only real problem with the current addresses is that the default dynamic space size is larger than the default data size resource limit, which means that sbcl will not run without some tweaking. Attached is a patch to lower the dynamic space size, as well as move all spaces to locations which I suspect may prove more future-proof against OpenBSD changes. The patch also greatly expands the OpenBSD comment. I apologize for the verbosity, but the address space layout on OpenBSD/i386 is quite complex and I wanted to record the details before I forgot (again)." Committing untested, as I don't have an OpenBSD system available.
* Don't close the stream on Unix, so users can enjoy the normal Unixy-IO to unlinked files. * On Windows, close the stream with :ABORT NIL, so that there is no danger of close trying to delete file as well. Bug with DELETE-FILE trying to delete files twice reported by John Fremlin.
* Print the specifier, not the type object.