merge compiler repair from github.com:cisco/ChezScheme

original commit: 16de1bdcb5616d4796360643e3371594bb84731f
This commit is contained in:
Matthew Flatt 2018-08-23 20:16:17 -06:00
commit b81c2daf76
4 changed files with 36 additions and 4 deletions

6
LOG
View File

@ -991,6 +991,12 @@
system.stex, release_notes.stex
- fix boot_call and the invoke code object to handle multiple values
scheme.c, cpnanopass.ss, 7.ms, release_notes.stex, system.stex
- the compiler now uses a temporary variable to hold the return
value of a nested call across the restore-local-saves form to
properly handle the case where the destination lvalue is an mref
whose base and/or index is a local save.
cpnanopass.ss,
misc.ms
- add ordered guardians through a new optional argument to make-guardian
prims.ss, primdata.ss, cp0.ss, cpnanopass.ss,
cmacros.ss, mkheader.ss, gc.c, segment.c, types.h,

View File

@ -272,6 +272,18 @@
(case-lambda
[() (q 0)]
[(x) (q)])))
; regression tests for non-tail-call mref lvalue destination
(begin
(define (c1-f a)
(let ([x (fxvector 0)])
(lambda (v) (fxvector-set! x 0 (modulo v a)) x)))
#t)
(equal? ((c1-f 7) 10) #vfx(3))
(begin
(define (c1-id x) x)
(define (c1-g x) (vector-set-fixnum! x 0 (c1-id 17)))
#t)
(equal? (let ([v (vector 3)]) (c1-g v) v) '#(17))
)
(mat compiler2 ; random tests

View File

@ -2,7 +2,7 @@
\thisversion{Version 9.5.1}
\thatversion{Version 8.4}
\pubmonth{January}
\pubmonth{August}
\pubyear{2018}
\begin{document}
@ -1621,12 +1621,21 @@ in fasl files does not generally make sense.
%-----------------------------------------------------------------------------
\section{Bug Fixes}\label{section:bugfixes}
\subsection{Incorrect return code when \protect\scheme{exit} is called with multiple arguments}
\subsection{Invalid memory reference from \protect\scheme{fxvector} calls (9.5)}
A compiler bug that could result in an invalid memory reference or
some other unpleasant behavior for calls to \scheme{fxvector} in
which the nested subexpression to compute the new value to be stored
is nontrivial has been fixed.
This bug could also affect calls to \scheme{vector-set-fixnum!} and possibly
other primitive operations.
\subsection{Incorrect return code when \protect\scheme{exit} is called with multiple arguments (9.5)}
A bug in the implementation of the default exit handler with multiple
values has been fixed.
\subsection{Boot files containing compiled library code fail to load}
\subsection{Boot files containing compiled library code fail to load (9.5)}
Compiled library code may now appear within fasl objects loaded during
the boot process, provided that they are appended to the end of the base boot

View File

@ -11601,7 +11601,12 @@
[(set! ,[lvalue] (mvcall ,info ,mdcl ,t0? ,t1* ... (,t* ...)))
(build-nontail-call info mdcl t0? t1* t* '() #f #f
(lambda (newframe-info)
(%seq (remove-frame ,newframe-info) (set! ,lvalue ,%ac0) (restore-local-saves ,newframe-info))))]
(let ([retval (make-tmp 'retval)])
(%seq
(remove-frame ,newframe-info)
(set! ,retval ,%ac0)
(restore-local-saves ,newframe-info)
(set! ,lvalue ,retval)))))]
[(foreign-call ,info ,[t0] ,[t1*] ...)
(build-foreign-call info t0 t1* #f #t)]
[(set! ,[lvalue] (foreign-call ,info ,[t0] ,[t1*] ...))