Comment 0 for bug 655203

Revision history for this message
Nikodemus Siivola (nikodemus) wrote :

in-package :sb-c)

(defknown compiler-derived-type (t) (values t t) (unsafe))

(deftransform compiler-derived-type ((x) (t) * :node node)
  (delay-ir1-transform node :optimize)
  (let ((type (type-specifier (lvar-type x))))
    `(values ',type t)))

(defun compiler-derived-type (x)
  (declare (ignore x))
  (values t nil))

(export 'compiler-derived-type)

(in-package :cl-user)

;;; As expected
CL-USER> (funcall (compile nil `(lambda (&rest list)
                                  (sb-c:compiler-derived-type list))))
LIST
T

;;; Oops. We should get LIST, T here too.
CL-USER> (funcall (funcall (compile nil `(lambda ()
                                           (lambda (&rest list)
                                             (sb-c:compiler-derived-type list))))))
T
T