Subject: Re: bug#45433: 28.0.50; byte/native-compiling ivy and ox-publish possibly miscompiled

From: Mauricio Collares <[email-masked]>
Date: Wed, 30 Dec 2020 10:54:30 -0300

Andrea Corallo <[email-masked]> writes:

> Hi Mauricio,
>
> I had a look, this issue is not native compiler related as I get the
> same behavior byte compiling.
>
> The trouble seems with `ivy-add-face-text-property' being defaliased,
> ATM I'm not sure what is going on tho.
>
>   Andrea

Hi Andrea,

Here's an attempt at a minimized testcase:

* Contents of ~/ivy.el:

(defun ivy--call-marked (action)
  (let* ((prefix-len (length ivy-mark-prefix))
         (marked-candidates
          (mapcar
           (lambda (s)
             (let ((cand (substring s prefix-len)))
               (if ivy--directory
                   (expand-file-name cand ivy--directory)
                 cand)))
           ivy-marked-candidates))
         (multi-action (ivy--get-multi-action ivy-last)))))

(defalias 'ivy--file-local-name
  (if (fboundp 'file-local-name)
      #'file-local-name
    (lambda (file)
      (or (file-remote-p file 'localname) file))))

(provide 'ivy)

* Run the following three commands (note that skipping either command 1
  or command 2 makes the last command pass):

$ emacs -Q --batch --eval "(add-to-list 'load-path \"/home/collares\")"
-f batch-byte-compile ~/ivy.el

$ emacs -Q --batch --eval "(add-to-list 'load-path \"/home/collares\")"
--eval "(setq comp-eln-load-path '(\"/home/collares/\"))" -f batch-native-compile ~/ivy.el

$ emacs -Q --batch --eval "(add-to-list 'load-path \"/home/collares\")"
--eval "(setq comp-eln-load-path '(\"/home/collares/\"))" --eval "(require 'ivy)"

With this, I still get the same error locally:

[... five undefined variable/function warnings, due to the code I
deleted to minimize the testcase ...] 
Debugger entered--Lisp error: (void-variable fboundp)
  byte-code("\300\301\302\303!\203\f\0\303\202\n\0\304\"\210\305\306!\207" [defalias ivy--file-local-name fboundp file-local-name #f(compiled-function (file) #<bytecode 0x5f7d1a5a33e66f3>) provide ivy] 4)
  require(ivy)
  command-line-1(("--eval" "(add-to-list 'load-path \"/home/collares\")" "--eval" "(setq comp-eln-load-path '(\"/home/collares/\"))" "--eval" "(require 'ivy)"))
  command-line()
  normal-top-level()

Best,
Mauricio