Subject: Re: bug#56746: 29.0.50; Probable bug with native compilation

From: Kenneth Stuart <[email-masked]>
Date: Tue, 26 Jul 2022 20:39:47 +0100

Andrea Corallo <[email-masked]> writes:

> Eli Zaretskii <[email-masked]> writes:
>
>>> From: Kenneth Stuart <[email-masked]>
>>> Date: Sun, 24 Jul 2022 15:16:42 +0100
>>> 
>>> Note that I'm not using 'emacs -Q' as a later version of Org is
>>> required, however the issue strongly appears to be with emacs native
>>> compilation as it does not occur from a build without native
>>> compilation.
>>> 
>>> org-mode commit: 127e7fee4959ceb33dba2e442b72189f3c25eaa1
>>> 
>>> Steps to reproduce:
>>> 
>>> 1. Create an org-mode buffer and insert a clocktable dynamic block with a
>>> `tstart` option.
>>> 
>>> #+BEGIN: clocktable :scope file :maxlevel 2 :tstart "2020-01-01"
>>> #+END:
>>> 
>>> 2. Evaluate the clocktable (C-c C-c on the #+BEGIN line)
>>> 
>>> Result: `Invalid function: org-encode-time`
>>> Expected: No error, clocktable updated successfully
>>> 
>>> Notes:
>>> 
>>> References:
>>> https://mail.gnu.org/archive/html/emacs-orgmode/2022-07/msg00738.html
>>> https://mail.gnu.org/archive/html/emacs-orgmode/2022-07/msg00696.html
>>> 
>>> In early April Org introduced a new macro `org-encode-time` which is
>>> used in the `let` special form of function `org-matcher-time`
>>> 
>>> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/tree/lisp/org-macs.el#n1395
>>> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/tree/lisp/org-macs.el#n1463
>>> 
>>> Function `org-matcher-time` is used by the clocktable dynamic block
>>> options, for example adding a `tstart` option and evaluation the
>>> clocktable emits the error "Invalid function: org-encode-time".
>>> 
>>> If then going to the source for `org-matcher-time` and evaluating the
>>> defun, the clocktable can then be evaluated without error.
>>> 
>>> As previously stated this issue does not occur when not using native
>>> compilation.
>>
>> Andrea, could you please look into this bug report?  It sounds like
>> 'defmacro' in a conditional code is mis-compiled somehow?
>
> I'm currently on holiday so I've only time to check the mails and reply
> when necessary.  I won't have time to look into this before next week
> *but*... if it's a macro issue it might be some missing require in the
> org code, we have seen this kind of issue is the most common.
>
> Is this org async compiled?  If so Kenneth have we verifed the emitted
> warnings?
>
> Thanks!
>
>   Andrea

During async compile there are a couple of warnings emitted:

In end of data:
org-macs.el:1463:29: Warning: the function ‘org-encode-time’ is not known to be defined.
org-macs.el:1361:10: Warning: the function ‘org-time-string-to-seconds’ is not known to be defined.

However org-encode-time is earlier defined in org-macs.el (within 'if' statement).

Also interesting, if I touch org-macs.el and synchronously compile, I see no issue:

Updating dynamic block ‘clocktable’ at line 1...
org-matcher-time: Invalid function: org-encode-time
Save buffer org-macs.el first? (y or n) y
Saving file /home/kstuart/emacs-next/straight/repos/org/lisp/org-macs.el...
Wrote /home/kstuart/emacs-next/straight/repos/org/lisp/org-macs.el
Loading /home/kstuart/emacs-next/eln-cache/29.0.50-7f035195/org-macs-a38ffe3b-5e6a4cdf.eln (native compiled elisp)...done
Updating dynamic block ‘clocktable’ at line 1...done

🫤