bug#64508: Optimization of "-" function is incorrect in presence of GOOPS overloading
Olivier Dion <[email protected]> Wed, 04 Mar 2026 14:44:59 -0500
| Newsgroups | gmane.lisp.guile.bugs |
|---|---|
| Message-ID | <87wlzr5qh0.fsf@laura> |
On Wed, 04 Mar 2026, Olivier Dion <[email protected]> wrote: > On Wed, 04 Mar 2026, Werner LEMBERG <[email protected]> wrote: >> Is there any progress in fixing this glitch? [...] > To something is happening when expanding: (primcall - (toplevel x)) So the culprit is in languages/tree-il/primitives.scm: (define-primitive-expander - (x) (- 0 x) ; <- here (x y) (- x y) (x y z ... last) (- (- x y . z) last)) introduced by cb28c08537790b49f7bc94f2f6b426497152bbe7 If I remove the 0, it seems to be okay and no tests are failing. I wonder why Andy decides to put this expansion. There seems to be similar expansions for a couple of primitive generics: (define-primitive-expander zero? (x) (= x 0)) (define-primitive-expander positive? (x) (> x 0)) (define-primitive-expander negative? (x) (< x 0)) (define-primitive-expander / (x) (/ 1 x) ; <- here (x y z ... last) (/ (/ x y . z) last)) I think it is fine to remove the expander for the `(x)' case for `-' and `/', but not for the predicates. Thoughts? Thanks, Olivier -- Olivier Dion