0.8.10.36:
authorChristophe Rhodes <csr21@cam.ac.uk>
Wed, 19 May 2004 12:45:38 +0000 (12:45 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Wed, 19 May 2004 12:45:38 +0000 (12:45 +0000)
Fix the NIL-as-keyword argument bug for local calls.

NEWS
src/compiler/locall.lisp
tests/compiler.impure.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index f77510e..1a13633 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2466,6 +2466,8 @@ changes in sbcl-0.8.11 relative to sbcl-0.8.10:
        it so.  (thanks to Markus Ziegler)
     ** on the Alpha, the compiler succeeds in compiling functions
        returning a known number of arguments greater than 63.
+    ** fixed handling of invalid NIL arguments in keyword position
+       in local calls.
 
 planned incompatible changes in 0.8.x:
   * (not done yet, but planned:) When the profiling interface settles
index d26584f..fa366db 100644 (file)
                           (progn
                             (ignores dummy val)
                              (unless (eq name :allow-other-keys)
-                               (setq loser name))))
+                               (setq loser (list name)))))
                (let ((info (lambda-var-arg-info var)))
                  (when (eq (arg-info-key info) name)
                    (ignores dummy)
 
        (when (and loser (not (optional-dispatch-allowp fun)) (not allowp))
          (compiler-warn "function called with unknown argument keyword ~S"
-                        loser)
+                        (car loser))
          (setf (basic-combination-kind call) :error)
          (return-from convert-more-call)))
 
index 33936a5..f94e582 100644 (file)
 \f
 ;;;; MUFFLE-CONDITIONS test (corresponds to the test in the manual)
 (defvar *compiler-note-count* 0)
-#-alpha ; KLUDGE
+#-alpha ; FIXME: make a better test!
 (handler-bind ((sb-ext:compiler-note (lambda (c)
                                       (declare (ignore c))
                                       (incf *compiler-note-count*))))
     (assert (= *compiler-note-count* 1))
     (assert (equal (multiple-value-list (funcall fun 1)) '(5 -5)))))
 \f
+(handler-case
+    (eval '(flet ((%f (&key) nil)) (%f nil nil)))
+  (error (c) :good)
+  (:no-error (val) (error "no error: ~S" val)))
+(handler-case
+    (eval '(labels ((%f (&key x) x)) (%f nil nil)))
+  (error (c) :good)
+  (:no-error (val) (error "no error: ~S" val)))
+\f
 ;;;; tests not in the problem domain, but of the consistency of the
 ;;;; compiler machinery itself
 
index bd602f0..40ca123 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.10.35"
+"0.8.10.36"