cs & schemify: repair bad cross-module copy propagation

Closes #2732
This commit is contained in:
Matthew Flatt 2019-07-09 15:20:24 -06:00
parent 0284bdaa58
commit 15587d84fe
2 changed files with 25 additions and 1 deletions

View File

@ -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)

View File

@ -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]