These seem correct to me. What were you expecting (and why?).<div><br></div><div>Robby<span></span><br><br>On Saturday, April 19, 2014, Gustavo Massaccesi <<a href="mailto:gustavo@oma.org.ar">gustavo@oma.org.ar</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I found another problem with the optimizer and the new undefined behavior.<br>
<br>
(letrec ([x (if #t 8 x)]) x) ;==>8<br>
<br>
I also consider this correct in a strange sense :).<br>
<br>
Gustavo<br>
<br>
<br>
Welcome to Racket v6.0.1.4.<br>
> (letrec ([x x]) x)<br>
x: undefined;<br>
 cannot use before initialization<br>
  context...:<br>
   C:\Program Files\Racket-6.0.1.4\collects\racket\private\misc.rkt:87:7<br>
> (letrec ([x 5]) x)<br>
5<br>
> (letrec ([x (if #t 8 x)]) x)<br>
8<br>
> (letrec ([x (if #f 8 x)]) x)<br>
x: undefined;<br>
 cannot use before initialization<br>
  context...:<br>
   C:\Program Files\Racket-6.0.1.4\collects\racket\private\misc.rkt:87:7<br>
><br>
<br>
<br>
On Wed, Apr 16, 2014 at 10:09 AM, Matthias Felleisen<br>
<<a href="javascript:;" onclick="_e(event, 'cvml', 'matthias@ccs.neu.edu')">matthias@ccs.neu.edu</a>> wrote:<br>
><br>
> Ah, too bad:<br>
><br>
>> pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl<br>
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
>> --- OLD/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl<br>
>> +++ NEW/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl<br>
>> @@ -3416,5 +3416,16 @@<br>
>>           (read (open-input-bytes (get-output-bytes o))))))<br>
>><br>
>> ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
>> +;; Check that an unsufe opertion's argument is<br>
>> +;; not "optimized" away if it's a use of<br>
>> +;; a variable before definition:<br>
>> +<br>
>> +(err/rt-test (let ()<br>
>> +               (unsafe-fx+ x 1)<br>
>> +               (define x 3)<br>
>> +               x)<br>
>> +             exn:fail:contract:variable?)<br>
>> +<br>
>> +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
><br>
><br>
> :-)<br>
><br>
> On Apr 16, 2014, at 9:02 AM, Matthias Felleisen <<a href="javascript:;" onclick="_e(event, 'cvml', 'matthias@ccs.neu.edu')">matthias@ccs.neu.edu</a>> wrote:<br>
><br>
>><br>
>> On Apr 15, 2014, at 9:29 PM, Asumu Takikawa <<a href="javascript:;" onclick="_e(event, 'cvml', 'asumu@ccs.neu.edu')">asumu@ccs.neu.edu</a>> wrote:<br>
>><br>
>>> On 2014-04-15 18:13:31 -0400, claire alvis wrote:<br>
>>>> The push below includes changes to letrec expressions, internal<br>
>>>> definitions, units, classes, and certain ill-formed shared expressions so<br>
>>>> that they no longer leak the `undefined' value.<br>
>>><br>
>>> This is great! (especially happy that TR, even with classes, doesn't<br>
>>> have to worry about #<undefined> anymore)<br>
>>><br>
>>> BTW, I found this weird behavior:<br>
>>><br>
>>> Welcome to Racket v6.0.1.3.<br>
>>> -> (require racket/unsafe/ops)<br>
>>> -> (let () (+ x 3) (define x 3) 5)<br>
>>> ; x: variable used before its definition [,bt for context]<br>
>>> -> (let () (unsafe-fx+ x 3) (define x 3) 5)<br>
>>> 5<br>
>><br>
>><br>
>> I consider this correct in a strange sense.<br>
>><br>
>> Interestingly enough,<br>
>><br>
>>> (let () (displayln  (unsafe-fx+ x 3)) (define x 3) 5)<br>
>> x: variable used before its definition<br>
>>  context...:<br>
>>   /Users/matthias/plt/racket/collects/racket/private/misc.rkt:87:7<br>
>><br>
>> which is good too. I don't know how Claire and Matthew did this,<br>
>> but it's good :-)<br>
>> _________________________<br>
>>  Racket Developers list:<br>
>>  <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
><br>
> _________________________<br>
>   Racket Developers list:<br>
>   <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
_________________________<br>
  Racket Developers list:<br>
  <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
</blockquote></div>