Subject: bug#67483: closed (Re: bug#67483: Wrong warning position given by the byte compiler for a malformed function)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 27 Nov 2023 15:49:02 +0000

Your bug report

#67483: Wrong warning position given by the byte compiler for a malformed function

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
67483: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67483
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#67483: Wrong warning position given by the byte compiler for a malformed function
From: Alan Mackenzie <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked], [email-masked]
Date: Mon, 27 Nov 2023 15:47:47 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello, Eli.

On Mon, Nov 27, 2023 at 17:09:10 +0200, Eli Zaretskii wrote:
> > Date: Mon, 27 Nov 2023 14:01:40 +0000
> > Cc: [email-masked], [email-masked]
> > From: Alan Mackenzie <[email-masked]>

> > > > > Which branch? master or emacs-29?

> > > > Both.  Probably emacs-28, too.

> > > So it isn't a "semi-recent" problem, is it?

> > It isn't ten years old, either.  I have a fix ready to commit to the
> > master branch.

> > Seeing as how the bug isn't recently introduced, and isn't a critical
> > bug, I'm assuming the patch is not destined for the release branch.

> Definitely not.

No.  I've committed the fix to master, and I'm closing the bug.

-- 
Alan Mackenzie (Nuremberg, Germany).

Subject: Wrong warning position given by the byte compiler for a malformed function
From: Alan Mackenzie <[email-masked]>
To: [email-masked]
Date: Mon, 27 Nov 2023 12:40:49 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello, Emacs

In any recent or semi-recent Emacs create a file bad-error-position.el
with these contents:

    (defun foo ()
      (let ((bar 'bar))
        (if ("foo")  ; Erroneous "function".
            (baz))))))

..  Use M-x compile-defun to compile it.  This gives an error message:

    Buffer bad-error-position.el:2:4: Warning: `foo' is a malformed function

..  This position 2:4 is wrong; it is the position of the `let' symbol.
The correct position would be 3:6, the position of the `if' symbol.

#########################################################################

The cause of the error is in byte-optimize-form in
lisp/emacs-lisp/byte-opt.el.  There, although the code recurses, it
fails to push the current form onto byte-compile-form-stack.  Thus when
byte-compile-warn-x is called, there is nothing usable on that stack
inside the let form.

-- 
Alan Mackenzie (Nuremberg, Germany).