codegen errors: type checks are inserted as necessary. (lp#1177703)
* bug fix: Unsigned modular arithmetic is correctly converted into signed
modular arithemtic (mostly to exploit fixnum-width VOPs). (lp#1026634)
+ * bug fix: a combination of inlined local function with &optional and
+ recursion no longer causes undescriptive compiler errors. (lp#1180992)
* optimization: faster ISQRT on fixnums and small bignums
* optimization: faster and smaller INTEGER-LENGTH on fixnums on x86-64.
* optimization: On x86-64, the number of multi-byte NOP instructions used
,*current-path*))))
(min (or (position-if #'lambda-var-arg-info vars) (length vars))))
(aver-live-component *current-component*)
- (push res (component-new-functionals *current-component*))
(ir1-convert-hairy-args res () () () () vars nil body aux-vars aux-vals
source-name debug-name nil post-binding-lexenv
system-lambda)
+ ;; ir1-convert-hairy-args can throw 'locall-already-let-converted
+ ;; push optional-dispatch into the current component only after it
+ ;; normally returned
+ (push res (component-new-functionals *current-component*))
(setf (optional-dispatch-min-args res) min)
(setf (optional-dispatch-max-args res)
(+ (1- (length (optional-dispatch-entry-points res))) min))
(let ((hash #xD13CCD13))
(setf hash (logand most-positive-word
(ash hash 5)))))))
+
+(with-test (:name (local-&optional-recursive-inline :bug-1180992))
+ (compile nil
+ `(lambda ()
+ (labels ((called (&optional a))
+ (recursed (&optional b)
+ (called)
+ (recursed)))
+ (declare (inline recursed called))
+ (recursed)))))
+
(declare (optimize safety))
(elt args 0))))
sb-kernel:index-too-large-error)))
+
+(with-test (:name do-sequence-on-literals)
+ (assert (= (sequence:dosequence (e #(1 2 3)) (return e))
+ 1)))