Subject: bug#39169: 28.0.50; Confusing obsolete variable warnings in eieio-defclass-autoload

From: Michael Heerdegen <[email-masked]>
Date: Thu, 27 Aug 2020 23:22:03 +0200

Michael Heerdegen <[email-masked]> writes:

> Oh, and let me add another important aspect: why does using an obsolete
> name as the name of a _lexical_ variable trigger the "variable is
> obsolete" warning at all?  If that would not be the case (and I don't
> think it is useful) then in source files using lexical binding mode we
> would not see the problem.

Would doing something like this make sense?

diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 966990bac9..418070fabe 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -3357,6 +3357,7 @@ byte-compile-check-variable
            (and od
                 (not (memq var byte-compile-not-obsolete-vars))
                 (not (memq var byte-compile-global-not-obsolete-vars))
+                (not (memq var byte-compile-lexical-variables))
                 (or (pcase (nth 1 od)
                       ('set (not (eq access-type 'reference)))
                       ('get (eq access-type 'reference))

BTW, while I looked at this, I found this spurious lookup in
`byte-compile-lexical-variables':

#+begin_src emacs-lisp
(defun byte-compile-form (form &optional for-effect)
  (let ((byte-compile--for-effect for-effect))
    (cond
     ((not (consp form))..10..)
     ((symbolp (car form))
      (let* ((fn (car form))..4..)
        (when (memq fn '(set symbol-value run-hooks..4..)
          (pcase (cdr form)
            (`(',var . ,_)
             (when (assq var byte-compile-lexical-variables) ;; <--- here
               (byte-compile-report-error
                (format-message "%s cannot use lexical var `%s'" fn var)))
             ...)))))))))
#+end_src

shouldn't the `assq' be `memq'?

Michael.