From 7317109e5f23cb96289e104df95b0ef10985d2c0 Mon Sep 17 00:00:00 2001 From: Alexey Dejneka Date: Tue, 29 Oct 2002 17:28:06 +0000 Subject: [PATCH] 0.7.9.13: Disabled type checking of arguments in MV-COMBINATION --- BUGS | 15 +++++++++++++++ src/compiler/checkgen.lisp | 3 +++ tests/compiler-1.impure-cload.lisp | 10 ++++++++++ version.lisp-expr | 2 +- 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/BUGS b/BUGS index fb9a754..a67ed1b 100644 --- a/BUGS +++ b/BUGS @@ -1290,6 +1290,21 @@ WORKAROUND: * (baz t) 1 +220: + Sbcl 0.7.9 fails to compile + + (multiple-value-call #'list + (the integer (helper)) + nil) + + Type check for INTEGER is inserted, the result of which serves as + the first argument of M-V-C, is inserted after evaluation of NIL. So + arguments of M-V-C are pushed in the wrong order. As a temporary + workaround type checking was disabled for M-V-Cs in 0.7.9.13. A + better solution would be to put a check between evaluation of + arguments, but it could be tricky to check result types of PROG1, IF + etc. + DEFUNCT CATEGORIES OF BUGS IR1-#: These labels were used for bugs related to the old IR1 interpreter. diff --git a/src/compiler/checkgen.lisp b/src/compiler/checkgen.lisp index 6ada02b..f824823 100644 --- a/src/compiler/checkgen.lisp +++ b/src/compiler/checkgen.lisp @@ -260,6 +260,9 @@ (let ((kind (basic-combination-kind dest))) (cond ((eq cont (basic-combination-fun dest)) t) ((eq kind :local) t) + ((mv-combination-p dest) + ;; See bug 220 + nil) ((not (eq (continuation-asserted-type cont) (continuation-externally-checkable-type cont))) ;; There is an explicit assertion. diff --git a/tests/compiler-1.impure-cload.lisp b/tests/compiler-1.impure-cload.lisp index e062958..a873e69 100644 --- a/tests/compiler-1.impure-cload.lisp +++ b/tests/compiler-1.impure-cload.lisp @@ -106,4 +106,14 @@ (make-array 3 :element-type t :initial-element 0)) nil)) +;;; bug 220: type check inserted after all arguments in MV-CALL caused +;;; failure of stack analysis +(defun bug220-helper () + 13) +(assert (equal (multiple-value-call #'list + (the integer (bug220-helper)) + nil) + '(13 nil))) + (sb-ext:quit :unix-status 104) ; success + diff --git a/version.lisp-expr b/version.lisp-expr index 4f7fb70..e697733 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -18,4 +18,4 @@ ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.7.9.12" +"0.7.9.13" -- 1.7.10.4