From 15587d84fe3969f32573c07994b1b386e807f54b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 9 Jul 2019 15:20:24 -0600 Subject: [PATCH] cs & schemify: repair bad cross-module copy propagation Closes #2732 --- .../racket-test-core/tests/racket/module.rktl | 21 +++++++++++++++++++ racket/src/schemify/infer-known.rkt | 5 ++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-test-core/tests/racket/module.rktl b/pkgs/racket-test-core/tests/racket/module.rktl index 0bf8b547ad..07678699dc 100644 --- a/pkgs/racket-test-core/tests/racket/module.rktl +++ b/pkgs/racket-test-core/tests/racket/module.rktl @@ -2970,6 +2970,27 @@ case of module-leve bindings; it doesn't cover local bindings. (read i))) (test #t dynamic-require ''check-with-inlining-duplicates-by-using-submodules 'check)) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check copy propagation across module boundaries + +(module defines-also-something-as-alias-for-something racket/base + + (provide also-something) + + (define something (list 1 2 3)) + (define also-something something)) + + +(module uses-also-something-via-local-alias racket/base + (require 'defines-also-something-as-alias-for-something) + + (provide v) + + (define copy also-something) + (define v (list copy))) + +(test '((1 2 3)) dynamic-require ''uses-also-something-via-local-alias 'v) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/schemify/infer-known.rkt b/racket/src/schemify/infer-known.rkt index 03bf910f85..8749739a96 100644 --- a/racket/src/schemify/infer-known.rkt +++ b/racket/src/schemify/infer-known.rkt @@ -59,7 +59,10 @@ [(or (known-procedure/can-inline? known) (known-literal? known)) known] - [(not defn) + [(or (not defn) + ;; can't just return `known`; like `known-procedure/can-inline/need-imports`, + ;; we'd lose track of the need to potentially propagate imports + (known-copy? known)) (known-copy rhs)] [else known]))] [defn a-known-constant]