diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 2cb9b635cf..ddafff0d82 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -5705,6 +5705,22 @@ 'bar))) bar) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check that `string-append` on a known-string argument +;; is not treated consistently by the optimzier and +;; validator + +(let ([c (compile + '(module m racket/base + (define ill + (let ((base (string-append "a"))) + (λ (x) (string-append base x)))) + (ill "b")))]) + (define o (open-output-bytes)) + (write c o) + (parameterize ([read-accept-compiled #t]) + (void (read (open-input-bytes (get-output-bytes o)))))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 868bca0da7..8f4fb46135 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -8737,7 +8737,7 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context) if (n == 1) { if (scheme_ir_propagate_ok(e, info)) cnst = 1; - else if (scheme_is_statically_proc(e, info, 0)) { + else if (scheme_is_statically_proc(e, info, OMITTABLE_IGNORE_APPN_OMIT)) { cnst = 1; sproc = 1; }