Subject: bug#42425: 26.3.50; Compilation warnings when compiling eldoc.el under Emacs 26.3

From: Philipp Stephani <[email-masked]>
Date: Sun, 24 Jan 2021 10:30:37 +0100

Am Sa., 23. Jan. 2021 um 19:31 Uhr schrieb Lars Ingebrigtsen <[email-masked]>:
>
> Philipp Stephani <[email-masked]> writes:
>
> >> Doing so seems easy enough, but I'm not sure how high our ambitions are
> >> for doing warning-free ELPA packages on older Emacs versions?  (I've
> >> added João to the CCs.)
> >
> > I think our ambitions should be quite high. (I personally think we
> > should treat almost all compiler warnings as errors/bugs and fix them
> > whenever realistically possible.)
>
> Building Emacs has traditionally been watching a wall of warnings scroll
> by.  This has recently changed, but shows that "no warnings" isn't a
> value held universally by the Emacs developers.
>
> I think that the Emacs build should be warning free -- on our main,
> current targets.  Jumping through hoops to avoid warnings on older Emacs
> versions normally isn't worth spending time on, in my opinion.

Yeah, but here we're talking about moving a single function definition
(eldoc--eval-expression-setup) around, which shouldn't realistically
cause problems.

>
> >> > 2. Probably eldoc should protect against newer Elisp functions being not
> >> >    yet available, as calling such functions will likely result in errors
> >> >    at runtime.
> >>
> >> Doesn't it do that?  What functions is it using that's not available?
> >
> > At least the current master version looks fine, though the byte
> > compiler isn't smart enough to detect that. The problematic uses are
> > in eldoc--eval-expression-setup.
>
> I'm not sure I follow you here -- are you saying that eldoc doesn't work
> on Emacs 26 because of the usages in `eldoc--eval-expression-setup'?

No, the code is correct as far as I can see. The functions that would
be unavailable in Emacs 26 won't be used in Emacs 26. But the byte
compiler detects only checks in the form of (when (fboundp 'FUNC)
(FUNC ...)) and similar, but not the check performed in that function.