Subject: bug#10336: Holidays vs. release

From: [email-masked] (Ludovic Courtès)
Date: Wed, 25 Jan 2012 17:10:41 +0100

Hello!

[email-masked] (Ludovic Courtès) skribis:

> <[email-masked]> skribis:
>
>> I'm on a 32bit Debian intel system.  libgc is 7.2alpha4
>>
>> git describe is
>> v2.0.3-82-ga2c6601
>>
>> The single failure running make check is
>>
>> Running gc.test
>> FAIL: gc.test: gc: Lexical vars are collectable
>
> Same problem on Hydra, but only i686, not x86_64.

So I looked into it, and there’s at least one thing wrong: the test must
be compiled with #:partial-eval? #f, otherwise the ‘let’ vanishes, which
defeats the test.

Second thing, it suffices to insert a function call like
((lambda (x) #f) #f) just before calls to ‘gc’ to solve the problem.

So I’m thinking we may have a real bug here.

I’ve changed the test this way:

  (pass-if "Lexical vars are collectable"
    (pair?
     (compile
      '(begin
         (define guardian (make-guardian))
         (let ((f (list 1 2 3)))
            (guardian f))

         ;; Note: no `stack-cleanup' call should be needed here since
         ;; leaving `let' should have the same effect.

         ;((lambda (x) x) #f)
         (gc)(gc)(gc)
         (guardian))

      ;; Turn the partial evaluator off so that `let' is preserved.
      #:opts '(#:partial-eval? #f)
      #:env (current-module))))

The assembly code does seem to push ‘void’ in all cases, though, but
this needs to be double-checked.

Thanks,
Ludo’.