Hello! l...@gnu.org (Ludovic Courtès) skribis:
> <dsm...@roadrunner.com> 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’.