[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Nonsensical byte compiler warning.

From: Alan Mackenzie
Subject: Re: Nonsensical byte compiler warning.
Date: 4 Apr 2007 22:08:55 +0200
Date: Wed, 4 Apr 2007 22:27:52 +0100
User-agent: Mutt/1.5.9i

Hi, Markus!

On Wed, Apr 04, 2007 at 10:19:45AM +0200, Markus Triska wrote:
> David Kastrup <address@hidden> writes:

> > It points to c-end-of-defun, but the line number and described
> > called function are nonsensical.

> The line number is that of the first form of the function the
> questionable code is in. That makes sense, since the problem is in
> that function. It is *not* the call of char-before that's bogus. It's
> that its return value isn't used in the caller, c-end-of-defun. Any
> line of that function could contain the oversight. What line number
> would in your view make more sense to report?

As the current maintainer of cc-cmds.el, I haven't found this message at
all helpful.  Here is the actual entry from my log of 2006-04-15, when I
first tried to crack the problem:

    But I did get "While compiling c-end-of-defun in file
    /home/acm/cc-mode-5.31.n/cc-cmds.el: ** `(char-after (1- (point)))' called 
    effect".  Track this down: It's in c-end-of-defun.  By commenting out bits 
    the function in a binary chop fashion, it's L1625, "(eq (char-before) ?\})".
    I can't make head or tail of this.  FIXME!!! POSTPONED.

It didn't occur to me at the time that char-after and char-before were
the same function.

> And yes, improving the optimiser to report `char-before' instead of
> `char-after' would be nice. I doubt that it would help anyone who
> can't find the problem with the current (quite good) message though.

As the "victim" of the situation, I would have found "char-before"
_exceptionally_ helpful.  It might have urged me to look at the code more
carefully, rather than dismissing the message as a byte-compiler bug.

As I say, I don't find the current message helpful:

    In c-end-of-defun:
    cc-cmds.el:1612:4:Warning: value returned by `char-after' is not used

Taking the message bit by bit:
(i) "c-end-of-defun" _is_ helpful;
(ii) "1612:4" is positively unhelpful - at that location is "(interactive
  "p")".  Giving "1612:4" actively hinders debugging.
(iii) "char-after" doesn't exist in the source of c-end-of-defun;
(iv) The value returned by "char-before" _is_ used; it is explicitly
  compared with "?\}".

I think this warning message is buggy.  What it says ("value ... is not
used") is manifestly false - that value _is_ used; what isn't used is a
different value which is derived from that value.

What would a better message look like?  I would suggest this:

    In c-end-of-defun:
    cc-cmds.el:1626:4:Warning: value returned from form is not used.

(where 1626 starts the `if' form, the most nested form for which the
warning holds).  Or perhaps even better:

    In c-end-of-defun:
    cc-cmds.el:1647:57:Warning: value returned from form is not used.

Would it be easy to make this change to the byte compiler?

Alan Mackenzie (Ittersbach, Germany).

reply via email to

[Prev in Thread] Current Thread [Next in Thread]