* Fixed bug 160483: described as "incorrect number of arguments" reported as "not a function"
- The real reason was in the register allocator, where one live variable (the memmory size of the bytevector) was not marked live across the call to do-overflow. When the overflow returned, the value of that variable (which was in the %ebx register) was trashed, leading to an incorrect bump in the allocation pointer. - Note to self, never blame anything on cache coherency again!
This commit is contained in:
parent
217dff5d3e
commit
327e6e9371
Binary file not shown.
|
@ -420,11 +420,9 @@
|
||||||
(make-primcall 'nop '())
|
(make-primcall 'nop '())
|
||||||
(make-funcall
|
(make-funcall
|
||||||
(make-primcall 'mref
|
(make-primcall 'mref
|
||||||
(list (make-constant
|
(list
|
||||||
(make-object
|
(make-constant (make-object (primref->symbol 'do-overflow)))
|
||||||
(primref->symbol
|
(make-constant (- disp-symbol-record-proc symbol-ptag))))
|
||||||
'do-overflow)))
|
|
||||||
(make-constant (- disp-symbol-record-proc symbol-ptag))))
|
|
||||||
(list size)))))
|
(list size)))))
|
||||||
;;; impose value
|
;;; impose value
|
||||||
(define (V d x)
|
(define (V d x)
|
||||||
|
@ -531,7 +529,8 @@
|
||||||
(lambda (x)
|
(lambda (x)
|
||||||
(make-seq
|
(make-seq
|
||||||
(make-set return-value-register x)
|
(make-set return-value-register x)
|
||||||
(make-primcall 'return (list return-value-register))))))
|
(make-primcall 'return
|
||||||
|
(list pcr esp apr return-value-register))))))
|
||||||
;;; impose effect
|
;;; impose effect
|
||||||
(define (E x)
|
(define (E x)
|
||||||
(struct-case x
|
(struct-case x
|
||||||
|
@ -1482,6 +1481,7 @@
|
||||||
[(reg? d)
|
[(reg? d)
|
||||||
(cond
|
(cond
|
||||||
[(not (mem-reg? d rs))
|
[(not (mem-reg? d rs))
|
||||||
|
(set-asm-instr-op! x 'nop)
|
||||||
(values vs rs fs ns)]
|
(values vs rs fs ns)]
|
||||||
[else
|
[else
|
||||||
(let ([rs (rem-reg d rs)])
|
(let ([rs (rem-reg d rs)])
|
||||||
|
|
|
@ -1467,6 +1467,7 @@
|
||||||
(let f ([fml* (cdr fml*)] [rand* rand*])
|
(let f ([fml* (cdr fml*)] [rand* rand*])
|
||||||
(cond
|
(cond
|
||||||
[(null? fml*)
|
[(null? fml*)
|
||||||
|
;;; FIXME: construct list afterwards
|
||||||
(list (make-funcall (make-primref 'list) rand*))]
|
(list (make-funcall (make-primref 'list) rand*))]
|
||||||
[else
|
[else
|
||||||
(cons (car rand*)
|
(cons (car rand*)
|
||||||
|
|
Loading…
Reference in New Issue