diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index bb1bcca073..c592cd45de 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -6583,4 +6583,12 @@ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(module regression-test-to-make-sure-inlining-does-not-go-crazy racket/base + (define (f x) + (lambda (y) + (letrec ([recursion (f x)]) + (+ x y))))) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (report-errs) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index f596bb9dc1..6dbf879580 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -8096,6 +8096,8 @@ static Scheme_Object *optimize_lets(Scheme_Object *form, Optimize_Info *info, in avoid the possibility of N^2 behavior. */ if (!OPT_DISCOURAGE_EARLY_INLINE) rhs_info->letrec_not_twice++; + inline_fuel = rhs_info->inline_fuel; + rhs_info->inline_fuel >>= 1; use_psize = rhs_info->use_psize; rhs_info->use_psize = info->use_psize; @@ -8111,6 +8113,7 @@ static Scheme_Object *optimize_lets(Scheme_Object *form, Optimize_Info *info, in if (!OPT_DISCOURAGE_EARLY_INLINE) --rhs_info->letrec_not_twice; + rhs_info->inline_fuel = inline_fuel; rhs_info->use_psize = use_psize; irlv->value = value;