A couple of bug status updates.
[bpt/guile.git] / BUGS
1 BUGS
2
3 This file contains bugs we haven't fixed yet, and some we have.
4 The format is very simple (one bug per page):
5
6 # line regexp
7
8 1 bug NUMBER -- ONE-LINE-DESCRIPTION ^bug ([0-9]+) -- (.+)$
9 2 reported-by: SOMEONE / DATE ^reported-by: ([^/]) */ *(.+)$
10 3 fixed: DATE (for guile VERSION) ^fixed: (.+) .for guile (.+).$
11 4+ OTHER-NOTES
12
13 DATE is formatted YYYY-MM-DD, or "not-yet". Line numbering is zero-origin;
14 line 0 is empty (newline always follows newpage (recognizable w/ "\f\n")).
15 The suggested regexps can be used in a line-oriented parser.
16
17 You can use "fixed: no-need (EXPLANATION)" if the bug doesn't need to be
18 fixed. EXPLANATION might be "not a bug", "user error", etc.
19
20 \f
21 bug 0 -- no BUGS file
22 reported-by: ttn / 2001-09-25
23 fixed: 2001-09-30 (1.5.x, 1.7.x)
24
25 bugs are good.
26
27 \f
28 bug 1 -- (debug-disable 'debug) has no effect if first form in ~/.guile
29 reported-by: Sven.Hartrumpf@fernuni-hagen.de / 2001-08-31
30 fixed: 2001-11-07 (1.7.x)
31
32 ttn sez:
33 buggy behavior confirmed on both 1.5.x and 1.7.x.
34
35 on the other hand, when second or later, the expected effect (disabling use of
36 debugging evaluator) seems to be reflected when viewing the debug options. it
37 could be that the bug is in display and not the actual setting.
38
39 NJ 2002-03-08:
40
41 Problem was caused by (top-repl)'s loading of (ice-9 debug), which
42 ended with unconditional `(debug-enable 'debug)'. Fixed by removing
43 the offending lines.
44
45 \f
46 bug 2 -- documentation mirroring not complete
47 reported-by: lord@regexps.com / 2001-08
48 fixed: not-yet
49
50 ttn sez:
51 uncollated mirroring is already available:
52 http://savannah.gnu.org/cgi-bin/viewcvs/guile/
53 http://mail.gnu.org/pipermail/guile-devel/
54
55 \f
56 bug 3 -- design decisions not recorded
57 reported-by: lord@regexps.com / 2001-08
58 fixed: not-yet
59
60 changes are made w/ little documentation on their motivation, design and
61 consequences. past initiatives and current maintainer discipline to support
62 them need shoring up.
63
64 ttn sez:
65 someone also mentioned that process and product are orthogonal; nastiness can
66 result in/from either, and for different reasons. i tend to believe this up
67 until a certain point, when the process becomes self-aware and includes its own
68 improvement in its considerations. then, hopefully it becomes light.
69
70 to change people is difficult, but that's why we have guile...
71
72 \f
73 bug 4 -- named-let transform evaluates initvalue in the wrong scope
74 reported-by: agj@alum.mit.edu / 2001-09-21
75 fixed: 2001-11-17 (1.7.x)
76
77 currently:
78 > (let name ((var init) ...) body ...)
79 >
80 > to
81 >
82 > (letrec ((name (lambda (var ...) body ...)))
83 > (name init ...))
84
85 should be:
86 > ((letrec ((name (lambda (var ...) body ...))) name) init ...)
87
88 Dirk Herrmann sez:
89 I will do it - no big deal (I hope). But, I won't have time to do it
90 before next week. What about adding this code as a test case to the test
91 suite? Until it is fixed, it can be tagged as expected to fail.
92
93 \f
94 bug 5 -- uniform vector read-hash "e" clashes w/ exactness specification
95 reported-by: kwright@gis.net / 2001-10-07
96 fixed: 2001-10-14 (1.5.x, 1.7.x)
97
98 Keith Wright sez:
99 > Before getting into philosophy, I want to mention that while poking
100 > around and rethinking I found the following Bug.
101 >
102 > guile> (version)
103 > "1.5.2"
104 > guile> #E3
105 > 3
106 > guile> #e3
107 > ERROR: read:uniform-vector list not found
108 > ABORT: (misc-error)
109 > guile> 3
110 >
111 > This violates both R5RS 7.1 ``Case is insignificant'' and
112 >
113 > > From: guile-1.5.2/doc/ref/guile.info-3 Line 568
114 > >
115 > > The codes for indicating exactness (which can, incidentally, be
116 > > applied to all numerical values) are:
117 > >
118 > > * `#e', `#E' -- the number is exact
119
120 2001-10-14 Mikael Djurfeldt <mdj@linnaeus>
121
122 * read.c (scm_lreadr): When user-defined hash procedure returns
123 SCM_UNSPECIFIED: Fall back to standard handling instead of raising
124 an exception. (This prevents parsing of uniform vectors from
125 interfering with parsing of numbers.)
126
127 \f
128 bug 6 -- exactness prefix doesn't do nothing gracefully
129 reported-by: kwright@gis.net / 2001-10-09
130 fixed: 2001-10-14 (1.5.x, 1.7.x) (see bug 5)
131
132 [this may be related to bug 5. --ttn]
133
134 Keith Wright sez:
135 > The saga continues...
136 >
137 > > > The codes for indicating exactness (which can, incidentally, be
138 > > > applied to all numerical values) are:
139 > > >
140 > > > * `#e', `#E' -- the number is exact
141 >
142 > guile> #E3 ==> 3
143 > guile> #E3.0
144 > ERROR: In procedure scm_lreadr:
145 > ERROR: unknown # object
146 >
147 > Better change the reference manual s/, incidentally,/'t/.
148 >
149 > (That's a joke son. The Scheme language requires #e in front
150 > of any number to at least do nothing successfully.)
151
152 \f
153 bug 7 -- readline configuration anomolies not handled gracefully
154 reported-by: kwright@gis.net / 2001-10-17
155 fixed: not-yet
156
157 \f
158 bug 8 -- install requires makeinfo
159 reported-by: kwright@gis.net / 2001-10-17
160 fixed: not-yet
161
162 Keith Wright sez:
163 > I got guile-1.5.4 and installed it on one machine with no problem.
164 > On another I did ./configure;make as before and it died with:
165 >
166 > > ...
167 > > on.doc vports.doc weaks.doc symbols-deprecated.doc regex-posix.doc ramap.doc unif.doc filesys.doc posix.doc net_db.doc socket.doc | ./guile-snarf-docs-texi > guile.texi \
168 > > || { rm guile.texi; false; }
169 > > rm -f guile-procedures.txt
170 > > makeinfo --force -o guile-procedures.txt guile.texi || test -f guile-procedures.txt
171 > > /bin/sh: makeinfo: command not found
172 > > make[1]: *** [guile-procedures.txt] Error 1
173 > > make[1]: Leaving directory `/home/kwright/build/guile-1.5.4/libguile'
174 > > make: *** [all-recursive] Error 1
175 >
176 > I get the impression that it is supposed to build without 'makeinfo',
177 > if this is not so it should be mentioned in the README or INSTALL.
178
179 NJ 2002-03-08:
180
181 Addressed partially in Makefile.am, by copying guile-procedures.texi
182 to guile-procedures.txt if makeinfo is not available.
183
184 However, a better IMO fix would be to include a prebuilt
185 guile-procedures.txt in the distribution.
186
187 \f
188 bug 9 -- sibling threads not infinite looping
189 reported-by: giraud@tif.inria.fr / 2001-09-24
190 fixed: not-yet
191
192 Manuel Giraud sez:
193 > I've configure guile-1.5.4 '--with-threads' and '--with-modules' on a
194 > "classical" Linux box and used this code that crash silently :
195 >
196 > (use-modules (ice-9 threads))
197 >
198 > (begin-thread
199 > (let loop ()
200 > (display "a")
201 > (newline)
202 > (loop)))
203 >
204 > (begin-thread
205 > (let loop ()
206 > (display "b")
207 > (newline)
208 > (loop)))
209
210 mdj sez:
211 + 2001-10-06 Mikael Djurfeldt <mdj@linnaeus>
212 +
213 + These changes fixes a race condition in the Guile coop - pthread
214 + compatibility code.
215 +
216 + * coop.c (mother_awake_p): New variable.
217 + (coop_create): Set mother_awake_p before creating or signalling
218 + mother; wait until mother is going to sleep before returning.
219 + (mother): Reset mother_awake_p before going to sleep.
220 +
221
222 ttn sez:
223 crash still occurs w/ "guile -s bug.scm" (cvs checkout on 2001/11/06).
224 however, "guile -l bug.scm" works as expected.
225
226 \f
227 bug 10 -- embedded libltdl masks system version unconditionally
228 reported-by: grib@linuxdevel.com / 2001-11-04
229 fixed: not-yet
230
231 Bill Gribble sez:
232 > The guideline for when to use the convenience version of libltdl is
233 > this:
234 >
235 > > In general you can safely use the convenience library in
236 > > programs which don't depend on other libraries that might
237 > > use libltdl too.
238 >
239 > So guile's use of the convenience library embodies an assumption about
240 > programs which use guile: that they will not use libltdl except through
241 > guile's wrapper (dynamic-link and friends).
242 >
243 > It seems like this is a bad assumption for guile to make, since it is
244 > intended to be used as an extension language for many different kinds of
245 > programs and not to put a priori restrictions on what they can do.
246 > Especially when those restrictions are not documented.
247 >
248 > I would suggest that prior to the guile-1.6 release the use of the
249 > convenience ltdl library be removed, instead depending on an installed
250 > version of libltdl.
251
252 \f
253 bug 11 -- (ice-9 optargs) #:rest arg polluted by keys/values
254 reported-by: ttn / 2001-11-09
255 fixed: no-need (behavior consistent w/ Common Lisp, user error)
256
257 ttn sez:
258 > the following code displays
259 >
260 > (#<procedure good x> ())
261 > (#<procedure good x> (1))
262 > (#<procedure good x> ((1 2 3)))
263 > (#<procedure blah x> JAY KAY (#:j JAY #:k KAY))
264 > (#<procedure blah x> JAY KAY (#:j JAY #:k KAY 1))
265 > (#<procedure blah x> JAY KAY (#:j JAY #:k KAY (1 2 3)))
266 >
267 > but `x' should be the same for both `good' and `blah':
268 >
269 > (use-modules (ice-9 optargs) (ice-9 rdelim))
270 >
271 > (define* (good #:rest x)
272 > (write-line (list good x)))
273 >
274 > (good)
275 > (good 1)
276 > (good '(1 2 3))
277 >
278 > (define* (blah #:key (j 'j) (k 'k) #:rest x)
279 > (write-line (list blah j k x)))
280 >
281 > (blah #:j 'JAY #:k 'KAY)
282 > (blah #:j 'JAY #:k 'KAY 1)
283 > (blah #:j 'JAY #:k 'KAY '(1 2 3))
284
285 mvo sez:
286 > In Common Lisp, there are no non-key rest-args when you have keyword
287 > parameters. After the required and optional arguments, there must
288 > follow an even number of additional arguments, and every two of them
289 > are treated as a keyword/value pair.
290 >
291 > I think it makes sense the way CL specifies this. Anything beyond
292 > this would lead to confusion. If you want to go beyond what (ice-9
293 > optargs) offers, yo are probably best off writing your own argument
294 > parser.
295
296 \f
297 bug 12 -- goops class redefinition not signalling "no such accessor" error
298 reported-by: wawrzin@cs.tu-berlin.de / 2001-12-04
299 fixed: not-yet
300
301 Thomas Wawrzinek sez:
302 > Running the following script produces some guile output which confueses me:
303 >
304 > ;;; script.scm
305 > (use-modules (oop goops))
306 >
307 > (define-class <root> ())
308 >
309 > (define-class <foo> (<root>)
310 > (a #:init-value #f #:accessor a-value #:init-keyword #:a-value)
311 > (b #:init-value #f #:accessor b-value #:init-keyword #:b-value))
312 >
313 > (define-class <bar> (<foo>))
314 >
315 > (define-method (initialize (o <bar>) . args)
316 > (set! (a-value o) "BAR")
317 > (next-method))
318 >
319 > (define-generic print)
320 >
321 > (define-method (print (o <bar>))
322 > (display (a-value o)) (newline)
323 > (display (b-value o)) (newline))
324 >
325 > ;;; OK, this is very *wrong*!
326 > (define-class <bar> (<root>))
327 >
328 > (define baz (make <bar> #:b-value "BAZ"))
329 >
330 > (print baz)
331 >
332 > $ guile -s script.scm
333 > BAR
334 > #<unknown-immediate 0x69746163>
335 > $ guile -v
336 > Guile 1.5.4
337 > Copyright (c) 1995, 1996, 1997, 2000, 2001 Free Software Foundation
338 > Guile may be distributed under the terms of the GNU General Public Licence;
339 > certain other uses are permitted as well. For details, see the file
340 > `COPYING', which is included in the Guile distribution.
341 > There is no warranty, to the extent permitted by law.
342 >
343 > I'm running on a SuSE Linux 7.2 box ...
344 >
345 > I expected that because of the second (define-class <bar> ...) I would get
346 > some sensible error message (at least about the usage of (a-value ...) in
347 > the (print ...) generic function call).
348 >
349 > Maybe I'm mistaken here, I know that GOOPS has a class redefinition
350 > protocol, but does it go with the define-class macro?
351 >
352 > I accidently had such a second (define-class ...) with an already
353 > used class-name. In a much more complex program than the above, this
354 > resulted in a segmentation fault (backtrace told me it was GC related).
355 >
356 > To avoid such behavior, would it be sensible to have guile indicate
357 > a wrong usage error or something?
358
359 \f
360 bug 13 -- incorrect error reporting after stack overflow
361 reported-by: Panagiotis Vossos <jacbre@internet.gr> / 2002-02-19
362 fixed: not-yet
363
364 Panagiotis Vossos sez:
365
366 I have guile 1.5.4 installed and I discovered something strange.
367
368 guile> (define (foo n) (+ n (foo n)))
369 guile> (foo 10)
370 ERROR: Stack overflow
371 ABORT: (stack-overflow)
372 guile> thisisabug
373 <unnamed port>: In expression thisisabug:
374 <unnamed port>: Unbound variable: thisisabug
375 ABORT: (unbound-variable)
376 guile> (foo 10)
377 <unnamed port>: In expression thisisabug:
378 <unnamed port>: Stack overflow
379 ABORT: (stack-overflow)
380
381 The last message shows the previous unbound variable 'thisisabug'.
382 'foo' is just an example, this seems to happen for every function that
383 causes overflow. It's not serious, but it sure looks misleading..
384
385 Neil Jerram sez:
386
387 It's something to do with the way that debug info frames cope with
388 stack overflow.
389
390 \f
391 bug 14 -- strange gc loop caused by trap misuse
392 reported-by: Neil Jerram <neil@ossau.uklinux.net> / 2002-02-03
393 fixed: not-yet
394
395 Neil Jerram sez:
396
397 Using the current unstable CVS Guile...
398
399 Running under gdb, type in the following:
400
401 (gdb) run -q
402 Starting program: /usr/local/bin/guile -q
403 guile> (trap-set! enter-frame-handler (lambda () 1))
404 (exit-frame-handler #f apply-frame-handler #f enter-frame-handler #<procedure #f ()> traps)
405 guile> (trap-enable 'enter-frame)
406
407 There is no response. Wait a few seconds, and then C-c to send an
408 interrupt. You'll find that the call stack shows a huge number of
409 recursive calls to scm_gc_mark (about 4000 per second waited on my
410 box). (If you don't see scm_gc_mark immediately, you may have
411 interrupted too quickly: let it run for another second and then C-c
412 again.)
413
414 Here's as much of an explanation as I can offer... The intended
415 effect of the two `trap' lines above is that the evaluator calls the
416 specified procedure every time it enters a new evaluation frame or is
417 about to perform an application. However, the procedure above doesn't
418 accept the right number of arguments, so the attempt to call it gives
419 rise to a wrong-num-args error, which (I presume) jumps us out of that
420 level of the evaluator and is caught by the usual REPL machinery in
421 boot-9.scm.
422
423 Then, the next time that we need to GC, we hit this scm_gc_mark loop.
424 My guess is that something about the trap+error scenario has left data
425 or the stack in a state which exposes a bug in the GC.
426
427 \f
428 [BUGS ends here]