~ chicken-core (chicken-5) 877ddd9e7df963653ccc29c83bed12a9fa7cf045
commit 877ddd9e7df963653ccc29c83bed12a9fa7cf045 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Tue Apr 7 12:45:58 2020 +0200 Commit: Peter Bex <peter@more-magic.net> CommitDate: Sun Apr 12 19:14:53 2020 +0200 Check known call argument count in analysis phase This was done in the optimizer previously but will be disabled with -O0. See also #1689 Signed-off-by: Peter Bex <peter@more-magic.net> diff --git a/core.scm b/core.scm index a490915a..272a1f77 100644 --- a/core.scm +++ b/core.scm @@ -2122,7 +2122,17 @@ (grow 1) (let ([fun (car subs)]) (when (eq? '##core#variable (node-class fun)) - (let ((name (first (node-parameters fun)))) + (let* ((name (first (node-parameters fun))) + (val (db-get db name 'value))) + (when (and first-analysis + val + (not (db-get db name 'unknown)) + (eq? '##core#lambda (node-class val)) + (not (llist-match? (third (node-parameters val)) + (cdr subs)))) + (quit-compiling + "known procedure called with wrong number of arguments: `~A'" + (real-name name))) (collect! db name 'call-sites (cons here n)))) (walk (first subs) env localenv fullenv here) (walkeach (cdr subs) env localenv fullenv here))) diff --git a/optimizer.scm b/optimizer.scm index bcf0148f..92634de0 100644 --- a/optimizer.scm +++ b/optimizer.scm @@ -1649,10 +1649,6 @@ (cond [(eq? fnvar (first fnp)) (set! ksites (alist-cons #f n ksites)) (cond [(eq? kvar (first arg0p)) - (unless (= argc (length (cdr subs))) - (quit-compiling - "known procedure called recursively with wrong number of arguments: `~A'" - fnvar) ) (node-class-set! n '##core#recurse) (node-parameters-set! n (list #t id)) (node-subexpressions-set! n (cddr subs)) ] @@ -1660,10 +1656,6 @@ => (lambda (a) (let* ([klam (cdr a)] [kbody (first (node-subexpressions klam))] ) - (unless (= argc (length (cdr subs))) - (quit-compiling - "known procedure called recursively with wrong number of arguments: `~A'" - fnvar) ) (node-class-set! n 'let) (node-parameters-set! n (take (third (node-parameters klam)) 1)) (node-subexpressions-set!Trap