bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#13088: stack overflow while compiling


From: Stefan Israelsson Tampe
Subject: bug#13088: stack overflow while compiling
Date: Thu, 6 Dec 2012 17:01:24 +0100

Some findings!

1. The problems probably originates in the translation to tree-il.
2. Using something like
(define-syntax my-cond
   (syntax-rule ()
      ((_ (p x ...)    )  (if p (begin x ...)))
      ((_ (p x ...) . l)  (if p (begin x ...) (my-cond . l))))

Makes the compilation to progress further but fails at a later with,
scheme@(guile-user)> (compile program #:to 'value)
language/assembly/compile-bytecode.scm:150:39: In procedure #<procedure 2be2a20 at language/assembly/compile-bytecode.scm:150:27 (x)>:
language/assembly/compile-bytecode.scm:150:39: In procedure bytevector-u8-set!: Value out of range: 2070

I quick look at the cond clause in boot.scm does not show any evidence that it will blow the stack. In my view the
suspect is any code in psyntax.scm that does a tree walk of the finished code the cond clause is a really deep tree!
because that cond clause produces a already expanded large codeblock that psyntax has to chew on while  the my-cond
clause above produces the tree-il incrementally in smaller steps.

/Stefan


On Wed, Dec 5, 2012 at 5:31 PM, <address@hidden> wrote:
This program tries to compile a long cond _expression_ and fails quickly with
a stack overflow.

Of course this procedure was generated and a user is unlikely to write such a
long cond, but considering the simplicity of the _expression_ I'm surprised that
the stack is so solicited.

Note that I tested with guile 2.0.6 and not the fresh new 2.0.7 but I haven't
noticed anything in the changelog regarding memory consumption.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]