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))