GNU bug report logs - #21466
[PATCH] Avoid defining (temporarily) vars and functions

Previous Next

Packages: emacs, cc-mode;

Reported by: Stefan Monnier <monnier <at> iro.umontreal.ca>

Date: Sat, 12 Sep 2015 03:41:01 UTC

Severity: normal

Tags: patch, wontfix

Found in version 25.0.50

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


Message #38 received at 21466 <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: acm <at> muc.de, Stefan Monnier <monnier <at> iro.umontreal.ca>,
 21466 <at> debbugs.gnu.org
Subject: Re: bug#21466: [PATCH] Avoid defining (temporarily) vars and functions
Date: Sat, 26 Mar 2022 14:45:40 +0000
Hello again, Lars.

On Wed, Mar 23, 2022 at 21:13:35 +0100, Lars Ingebrigtsen wrote:
> Alan Mackenzie <acm <at> muc.de> writes:

> > So, I don't object on principle to the principle of the patch, just
> > there are these little irritations about it, and it will need me to
> > study it more closely to check nothing subtle would get lost (I doubt it
> > would).

> The patch no longer applied to Emacs 29, so I've respun it.

[ .... ]


> However, it leads to a number of warnings when compiling, so either my
> respin is faulty, or something's changed to make it not work any more?

Maybe it didn't work properly back in 2015, I didn't actually get around
to trying it out, then.

> In c-fontify-recorded-types-and-refs:
> progmodes/cc-fonts.el:491:8: Warning: function `c-fontify-recorded-types-and-refs' defined multiple times in this file
>   ELC      progmodes/cc-styles.elc
> In c-font-lock-declarators:
> progmodes/cc-fonts.el:1063:8: Warning: function `c-font-lock-declarators' defined multiple times in this file
> progmodes/cc-fonts.el:2300:35: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2300:35: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2496:37: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2496:37: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2501:37: Warning: reference to free variable `c-reference-face-name'
> In c-font-lock-objc-method:
> progmodes/cc-fonts.el:2527:8: Warning: function `c-font-lock-objc-method' defined multiple times in this file
> progmodes/cc-fonts.el:2602:38: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2602:38: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2650:38: Warning: reference to free variable `c-reference-face-name'
> progmodes/cc-fonts.el:2678:37: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2678:37: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2683:37: Warning: reference to free variable `c-reference-face-name'
> progmodes/cc-fonts.el:2711:38: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2711:38: Warning: reference to free variable `c-preprocessor-face-name'
> progmodes/cc-fonts.el:2716:38: Warning: reference to free variable `c-reference-face-name'

The patch is essentially replacing cc-bytecomp-defvar by (defvar foo),
and cc-bytecomp-defun by (declare-function 'foo nil).  These are only
approximately similar.

cc-bytecomp-def{var,fun} are like C's extern.  They say "this
variable/function will be defined somewhere else".

By contrast, (defvar foo) doesn't really do anything (?except marking
any possible foo as a special variable).  (declare-function 'foo nil)
says "This function HAS ALREADY been defined somewhere else (and don't
you dare redefine it!)."

These explain the "free variable" warnings for the variables and the
"defined multiple times" warnings for the functions.

To sort out this bug properly, we really need Lisp functions equivalent
to C's extern.  (defvar foo) and (declare-function 'foo nil) currently
don't fill this need.

-- 
Alan Mackenzie (Nuremberg, Germany).




This bug report was last modified 3 years and 111 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.