Commit [12836c] Maximize Restore History

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.

Nikodemus Siivola Nikodemus Siivola 2010-10-14

changed src/compiler/ctype.lisp
changed src/compiler/ir1opt.lisp
changed src/compiler/ir1tran-lambda.lisp
changed src/compiler/ir1tran.lisp
changed src/compiler/node.lisp
changed src/pcl/methods.lisp
changed tests/compiler.impure.lisp
changed tests/compiler.test.sh
changed NEWS
changed version.lisp-expr
src/compiler/ctype.lisp Diff Switch to side-by-side view
Loading...
src/compiler/ir1opt.lisp Diff Switch to side-by-side view
Loading...
src/compiler/ir1tran-lambda.lisp Diff Switch to side-by-side view
Loading...
src/compiler/ir1tran.lisp Diff Switch to side-by-side view
Loading...
src/compiler/node.lisp Diff Switch to side-by-side view
Loading...
src/pcl/methods.lisp Diff Switch to side-by-side view
Loading...
tests/compiler.impure.lisp Diff Switch to side-by-side view
Loading...
tests/compiler.test.sh Diff Switch to side-by-side view
Loading...
NEWS Diff Switch to side-by-side view
Loading...
version.lisp-expr Diff Switch to side-by-side view
Loading...