1.0.43.57: better handling of derived function types
authorNikodemus Siivola <nikodemus@random-state.net>
Thu, 14 Oct 2010 16:32:51 +0000 (16:32 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Thu, 14 Oct 2010 16:32:51 +0000 (16:32 +0000)
commit12836ca105af62252aa0974c3f6992e60ce0ebf4
tree0e77083be329ba75febcf4c3b5b4125b4a02113b
parent1799852c47cd0c29be71c259f1ab9df7ffb643c2
1.0.43.57: better handling of derived function types

 Fixes bug 657499, and improves the earlier fix of 655126.

 * Sort out TYPE vs. DEFINED-TYPE in FIND-GLOBAL-FUN:

  ** TYPE is the declarared type, OR the derived type iff
     *derive-function-types* is true, no ftype has been declared,
     we're not explicitly late-binding, and the function is not
     NOTINLINE.

  ** DEFINED-TYPE is the derived type, or FUNCTION if the function has
     been declared NOTINLINE or we're late-binding.

     Previously TYPE (which is what the rest of the system trusts
     implcitly) was the derived type for functions in the same file
     not declared NOTINLINE.

 * ASSERT-CALL-TYPE can now be used in "untrusted" cases as well:
   argument types are asserted as before, but instead of using
   DERIVE-NODE-TYPE to annotate the function LVAR with its type, we
   instead assert the return-type when appropriate.

 * VALIDATE-CALL-TYPE is now called with DEFINED-TYPE from
   IR1-OPTIMIZE-COMBINATION, not
   IR1-CONVERT-COMBINATION-CHECKING-TYPE: the DEFINED-TYPE may be used
   there in an untrusted call to ASSERT-CALL-TYPE.

   Also keep track of the leaves whose DEFINED-TYPE we have asserted,
   so that we won't do duplicate work. New slot in COMBINATION:
   TYPE-VALIDATED-FOR-LEAF is utilized for this.

 * LEAF-WHERE-FROM can now also be :DEFINED-HERE, meaning the
   definition originates in the file being compiled -- this
   information is used by VALIDATE-CALL-TYPE, and filled in by
   FIND-FREE-FUN and FIND-GLOBAL-FUN.

 * Adjust the tests for 655126 to account for full warnings
   in case *derive-function-types* and self-calls.
NEWS
src/compiler/ctype.lisp
src/compiler/ir1opt.lisp
src/compiler/ir1tran-lambda.lisp
src/compiler/ir1tran.lisp
src/compiler/node.lisp
src/pcl/methods.lisp
tests/compiler.impure.lisp
tests/compiler.test.sh
version.lisp-expr