GNU bug report logs - #64508
Optimization of "-" function is incorrect in presence of GOOPS overloading

Previous Next

Package: guile;

Reported by: Jean Abou Samra <jean <at> abou-samra.fr>

Date: Fri, 7 Jul 2023 12:57:01 UTC

Severity: normal

To reply to this bug, email your comments to 64508 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guile <at> gnu.org:
bug#64508; Package guile. (Fri, 07 Jul 2023 12:57:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Jean Abou Samra <jean <at> abou-samra.fr>:
New bug report received and forwarded. Copy sent to bug-guile <at> gnu.org. (Fri, 07 Jul 2023 12:57:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Jean Abou Samra <jean <at> abou-samra.fr>
To: bug-guile <at> gnu.org
Subject: Optimization of "-" function is incorrect in presence of GOOPS
 overloading
Date: Fri, 07 Jul 2023 14:56:15 +0200
[Message part 1 (text/plain, inline)]
The following code demonstrates that when byte-compiling (but not when
interpreting), the call (- x) is transformed into (- 0 x). This results
in failure of custom - methods defined via GOOPS.

I think this says it all:


$ guile3.0
GNU Guile 3.0.7 [...]
scheme@(guile-user)> ,optimize (- x)
$1 = (- 0 x)


The longer version:


$ cat minus.scm 
(use-modules (oop goops))

(define-class <Foo> ()
  (bar #:init-keyword #:bar))

(define-method (- (x <Foo>))
  (make <Foo> #:bar (- (slot-ref x 'bar))))

(display (slot-ref (- (make <Foo> #:bar 5))
                   'bar))
(newline)



$ guile3.0 --no-auto-compile minus.scm 
-5


$ guile3.0 minus.scm 
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /home/jean/tmp/minus.scm
;;; compiled /home/jean/.cache/guile/ccache/3.0-LE-8-
4.5/home/jean/tmp/minus.scm.go
Backtrace:
In ice-9/boot-9.scm:
  1752:10  8 (with-exception-handler _ _ #:unwind? _ # _)
In unknown file:
           7 (apply-smob/0 #<thunk 7f569a4a0f60>)
In ice-9/boot-9.scm:
    724:2  6 (call-with-prompt _ _ #<procedure default-prompt-handle…>)
In ice-9/eval.scm:
    619:8  5 (_ #(#(#<directory (guile-user) 7f569a499c80>)))
In ice-9/boot-9.scm:
   2835:4  4 (save-module-excursion _)
  4380:12  3 (_)
In /home/jean/tmp/minus.scm:
     9:19  2 (_)
In oop/goops.scm:
  1567:11  1 (cache-miss 0 #<<Foo> 7f56944e70b0>)
   1585:2  0 (_ _ _)

oop/goops.scm:1585:2: No applicable method for #<<generic> - (1)> in call (- 0
#<<Foo> 7f56944e70b0>)

[signature.asc (application/pgp-signature, inline)]

This bug report was last modified 1 year and 175 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.