1.0.28.22: Fix deref of (alien (* t)) values
authorAlastair Bridgewater <lisphacker@users.sourceforge.net>
Wed, 6 May 2009 21:12:08 +0000 (21:12 +0000)
committerAlastair Bridgewater <lisphacker@users.sourceforge.net>
Wed, 6 May 2009 21:12:08 +0000 (21:12 +0000)
  When attempting to deref a value known to the compiler as an (alien
(* t)) issue a compiler note rather than attempting to open-code (the
type may be better known at run-time).

  Update NEWS with mention of the changes from 1.0.28.11 (oops).

NEWS
src/compiler/aliencomp.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 3aa0e0e..45585c9 100644 (file)
--- a/NEWS
+++ b/NEWS
   * bug fix: some forms of AND, OR, and COND resulted in expansions that could
     result in their subforms being treated as top level forms. (reported by
     James Knight)
+  * bug fix: On x86/x86-64 alien functions declared to return integers shorter
+    than a machine register could leave garbage in the high bits of the
+    result register (bug 316325).
   * bug fix: disable address space randomization Linux/x86-64 as well,
     not just x86-64. (reported by Ken Olum)
+  * bug fix: Attempting to DEREF an (ALIEN (* T)) would produce a WARNING and
+    generate incorrect code.
   * bug fix: #201; type inference for CONS and ARRAY types could derive
     wrong results in the presence of eg. RPLACA or ADJUST-ARRAY.
   * bug fix: special variables with a proclaimed specific subtype of FUNCTION
index bebc0a3..4321c31 100644 (file)
          (abort-ir1-transform "too many indices for pointer deref: ~W"
                               (length indices)))
        (let ((element-type (alien-pointer-type-to alien-type)))
+         (unless element-type
+           (give-up-ir1-transform "unable to open code deref of wild pointer type"))
          (if indices
              (let ((bits (alien-type-bits element-type))
                    (alignment (alien-type-alignment element-type)))
index b4722a2..17e9d15 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".)
-"1.0.28.21"
+"1.0.28.22"