diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 551597f8ab..09dcc34a5f 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -4319,6 +4319,23 @@ (test-comp '(lambda () (bytes=? #"123" #"456")) '(lambda () #f)) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check inlining with optional arguments + +(test-comp '(lambda (x) + (define (f z [y 2]) + (+ z y)) + (f x)) + '(lambda (x) + (+ x 2))) + +(test-comp '(lambda (x) + (define (f z [y (+ 1 1)]) + (+ z y)) + (f x)) + '(lambda (x) + (+ x 2))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Check that the type information is shifted in the ;; right direction while inlining. diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 805a8db82a..e37fb351c7 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -2269,6 +2269,7 @@ int scheme_ir_duplicate_ok(Scheme_Object *fb, int cross_linklet) { return (SCHEME_VOIDP(fb) || SAME_OBJ(fb, scheme_true) + || SAME_OBJ(fb, scheme_undefined) || SCHEME_FALSEP(fb) || (SCHEME_SYMBOLP(fb) && (!cross_linklet || (!SCHEME_SYM_WEIRDP(fb)