Subject: Emacs commit fd62486 broke Gnus registry DB

From: Tassilo Horn <[email-masked]>
Date: Sun, 25 Jan 2015 07:56:07 +0100

The Gnus Registry uses a eieio/cl defclass object as its registry db.
See the defclass `registry-db' in registry.el and `gnus-registry-db' in
gnus-registry.el.

With the changes of Emacs commit fd62486 applied, starting Gnus results
in the following error:

--8<---------------cut here---------------start------------->8---
Debugger entered--Lisp error: (error "Haven't found no-next-method-sample in cnm-sample")
signal(error ("Haven't found no-next-method-sample in cnm-sample"))
error("Haven't found no-next-method-sample in cnm-sample")
cl--generic-isnot-nnm-p(#[128 "\302\300.\206.\301\"\207" [#[513 ".\211\300HJ\262.\211\301H.\302H.\2030.\303.@!\211.@=\204$.\304..@.#\210\210.A\262.\211A\262.\202.\266.\305.\"\207" [0 5 6 eieio-default-eval-maybe eieio-oset shared-initialize] 10 "Construct the new object THIS based on SLOTS.\nSLOTS is a tagged list where odd numbered elements are tags, and\neven numbered elements are the values to store in the tagged slot.\nIf you overload the `initialize-instance', there you will need to\ncall `shared-initialize' yourself, or you can call `call-next-method'\nto have this constructor called automatically.  If these steps are\nnot taken, then new objects of your class will not have their values\ndynamically set from SLOTS.\n\n(fn THIS &optional SLOTS)"] ([eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil)) apply] 4 "\n\n(fn &rest CNM-ARGS)"])
#[385 "\300.!\205\n.\301.\"\207" [cl--generic-isnot-nnm-p apply] 5 "\n\n(fn CNM &rest ARGS)"](#[128 "\302\300.\206.\301\"\207" [#[513 ".\211\300HJ\262.\211\301H.\302H.\2030.\303.@!\211.@=\204$.\304..@.#\210\210.A\262.\211A\262.\202.\266.\305.\"\207" [0 5 6 eieio-default-eval-maybe eieio-oset shared-initialize] 10 "Construct the new object THIS based on SLOTS.\nSLOTS is a tagged list where odd numbered elements are tags, and\neven numbered elements are the values to store in the tagged slot.\nIf you overload the `initialize-instance', there you will need to\ncall `shared-initialize' yourself, or you can call `call-next-method'\nto have this constructor called automatically.  If these steps are\nnot taken, then new objects of your class will not have their values\ndynamically set from SLOTS.\n\n(fn THIS &optional SLOTS)"] ([eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil)) apply] 4 "\n\n(fn &rest CNM-ARGS)"] [eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil))
apply(#[385 "\300.!\205\n.\301.\"\207" [cl--generic-isnot-nnm-p apply] 5 "\n\n(fn CNM &rest ARGS)"] #[128 "\302\300.\206.\301\"\207" [#[513 ".\211\300HJ\262.\211\301H.\302H.\2030.\303.@!\211.@=\204$.\304..@.#\210\210.A\262.\211A\262.\202.\266.\305.\"\207" [0 5 6 eieio-default-eval-maybe eieio-oset shared-initialize] 10 "Construct the new object THIS based on SLOTS.\nSLOTS is a tagged list where odd numbered elements are tags, and\neven numbered elements are the values to store in the tagged slot.\nIf you overload the `initialize-instance', there you will need to\ncall `shared-initialize' yourself, or you can call `call-next-method'\nto have this constructor called automatically.  If these steps are\nnot taken, then new objects of your class will not have their values\ndynamically set from SLOTS.\n\n(fn THIS &optional SLOTS)"] ([eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil)) apply] 4 "\n\n(fn &rest CNM-ARGS)"] ([eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil)))
#[128 "\302\300\303\304\305\306\307\301.\"\310\"\311\312%.#\207" [#[385 "\300.!\205\n.\301.\"\207" [cl--generic-isnot-nnm-p apply] 5 "\n\n(fn CNM &rest ARGS)"] #[513 ".\211\300HJ\262.\211\301H.\302H.\2030.\303.@!\211.@=\204$.\304..@.#\210\210.A\262.\211A\262.\202.\266.\305.\"\207" [0 5 6 eieio-default-eval-maybe eieio-oset shared-initialize] 10 "Construct the new object THIS based on SLOTS.\nSLOTS is a tagged list where odd numbered elements are tags, and\neven numbered elements are the values to store in the tagged slot.\nIf you overload the `initialize-instance', there you will need to\ncall `shared-initialize' yourself, or you can call `call-next-method'\nto have this constructor called automatically.  If these steps are\nnot taken, then new objects of your class will not have their values\ndynamically set from SLOTS.\n\n(fn THIS &optional SLOTS)"] apply make-byte-code 128 "\302\300.\206.\301\"\207" vconcat vector [apply] 4 "\n\n(fn &rest CNM-ARGS)"] 10 "\n\n(fn &rest ARGS)"]([eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil))
apply(#[128 "\302\300\303\304\305\306\307\301.\"\310\"\311\312%.#\207" [#[385 "\300.!\205\n.\301.\"\207" [cl--generic-isnot-nnm-p apply] 5 "\n\n(fn CNM &rest ARGS)"] #[513 ".\211\300HJ\262.\211\301H.\302H.\2030.\303.@!\211.@=\204$.\304..@.#\210\210.A\262.\211A\262.\202.\266.\305.\"\207" [0 5 6 eieio-default-eval-maybe eieio-oset shared-initialize] 10 "Construct the new object THIS based on SLOTS.\nSLOTS is a tagged list where odd numbered elements are tags, and\neven numbered elements are the values to store in the tagged slot.\nIf you overload the `initialize-instance', there you will need to\ncall `shared-initialize' yourself, or you can call `call-next-method'\nto have this constructor called automatically.  If these steps are\nnot taken, then new objects of your class will not have their values\ndynamically set from SLOTS.\n\n(fn THIS &optional SLOTS)"] apply make-byte-code 128 "\302\300.\206.\301\"\207" vconcat vector [apply] 4 "\n\n(fn &rest CNM-ARGS)"] 10 "\n\n(fn &rest ARGS)"] ([eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil)))
#[128 "\300\211\203.\211@\303.\"\210.A\266\202\202.\210\303\302.\"\301\211\203+.\211@\303.\"\210.A\266\202\202.\210\207" [(#[(this slots) "\303\304\"\205.\305\304\"\211.\203.\306	\307\"\205R.\310\311\305\312\"#.\310\304\n#\211.@\312=\2037.\211AA\262.\202<.\313\312\"\210@\314=\203N.\211AA\262.\315\202R.\313\314\")\207" [slots current-version registry-db-version plist-member :version plist-get eql 0.1 plist-put :max-size :max-hard cl--do-remf :max-soft t] 7 "Check whether a registry object needs to be upgraded."]) (#[(this slots) "\304\235\204.	.\305\n\306\307\310\311\312\313\314\315&.#\210)\316\235?\205+.	.\305\317\307\310\320\312\321$#)\207" [slots this #:v #:v :data eieio-oset data make-hash-table :size 10000 :rehash-size 2.0 :test equal :tracker tracker 100 2.0] 10 "Set value of data slot of THIS after initialization."]) #[128 "\302\300\303\304\305\306\307\301.\"\310\"\311\312%.#\207" [#[385 "\300.!\205\n.\301.\"\207" [cl--generic-isnot-nnm-p apply] 5 "\n\n(fn CNM &rest ARGS)"] #[513 ".\211\300HJ\262.\211\301H.\302H.\2030.\303.@!\211.@=\204$.\304..@.#\210\210.A\262.\211A\262.\202.\266.\305.\"\207" [0 5 6 eieio-default-eval-maybe eieio-oset shared-initialize] 10 "Construct the new object THIS based on SLOTS.\nSLOTS is a tagged list where odd numbered elements are tags, and\neven numbered elements are the values to store in the tagged slot.\nIf you overload the `initialize-instance', there you will need to\ncall `shared-initialize' yourself, or you can call `call-next-method'\nto have this constructor called automatically.  If these steps are\nnot taken, then new objects of your class will not have their values\ndynamically set from SLOTS.\n\n(fn THIS &optional SLOTS)"] apply make-byte-code 128 "\302\300.\206.\301\"\207" vconcat vector [apply] 4 "\n\n(fn &rest CNM-ARGS)"] 10 "\n\n(fn &rest ARGS)"] apply] 7 "\n\n(fn &rest ARGS)"]([eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil))
apply(#[128 "\300\211\203.\211@\303.\"\210.A\266\202\202.\210\303\302.\"\301\211\203+.\211@\303.\"\210.A\266\202\202.\210\207" [(#[(this slots) "\303\304\"\205.\305\304\"\211.\203.\306	\307\"\205R.\310\311\305\312\"#.\310\304\n#\211.@\312=\2037.\211AA\262.\202<.\313\312\"\210@\314=\203N.\211AA\262.\315\202R.\313\314\")\207" [slots current-version registry-db-version plist-member :version plist-get eql 0.1 plist-put :max-size :max-hard cl--do-remf :max-soft t] 7 "Check whether a registry object needs to be upgraded."]) (#[(this slots) "\304\235\204.	.\305\n\306\307\310\311\312\313\314\315&.#\210)\316\235?\205+.	.\305\317\307\310\320\312\321$#)\207" [slots this #:v #:v :data eieio-oset data make-hash-table :size 10000 :rehash-size 2.0 :test equal :tracker tracker 100 2.0] 10 "Set value of data slot of THIS after initialization."]) #[128 "\302\300\303\304\305\306\307\301.\"\310\"\311\312%.#\207" [#[385 "\300.!\205\n.\301.\"\207" [cl--generic-isnot-nnm-p apply] 5 "\n\n(fn CNM &rest ARGS)"] #[513 ".\211\300HJ\262.\211\301H.\302H.\2030.\303.@!\211.@=\204$.\304..@.#\210\210.A\262.\211A\262.\202.\266.\305.\"\207" [0 5 6 eieio-default-eval-maybe eieio-oset shared-initialize] 10 "Construct the new object THIS based on SLOTS.\nSLOTS is a tagged list where odd numbered elements are tags, and\neven numbered elements are the values to store in the tagged slot.\nIf you overload the `initialize-instance', there you will need to\ncall `shared-initialize' yourself, or you can call `call-next-method'\nto have this constructor called automatically.  If these steps are\nnot taken, then new objects of your class will not have their values\ndynamically set from SLOTS.\n\n(fn THIS &optional SLOTS)"] apply make-byte-code 128 "\302\300.\206.\301\"\207" vconcat vector [apply] 4 "\n\n(fn &rest CNM-ARGS)"] 10 "\n\n(fn &rest ARGS)"] apply] 7 "\n\n(fn &rest ARGS)"] [eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil))
initialize-instance([eieio-class-tag--registry-db #:unbound nil 2305843009213693951 0.1 nil nil #:unbound #:unbound] (:file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil))
#[385 "\301.\302N\211\303H\262.!.\203/.@\211;\206.\211?\262.\203/.\203$.\304\202%.\305\306.\211A\262.\242.#\210\307.\"\210\211\207" [eieio-backward-compatibility copy-sequence eieio-class-definition 24 ignore message "Obsolete name %S passed to %S constructor" initialize-instance] 7 "Default constructor for CLASS `eieio-default-superclass'.\nSLOTS are the initialization slots used by `shared-initialize'.\nThis static method is called when an object is constructed.\nIt allocates the vector used to represent an EIEIO object, and then\ncalls `shared-initialize' on that object.\n\n(fn CLASS &rest SLOTS)"](registry-db "Gnus Registry" :file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil)
apply(#[385 "\301.\302N\211\303H\262.!.\203/.@\211;\206.\211?\262.\203/.\203$.\304\202%.\305\306.\211A\262.\242.#\210\307.\"\210\211\207" [eieio-backward-compatibility copy-sequence eieio-class-definition 24 ignore message "Obsolete name %S passed to %S constructor" initialize-instance] 7 "Default constructor for CLASS `eieio-default-superclass'.\nSLOTS are the initialization slots used by `shared-initialize'.\nThis static method is called when an object is constructed.\nIt allocates the vector used to represent an EIEIO object, and then\ncalls `shared-initialize' on that object.\n\n(fn CLASS &rest SLOTS)"] registry-db ("Gnus Registry" :file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil))
eieio-constructor(registry-db "Gnus Registry" :file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil)
apply(eieio-constructor registry-db ("Gnus Registry" :file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil))
registry-db("Gnus Registry" :file "~/.gnus.d/.gnus.registry.eieio" :max-size 2305843009213693951 :version 0.2 :precious nil :tracked nil)
gnus-registry-make-db()
(defvar gnus-registry-db (gnus-registry-make-db) ("/home/horn/Repos/el/gnus/lisp/gnus-registry.elc" . 7556))
(gnus-registry-initialize)
eval-buffer(#<buffer  *load*> nil "/home/horn/.gnus.el" nil t)  ; Reading at buffer position 2225
load-with-code-conversion("/home/horn/.gnus.el" "/home/horn/.gnus.el" nil t)
load("~/.gnus.el" nil t)
gnus-read-init-file()
gnus-1(nil nil nil)
gnus(nil)
funcall-interactively(gnus nil)
call-interactively(gnus record nil)
command-execute(gnus record)
execute-extended-command(nil "gnus" "gnus")
funcall-interactively(execute-extended-command nil "gnus" "gnus")
call-interactively(execute-extended-command nil nil)
command-execute(execute-extended-command)
--8<---------------cut here---------------end--------------->8---

For the time being, I reverted my local checkout to f02406c to keep Gnus
functional.

Ma Gnus v0.12
GNU Emacs 25.0.50.32 (x86_64-unknown-linux-gnu, GTK+ Version 3.14.7)
 of 2015-01-25 on thinkpad-t440p
200 news.gmane.org InterNetNews NNRP server INN 2.5.1 ready (posting ok)
100 Legal commands
  ARTICLE [message-ID|number]
  AUTHINFO USER name|PASS password|GENERIC program [argument ...]
  BODY [message-ID|number]
  CAPABILITIES [keyword]
  DATE
  GROUP newsgroup
  HDR header [message-ID|range]
  HEAD [message-ID|number]
  HELP
  IHAVE message-ID
  LAST
  LIST [ACTIVE [wildmat]|ACTIVE.TIMES [wildmat]|DISTRIB.PATS|DISTRIBUTIONS|HEADERS [MSGID|RANGE]|MODERATORS|MOTD|NEWSGROUPS [wildmat]|OVERVIEW.FMT|SUBSCRIPTIONS]
  LISTGROUP [newsgroup [range]]
  MODE READER
  NEWGROUPS [yy]yymmdd hhmmss [GMT]
  NEWNEWS wildmat [yy]yymmdd hhmmss [GMT]
  NEXT
  OVER [range]
  POST
  QUIT
  STARTTLS
  STAT [message-ID|number]
  XGTITLE [wildmat]
  XHDR header [message-ID|range]
  XOVER [range]
  XPAT header message-ID|range pattern [pattern ...]
Report problems to <[email-masked]>.
.
382 Begin TLS negotiation now
100 Legal commands
  ARTICLE [message-ID|number]
  AUTHINFO USER name|PASS password|GENERIC program [argument ...]
  BODY [message-ID|number]
  CAPABILITIES [keyword]
  DATE
  GROUP newsgroup
  HDR header [message-ID|range]
  HEAD [message-ID|number]
  HELP
  IHAVE message-ID
  LAST
  LIST [ACTIVE [wildmat]|ACTIVE.TIMES [wildmat]|DISTRIB.PATS|DISTRIBUTIONS|HEADERS [MSGID|RANGE]|MODERATORS|MOTD|NEWSGROUPS [wildmat]|OVERVIEW.FMT|SUBSCRIPTIONS]
  LISTGROUP [newsgroup [range]]
  MODE READER
  NEWGROUPS [yy]yymmdd hhmmss [GMT]
  NEWNEWS wildmat [yy]yymmdd hhmmss [GMT]
  NEXT
  OVER [range]
  POST
  QUIT
  STARTTLS
  STAT [message-ID|number]
  XGTITLE [wildmat]
  XHDR header [message-ID|range]
  XOVER [range]
  XPAT header message-ID|range pattern [pattern ...]
Report problems to <[email-masked]>.
.