Feufochmar <guill.delaco...@gmail.com> writes: > > The backtrace I have with guild compile : > > $ guild compile test.scm > Backtrace: > In language/tree-il/optimize.scm: > 44: 19 [optimize! #<tree-il (lambda () #)> #<module (#{ g40}#) 2097ab0> ...] > In language/tree-il/cse.scm: > 537: 18 [visit #<tree-il (lambda () (lambda-case #))> #<vlist ()> ...] > 543: 17 [visit #<tree-il (lambda-case (# #))> #<vhash 22cf540 1 pairs> ...] > 483: 16 [visit #<tree-il #> #<vhash 22cf540 1 pairs> #<vlist ()> ...] > 537: 15 [visit #<tree-il (lambda (#) (lambda-case #))> #<vhash 22cf540 1 > pairs> ...] > 543: 14 [visit #<tree-il (lambda-case (# #))> #<vhash 22cf4a0 2 pairs> ...] > 429: 13 [visit #<tree-il (let # # # ...)> #<vhash 22cf4a0 2 pairs> #<vlist > ()> ...] > 370: 12 [lp (#<tree-il (lambda () #)>) () #<vlist ()>] > 537: 11 [visit #<tree-il (lambda () (lambda-case #))> #<vhash 22cf4a0 2 > pairs> ...] > 543: 10 [visit #<tree-il (lambda-case (# #))> #<vhash 22cf400 3 pairs> ...] > 437: 9 [visit #<tree-il (letrec* # # ...)> #<vhash 22cf400 3 pairs> ...] > 533: 8 [visit #<tree-il (apply # # ...)> #<vhash 23250e0 19 pairs> ...] > 370: 7 [lp (#<tree-il #> #<tree-il #> #<tree-il #> #<tree-il #>) () #<vlist > ()>] > 533: 6 [visit #<tree-il (apply # #)> #<vhash 23250e0 19 pairs> ...] > 370: 5 [lp (#<tree-il (if # # #)>) () #<vlist ()>] > 403: 4 [return #<tree-il (if # # #)> #<vlist ()>] > 333: 3 [find-dominating-lexical #<tree-il (if # # ...)> 0 ...] > 315: 2 [unroll #<vhash 23250e0 19 pairs> 19 13] > In ice-9/vlist.scm: > 303: 1 [vlist-ref #<vhash 23250e0 19 pairs> 19] > In ice-9/boot-9.scm: > 106: 0 [#<procedure 204f280 at ice-9/boot-9.scm:97:6 (thrown-k . args)> > out-of-range ...] > > ice-9/boot-9.scm:106:20: In procedure #<procedure 204f280 at > ice-9/boot-9.scm:97:6 (thrown-k . args)>: > ice-9/boot-9.scm:106:20: Value out of range: 0
I am not familiar with the cse module, but a quick perusal of the code leads me to think that the unroll procedure in cse.scm expects the invariant base + n <= (vlist-length db) scheme@(guile−user) [1]> ,up In language/tree−il/cse.scm: 315:10 1 (unroll #<vhash 96cca60 19 pairs> 19 13) scheme@(guile−user) [1]> ,up In language/tree−il/cse.scm: 333:28 2 (find−dominating−lexical #<tree−il (if (lexical steep? steep?−818) (le…> …) scheme@(guile−user) [1]> ,locals Local variables: $13 = exp = #<tree−il (if (lexical steep? steep?−818) (lexical y0 y0−814) (lexical x…> $14 = effects = 0 $15 = env = #<vhash 96cc7a0 11 pairs> $16 = db = #<vhash 96cca60 19 pairs> $17 = entry−matches? = #<procedure entry−matches? (v1 v2)> $18 = unroll = #<procedure unroll (db base n)> $19 = h = 72117960 $20 = env−len = 11 $21 = db−len = 19 $22 = n = 1 $23 = m = 16 $24 = v = (#(#<tree−il (if (apply (primitive <) (apply (primitive values) (i…> …) . #) $25 = w = #(#<tree−il (if (apply (primitive <) (apply (primitive values) (if (lex…> …) $26 = x = 72117960 $27 = len = 4 $28 = w = #<tree−il (if (apply (primitive <) (apply (primitive values) (if (lexical …> $29 = w = y−step $30 = w = y−step−827 $31 = w = 3 scheme@(guile−user) [1]> ,use (ice-9 vlist) scheme@(guile−user) [1]> (vlist-ref $15 $22) $34 = (#(#<tree−il (if (apply (primitive <) (apply (primitive values) (if (lexical steep? steep?−818) (lexical x0 x0−813) (lexical y0 y0−814))) (apply (primitive values) (if (lexical steep? steep?−818) (lexical x1 x1−815) (lexical y1 y1−816)))) (const 1) (const −1))> y−step y−step−827 3) . 72117960) The only call to unroll, is (unroll db m (- db-len db-len*)) the missing db-len* is the fourth element of the vector in $34 or 3. So the call works out at (unroll db 16 (- 19 3)) == (unroll db 16 16) and obviously 16 + 16 > 19 Not sure if that's helped at all, but the bug intrigued me when he brought it up on #guile yesterday -- Ian Price -- shift-reset.com "Programming is like pinball. The reward for doing it well is the opportunity to do it again" - from "The Wizardy Compiled"