Subject: 24.3.50; Unloading edebug renders Emacs unusable
From: Stephen Berman <[email-masked]>
To: [email-masked]
Date: Wed, 12 Dec 2012 23:29:21 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

In GNU Emacs 24.3.50.6 (x86_64-suse-linux-gnu, GTK+ Version 3.4.4)
 of 2012-12-03 on rosalinde
Bzr revision: 111073 [email-masked]
Windowing system distributor `The X.Org Foundation', version 11.0.11203000
System Description:	openSUSE 12.2 (x86_64)

Configured using:
 `configure '--without-toolkit-scroll-bars' 'CFLAGS=-g3 -O0''

0. emacs -Q
1. Instrument a defun for Edebug, e.g. type `C-u C-M-x' on find-files in
   lisp/files.el. 
3. Type `M-x unload-feature RET edebug RET'.
=> Emacs becomes effectively unusable: typing e.g. `M-x', `C-n', `C-p',
   `C-x b', `C-h f', `C-h v', etc. raises either of the errors "Error in
   post-command-hook (global-font-lock-mode-check-buffers):
   (void-function edebug--called-interactively-skip)" or
   "run-hook-with-args-until-success: Symbol's function definition is
   void: edebug--called-interactively-skip".  (However, some commands
   still work, e.g `C-h e', `C-x s', `C-x 2', `C-x C-c' -- at least with
   -Q; but when I hit this bug in a session started with my init-file,
   at least `C-x C-c' failed, and I had to kill Emacs externally.)

I suspect this bug was introduced by this change:

revno: 110955
committer: Stefan Monnier <[email-masked]>
branch nick: trunk
timestamp: Mon 2012-11-19 23:24:09 -0500
message:
  Make called-interactively-p work for edebug or advised code.
  * lisp/subr.el (called-interactively-p-functions): New var.
  (internal--called-interactively-p--get-frame): New macro.
  (called-interactively-p, interactive-p): Rewrite in Lisp.
  * lisp/emacs-lisp/nadvice.el (advice--called-interactively-skip): New fun.
  (called-interactively-p-functions): Use it.
  * lisp/emacs-lisp/edebug.el (edebug--called-interactively-skip): New fun.
  (called-interactively-p-functions): Use it.
  * lisp/allout.el (allout-called-interactively-p): Don't assume
  called-interactively-p is a subr.
  * src/eval.c (Finteractive_p, Fcalled_interactively_p, interactive_p): Remove.
  (syms_of_eval): Remove corresponding defsubr.
  * src/bytecode.c (exec_byte_code): `interactive-p' is now a Lisp function.
  * test/automated/advice-tests.el (advice-tests--data): Remove.
  (advice-tests): Move the tests directly here instead.
  Add called-interactively-p tests.

The bug does not happen with my trunk build from revision 110951 (my
last build prior to the above change) but it does happen with my trunk
builds from later revisions than the above.