diff --git a/pkgs/racket-test-core/tests/racket/for.rktl b/pkgs/racket-test-core/tests/racket/for.rktl index c89364e8b7..33dceb1ebf 100644 --- a/pkgs/racket-test-core/tests/racket/for.rktl +++ b/pkgs/racket-test-core/tests/racket/for.rktl @@ -435,4 +435,11 @@ (err/rt-test (for/fold () ([x '(1 2)]) x) exn:fail:contract:arity?) (err/rt-test (for*/fold () ([x '(1 2)]) x) exn:fail:contract:arity?) +;; for/fold result-arity checking: +(err/rt-test (begin (for/fold () ([i (in-range 10)]) 1) 1) #rx".*expected number of values not received.*") +(err/rt-test (begin (for/fold () () 1) 1) #rx".*expected number of values not received.*") +(err/rt-test (begin (for/fold ([x 1]) () (values 1 2)) 1) #rx".*expected number of values not received.*") +(err/rt-test (begin (for/fold ([x 1] [y 2]) ([i (in-range 10)]) 1) 1) #rx".*expected number of values not received.*") +(test 1 'one (begin (for/fold () () (values)) 1)) + (report-errs) diff --git a/racket/collects/racket/private/for.rkt b/racket/collects/racket/private/for.rkt index a597992e0e..15b4635001 100644 --- a/racket/collects/racket/private/for.rkt +++ b/racket/collects/racket/private/for.rkt @@ -1240,7 +1240,9 @@ ;; Done case (no more clauses, and no generated clauses to emit): [(_ [orig-stx nested? emit? ()] ([fold-var fold-init] ...) () expr1 expr ...) - #`(let ([fold-var fold-init] ...) (let () expr1 expr ...))] + #`(let ([fold-var fold-init] ...) + (let-values ([(fold-var ...) (let () expr1 expr ...)]) + (values fold-var ...)))] ;; Switch-to-emit case (no more clauses to generate): [(_ [orig-stx nested? #f binds] ([fold-var fold-init] ...) () . body) #`(for/foldX/derived [orig-stx nested? #t binds]