GNU bug report logs - #51140
28.0.50; cl-letf appears not to work with native-comp (at least for process-exit-status and other builtins)

Previous Next

Package: emacs;

Reported by: Robert Irelan <rirelan <at> gmail.com>

Date: Mon, 11 Oct 2021 22:38:01 UTC

Severity: normal

Tags: moreinfo

Found in version 28.0.50

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Andrea Corallo <akrl <at> sdf.org>
To: Stefan Kangas <stefan <at> marxist.se>
Cc: Michael Heerdegen <michael_heerdegen <at> web.de>, 51140 <at> debbugs.gnu.org, Robert Irelan <rirelan <at> gmail.com>
Subject: bug#51140: 28.0.50; cl-letf appears not to work with native-comp (at least for process-exit-status and other builtins)
Date: Tue, 30 Nov 2021 16:22:23 +0000
Stefan Kangas <stefan <at> marxist.se> writes:

> Robert Irelan <rirelan <at> gmail.com> writes:
>
>>     (defun +ivy--always-return-zero-exit-code-a (fn &rest args)
>>       (let ((process-exit-status-orig
>>              (symbol-function 'process-exit-status)))
>>         (cl-letf* (((symbol-function 'process-exit-status)
>>                     (lambda (_proc)
>>                       (let ((code (funcall process-exit-status-orig _proc)))
>>                         (if (= code 2) 0 code)))))
>>           (apply fn args)))
>>     (advice-add #'counsel-rg :around #'+ivy--always-return-zero-exit-code-a)
>
> Thanks, copying in Andrea here.

I tried to reproduce a reduced version of this.  On current master
starting emacs -Q I native compiled and loaded the following:

test.el =======================================
;;; -*- lexical-binding: t; -*-
(defun foo ())

(defun bar (fn &rest args)
  (let ((process-exit-status-orig
         (symbol-function 'process-exit-status)))
    (cl-letf* (((symbol-function 'process-exit-status)
		(lambda (proc)
                  (let ((code (funcall process-exit-status-orig proc)))
                    (if (= code 2) 0 code)))))
      (apply fn args))))
=======================================

Then I've advised `foo' as follow

(advice-add #'foo :around #'bar)

After that running `foo' triggers the compilation of the trampoline for
`process-exit-status' but with no errors.

Robert could you try this reduced recipe and see if it works or not on
your setup?

If it works we need another a precise description on how to trigger this
bug starting from emacs -Q.

Thanks

  Andrea




This bug report was last modified 2 years and 247 days ago.

Previous Next


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