From a208de2a9ab6a63c27f3e6c291fea9f7c4d774a1 Mon Sep 17 00:00:00 2001 From: Alexey Dejneka Date: Fri, 5 Dec 2003 19:25:18 +0000 Subject: [PATCH] 0.8.6.30: * Fix bug reported by PFD on sbcl-devel 2003-12-04 ... VALUES transform: preserve (single-valuified) derived type; ... LET-CONVERT: flush combination derived type. --- doc/internals-notes/threading-specials | 38 +++++++++++++++++----------------- src/code/parse-defmacro.lisp | 10 ++++----- src/compiler/ir1opt.lisp | 4 +++- src/compiler/locall.lisp | 6 +++++- version.lisp-expr | 2 +- 5 files changed, 33 insertions(+), 27 deletions(-) diff --git a/doc/internals-notes/threading-specials b/doc/internals-notes/threading-specials index 5be6a67d4..aad791548 100644 --- a/doc/internals-notes/threading-specials +++ b/doc/internals-notes/threading-specials @@ -647,7 +647,7 @@ SB-C::*COMPILER-ERROR-CONTEXT* SB-C::*SEEN-BLOCKS* SB-C::*TN-ID* SB-C::*IR1-OPTIMIZE-UNTIL-DONE-EVENT-INFO* -SB-C::*SPECIALIZED-ARRAY-ELEMENT-TYPE-PROPERTIES* +SB-C::*SPECIALIZED-ARRAY-ELEMENT-TYPE-PROPERTIES* ; readonly SB-C::*NUMBER-CONTINUATIONS* SB-C::*CTYPE-TEST-FUN* SB-C::*IGNORE-COST-VOPS* @@ -955,20 +955,20 @@ SB-VM::*MAYBE-USE-INLINE-ALLOCATION* SB-VM::*SIGNED-IMM-DWORD-PREFILTER-WRAPPER* SB-VM::*IMMEDIATE-TYPES* -SB-KERNEL:*WILD-TYPE* +SB-KERNEL:*WILD-TYPE* ; readonly SB-KERNEL:*UNPARSE-FUN-TYPE-SIMPLIFY* SB-KERNEL:*CURRENT-LEVEL-IN-PRINT* SB-KERNEL:*UNIVERSAL-FUN-TYPE* SB-KERNEL:*COLD-INIT-COMPLETE-P* -SB-KERNEL:*UNIVERSAL-TYPE* +SB-KERNEL:*UNIVERSAL-TYPE* ; readonly SB-KERNEL:*HANDLER-CLUSTERS* -SB-KERNEL:*EMPTY-TYPE* +SB-KERNEL:*EMPTY-TYPE* ; readonly SB-KERNEL:*MAXIMUM-ERROR-DEPTH* SB-KERNEL:*CONDITION-RESTARTS* SB-KERNEL:*TYPE-SYSTEM-INITIALIZED* SB-KERNEL:*RESTART-CLUSTERS* SB-KERNEL::*MAKE-VALUES-TYPE-CACHED-CACHE-VECTOR* -SB-KERNEL::*BUILT-IN-CLASS-CODES* +SB-KERNEL::*BUILT-IN-CLASS-CODES* ; readonly SB-KERNEL::*DEF!STRUCT-TYPE-MAKE-LOAD-FORM-FUN* SB-KERNEL::*LAYOUT-CLOS-HASH-RANDOM-STATE* SB-KERNEL::*TYPE-TEST-ORDERING* @@ -981,28 +981,28 @@ SB-KERNEL::*TYPE-INTERSECTION2-CACHE-VECTOR* SB-KERNEL::*COLD-INIT-FORMS* SB-KERNEL::*DEFAULT-DEFAULT* SB-KERNEL::*RAW-SLOT-DATA-LIST* -SB-KERNEL::*SPECIALIZED-ARRAY-ELEMENT-TYPES* +SB-KERNEL::*SPECIALIZED-ARRAY-ELEMENT-TYPES* ; readonly SB-KERNEL::*DEFSTRUCT-HOOKS* SB-KERNEL::*VALUES-TYPE-UNION-CACHE-VECTOR* SB-KERNEL::*INTERNAL-ERRORS* SB-KERNEL::*VALUES-TYPE-INTERSECTION-CACHE-VECTOR* SB-KERNEL::*FORWARD-REFERENCED-LAYOUTS* -SB-KERNEL::*SYSTEM-LETS* +SB-KERNEL::*SYSTEM-LETS* ; bound SB-KERNEL::*%COERCE-TO-VALUES-CACHE-VECTOR* SB-KERNEL::*IGNORABLE-VARS* -SB-KERNEL::*ENV-VAR* +SB-KERNEL::*ENV-VAR* ; bound SB-KERNEL::|*%%MAKE-UNION-TYPE-cached-CACHE-VECTOR*| SB-KERNEL::*CSUBTYPEP-CACHE-VECTOR* SB-KERNEL::*EMPTY-CONDITION-SLOT* SB-KERNEL::*TYPE-UNION2-CACHE-VECTOR* SB-KERNEL::*TYPE-CLASS-FUN-SLOTS* -SB-KERNEL::*ARG-TESTS* -SB-KERNEL::*USER-LETS* +SB-KERNEL::*ARG-TESTS* ; bound +SB-KERNEL::*USER-LETS* ; bound SB-KERNEL::|*%%MAKE-ARRAY-TYPE-cached-CACHE-VECTOR*| SB-KERNEL::*FINDING-NAME* SB-KERNEL::*TYPE-CLASSES* SB-KERNEL::*VALUES-SPECIFIER-TYPE-CACHE-VECTOR* -SB-KERNEL::*FLOAT-FORMATS* +SB-KERNEL::*FLOAT-FORMATS* ; readonly SB-KERNEL::*INTERNAL-ERROR-ARGS* SB-KERNEL::*DEF!STRUCT-SUPERTYPE* SB-KERNEL::*%TYPE-UNION-CACHE-VECTOR* @@ -1021,7 +1021,7 @@ SB-IMPL::*HANDLERS-INSTALLED* SB-IMPL::*READ-FROM-STRING-SPARES* SB-IMPL::*HASH-TABLE-TESTS* SB-IMPL::*ATTRIBUTE-NAMES* -SB-IMPL::*DAYS-BEFORE-MONTH* +SB-IMPL::*DAYS-BEFORE-MONTH* ; readonly SB-IMPL::*CHARACTER-ATTRIBUTES* SB-IMPL::*UNIX-HOST* SB-IMPL::*DESCRIPTOR-HANDLERS* @@ -1029,7 +1029,7 @@ SB-IMPL::*STRING-OUTPUT-STREAMS* SB-IMPL::*CLOSE-ON-ERROR* SB-IMPL::*INTEGER-READER-SAFE-DIGITS* SB-IMPL::*TIMEZONE-TABLE* -SB-IMPL::*BQ-COMMA-FLAG* +SB-IMPL::*BQ-COMMA-FLAG* ; readonly SB-IMPL::*PRINT-OBJECT-IS-DISABLED-P* SB-IMPL::*MERGE-SORT-TEMP-VECTOR* SB-IMPL::*PROFILE-HASH-CACHE* @@ -1050,11 +1050,11 @@ SB-IMPL::*SHARP-SHARP-ALIST* SB-IMPL::*BASE-POWER* SB-IMPL::*LOGICAL-PATHNAME-DEFAULTS* SB-IMPL::*AVAILABLE-BUFFERS* -SB-IMPL::*BQ-DOT-FLAG* +SB-IMPL::*BQ-DOT-FLAG* ; readonly SB-IMPL::*CIRCULARITY-COUNTER* SB-IMPL::*DIGITS* SB-IMPL::*PREVIOUS-READTABLE-CASE* -SB-IMPL::*BQ-VECTOR-FLAG* +SB-IMPL::*BQ-VECTOR-FLAG* ; readonly SB-IMPL::*ABBREV-WEEKDAY-TABLE* SB-IMPL::*LOGICAL-HOSTS* SB-IMPL::*PACKAGE-NAMES* @@ -1067,7 +1067,7 @@ SB-IMPL::*PERIODIC-POLLING-FUNCTION* SB-IMPL::*ABORTED-COMPILATION-UNIT-COUNT* SB-IMPL::*LONG-WEEKDAY-TABLE* SB-IMPL::*INTERNAL-SYMBOL-OUTPUT-FUN* -SB-IMPL::*BACKQUOTE-COUNT* +SB-IMPL::*BACKQUOTE-COUNT* ; bound SB-IMPL::*DIGIT-BASES* SB-IMPL::*PREVIOUS-DRIBBLE-STREAMS* SB-IMPL::*MAX-EVENT-TO-USEC* @@ -1078,7 +1078,7 @@ SB-IMPL::*LONG-MONTH-TABLE* SB-IMPL::*OLD-PACKAGE* SB-IMPL::*INTEGER-READER-BASE-POWER* SB-IMPL::*ERROR-THROW-UP-COUNT* -SB-IMPL::*BQ-AT-FLAG* +SB-IMPL::*BQ-AT-FLAG* ; readonly SB-IMPL::*MACHINE-VERSION* ; unset/unbound ? are we using this? SB-IMPL::*IGNORE-WILDCARDS* SB-IMPL::*INCH-PTR* @@ -1101,8 +1101,8 @@ SB-IMPL::*PREVIOUS-CASE* SB-BIGNUM::*TRUNCATE-Y* SB-BIGNUM::*TRUNCATE-X* -SB-INT:*CL-PACKAGE* -SB-INT:*KEYWORD-PACKAGE* +SB-INT:*CL-PACKAGE* ; readonly +SB-INT:*KEYWORD-PACKAGE* ; readonly SB-INT:*SETF-FDEFINITION-HOOK* SB-INT:*DEFAULT-INIT-CHAR-FORM* SB-INT:*EOF-OBJECT* diff --git a/src/code/parse-defmacro.lisp b/src/code/parse-defmacro.lisp index 94f832572..af0c7baf1 100644 --- a/src/code/parse-defmacro.lisp +++ b/src/code/parse-defmacro.lisp @@ -13,16 +13,16 @@ ;;; variables for accumulating the results of parsing a DEFMACRO. (Declarations ;;; in DEFMACRO are the reason this isn't as easy as it sounds.) -(defvar *arg-tests* nil) ; tests that do argument counting at expansion time +(defvar *arg-tests*) ; tests that do argument counting at expansion time (declaim (type list *arg-tests*)) -(defvar *system-lets* nil) ; LET bindings done to allow lambda-list parsing +(defvar *system-lets*) ; LET bindings done to allow lambda-list parsing (declaim (type list *system-lets*)) -(defvar *user-lets* nil) ; LET bindings that the user has explicitly supplied +(defvar *user-lets*) ; LET bindings that the user has explicitly supplied (declaim (type list *user-lets*)) -(defvar *env-var* nil) ; &ENVIRONMENT variable name +(defvar *env-var*) ; &ENVIRONMENT variable name ;; the default default for unsupplied &OPTIONAL and &KEY args -(defvar *default-default* nil) +(defvar *default-default*) ;;; temps that we introduce and might not reference (defvar *ignorable-vars*) diff --git a/src/compiler/ir1opt.lisp b/src/compiler/ir1opt.lisp index 723873093..1ada2651a 100644 --- a/src/compiler/ir1opt.lisp +++ b/src/compiler/ir1opt.lisp @@ -1677,7 +1677,9 @@ (deftransform values ((&rest vals) * * :node node) (unless (lvar-single-value-p (node-lvar node)) (give-up-ir1-transform)) - (setf (node-derived-type node) *wild-type*) + (setf (node-derived-type node) + (make-short-values-type (list (single-value-type + (node-derived-type node))))) (principal-lvar-single-valuify (node-lvar node)) (if vals (let ((dummies (make-gensym-list (length (cdr vals))))) diff --git a/src/compiler/locall.lisp b/src/compiler/locall.lisp index f370eb35a..9b3613d78 100644 --- a/src/compiler/locall.lisp +++ b/src/compiler/locall.lisp @@ -959,7 +959,11 @@ next-block))) (move-return-stuff fun call next-block) (merge-lets fun call) - (setf (node-tail-p call) nil))) + (setf (node-tail-p call) nil) + ;; If CALL has a derive type NIL, it means that "its return" is + ;; unreachable, but the next BIND is still reachable; in order to + ;; not confuse MAYBE-TERMINATE-BLOCK... + (setf (node-derived-type call) *wild-type*))) ;;; Reoptimize all of CALL's args and its result. (defun reoptimize-call (call) diff --git a/version.lisp-expr b/version.lisp-expr index f5eaf92cc..565319ad4 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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.6.29" +"0.8.6.30" -- 2.11.4.GIT