Subject: bug#59793: 29.0.60; subr.elc is not compiled correctly

From: Eli Zaretskii <[email-masked]>
Date: Sun, 04 Dec 2022 09:08:19 +0200

> From: Feng Shu <[email-masked]>
> Cc: Akib Azmain Turja <[email-masked]>,  [email-masked]
> Date: Sun, 04 Dec 2022 05:49:06 +0800
> 
> > You have redefined a subr.el function with cl-letf*, so how is what happens
> > as result a bug in Emacs?  Does the original subr.el function not do what
> > it's supposed to do, before you replace it?
> >
> > I understand you didn't expect the result of cl-letf*, and were surprised by
> > what you saw, but I don't understand why you expect the Emacs development to
> > do something about your surprise.
> 
> I think the issue is that: 
> when I run emacs-29 first, I can not temp override `insert' function
> in `insert-for-yank-1' with the help of cl-letf in bug59593-yank
> 
> (require 'cl-lib)
> (defun bug59593-yank (&optional arg)
>   (interactive "*P")
>   (cl-letf* ((inhibit-read-only t)
>              (insert-for-yank (symbol-function #'insert-for-yank))
>              ((symbol-function #'insert-for-yank)
>               (lambda (&rest args)
>                 (cl-letf (((symbol-function #'insert)
>                            (lambda (&rest args)
>                              (message
>                               "%S"
>                               (mapconcat (lambda (arg)
>                                            (if (stringp arg)
>                                                arg
>                                              (string arg)))
>                                          args "")))))
>                   (apply insert-for-yank args)))))
>     (yank arg)))
> 
> 
> but after I run (load "subr.el"), overriding `insert' success.
> if I run (load "subr.elc"), overriding do not success.
> 
> so I think subr.elc maybe has some problem.

No, I see no problem in subr.elc here.

You need to find a different way of overriding what insert-for-yank does.