Subject: bug#76748: closed (Re: bug#76748: 31.0.50; `unload-feature' unbinds NEW-ALIAS and BASE-VARIABLE of variable alias)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 16 Mar 2025 04:13:08 +0000

Your bug report

#76748: 31.0.50; `unload-feature' unbinds NEW-ALIAS and BASE-VARIABLE of variable alias

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].

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

Subject: Re: bug#76748: 31.0.50; `unload-feature' unbinds NEW-ALIAS and BASE-VARIABLE of variable alias
From: Stefan Monnier <[email-masked]>
To: Jens Schmidt <[email-masked]>
Cc: Eli Zaretskii <[email-masked]>, [email-masked]
Date: Sun, 16 Mar 2025 00:12:09 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

> Please see the attached patch.

Thanks, pushed to `master` closing,

        Stefan

Subject: 31.0.50; `unload-feature' unbinds NEW-ALIAS and BASE-VARIABLE of variable alias
From: Jens Schmidt <[email-masked]>
To: [email-masked]
Date: Tue, 04 Mar 2025 21:57:18 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

1. `defalias' on builtin variable, like in vhdl-mode.el:

     ./progmodes/vhdl-mode.el:2331:  (defvaralias 'vhdl-last-input-event 'last-input-event)

   Start with "emacs -Q", then execute with C-j in *scratch*:

     (require 'vhdl-mode)
     vhdl-mode

     (unload-feature 'vhdl-mode)
     =>
     Lisp error: (error "Built-in variables may not be unbound")
       makunbound(vhdl-last-input-event)
       #f(compiled-function (x) #<bytecode -0x15f00789bdf1ec4b>)(vhdl-last-input-event)
       apply(#f(compiled-function (x) #<bytecode -0x15f00789bdf1ec4b>) vhdl-last-input-event nil)
       loadhist-unload-element(vhdl-last-input-event)
       unload-feature(vhdl-mode)

2. `define-obsolete-variable-alias' on non-builtin, like this:

     ./net/shr.el:164:(define-obsolete-variable-alias 'shr-external-browser 'browse-url-secondary-browser-function "27.1")

   Start with "emacs -Q", then execute with C-j in *scratch*:

     (require 'browse-url)
     browse-url

     browse-url-secondary-browser-function
     browse-url-default-browser

     (require 'shr)
     shr

     (unload-feature 'shr)
     nil

     browse-url-secondary-browser-function
     => Lisp error: (void-variable browse-url-secondary-browser-function)

My understanding is that `unload-feature' in

case 1. tries to unbind BASE-VARIABLE of the alias, and not NEW-ALIAS,
and fails to do so and in

case 2. unbinds both CURRENT-NAME and OBSOLETE-NAME.

I would expect that in these cases `unload-feature' should unbind
NEW-ALIAS/OBSOLETE-NAME from the feature being unloaded, but leave
BASE-VARIABLE/CURRENT-NAME unchanged.  (Except of course if both items
of the alias originate from the same feature.)

In GNU Emacs 31.0.50 (build 3, x86_64-pc-linux-gnu, GTK+ Version
 3.24.38, cairo version 1.16.0) of 2025-03-04 built on sappc2
Repository revision: e978737f57ef8447bba5796dd945ac185fcadffa
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12201009
System Description: Debian GNU/Linux 12 (bookworm)

Configured using:
 'configure --with-native-compilation --with-mailutils'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP
NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF
TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINERAMA XINPUT2 XPM XRANDR GTK3
ZLIB

Important settings:
  value of $LC_COLLATE: POSIX
  value of $LC_TIME: POSIX
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr comp-run bytecomp byte-compile comp-common rx
emacsbug lisp-mnt message mailcap yank-media puny dired dired-loaddefs
rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config
gnus-util text-property-search time-date subr-x mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs
cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win
term/common-win x-dnd touch-screen tool-bar dnd fontset image regexp-opt
fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode
register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting cairo gtk x-toolkit xinput2 x multi-tty move-toolbar
make-network-process tty-child-frames native-compile emacs)

Memory information:
((conses 16 58395 9074) (symbols 48 6196 0) (strings 32 15316 2044)
 (string-bytes 1 469694) (vectors 16 9916)
 (vector-slots 8 139508 9528) (floats 8 23 12) (intervals 56 263 0)
 (buffers 984 11))