Subject: Re: bug#6740: Spurious byte compiler warnings

From: Alan Mackenzie <[email-masked]>
Date: Wed, 28 Jul 2010 17:49:33 +0000

Hi, Juanma,

On Wed, Jul 28, 2010 at 12:57:04AM +0200, Juanma Barranquero wrote:
> On Tue, Jul 27, 2010 at 23:23, Alan Mackenzie <[email-masked]> wrote:

> > It's a bug that the error message is repeated, at the very least.

> Yes, likely.

> > And the message is most assuredly false because (featurep 'cc-fix)
> > isn't always false - for example when it's run under XEmacs.

> Not, in code byte-compiled for Emacs it is always false because
> (featurep 'xemacs) is false. That means that optimized bytecode is not
> portable to XEmacs. But I don't think it was before (for a long time).

Optimised .elc isn't even compatible with earlier versions of Emacs.  But
this discussion is most emphatically NOT about compiled code.  It's about
the process of compiling sources.

> > At the very least, emitting such arcane warnings is unhelpful.  Are
> > there any circumstances in which such a warning might help a hacker
> > improve his code?  Surely we aren't in the business of making it
> > difficult to adapt code for XEmacs?

> You make it appear as it if were an attempt to warn about using
> XEmacs-specific code, but it is not, as Dan has pointed out.

What use is this warning message?  How could it prompt a hacker to
improve his code?  (That's a genuine question, not a rhetorical one.)

> The warning is generic, the result of

>   (and X (featurep 'xemacs) Y Z...)  => (prog (and X) nil) => (prog X
> nil)   ; IIUC the comments in byte-opt.el...

Thanks for this explanation.

What do you mean by "generic" here?  Is the same trick performed on
symbols other than 'xemacs?

Surely it is a bug that "(featurep 'cc-fix)" appears in the message
rather than "(featurep 'xemacs)".  This situation is not about 'cc-fix,
it's about 'xemacs.

I would suggest that if I, a highly experienced Emacs hacker, remain
baffled by this message over many months, so will lots of others.  Does
anybody actually care about "(featurep 'xemacs)" being optimised away?
Again, who does this warning message help (other than the hackers who
wrote the optimisation code in the first place, of course)?

> from whence, "value returned from X is unused".

> > I think it's clear, the only code containing (featurep 'xemacs) is
> > portable code.

> The code is portable. The .elc is not.

Er, we're in strong agreement with this.

>     Juanma

-- 
Alan Mackenzie (Nuremberg, Germany).