Ah, too bad: > pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > --- OLD/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl > +++ NEW/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl > @@ -3416,5 +3416,16 @@ > (read (open-input-bytes (get-output-bytes o)))))) > > ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > +;; Check that an unsufe opertion's argument is > +;; not "optimized" away if it's a use of > +;; a variable before definition: > + > +(err/rt-test (let () > + (unsafe-fx+ x 1) > + (define x 3) > + x) > + exn:fail:contract:variable?) > + > +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:-) On Apr 16, 2014, at 9:02 AM, Matthias Felleisen <matth...@ccs.neu.edu> wrote: > > On Apr 15, 2014, at 9:29 PM, Asumu Takikawa <as...@ccs.neu.edu> wrote: > >> On 2014-04-15 18:13:31 -0400, claire alvis wrote: >>> The push below includes changes to letrec expressions, internal >>> definitions, units, classes, and certain ill-formed shared expressions so >>> that they no longer leak the `undefined' value. >> >> This is great! (especially happy that TR, even with classes, doesn't >> have to worry about #<undefined> anymore) >> >> BTW, I found this weird behavior: >> >> Welcome to Racket v6.0.1.3. >> -> (require racket/unsafe/ops) >> -> (let () (+ x 3) (define x 3) 5) >> ; x: variable used before its definition [,bt for context] >> -> (let () (unsafe-fx+ x 3) (define x 3) 5) >> 5 > > > I consider this correct in a strange sense. > > Interestingly enough, > >> (let () (displayln (unsafe-fx+ x 3)) (define x 3) 5) > x: variable used before its definition > context...: > /Users/matthias/plt/racket/collects/racket/private/misc.rkt:87:7 > > which is good too. I don't know how Claire and Matthew did this, > but it's good :-) > _________________________ > Racket Developers list: > http://lists.racket-lang.org/dev _________________________ Racket Developers list: http://lists.racket-lang.org/dev