Subject: bug#30846: 26.0.91; debug-watch of kill-all-local-variables triggers 'assertion failed: found == !EQ (blv->defcell, blv->valcell)'

From: Noam Postavsky <[email-masked]>
Date: Sun, 18 Mar 2018 09:10:41 -0400

Evaluate the following from 'emacs -Q':

    (setq-local foo 1)

    ;; Simulate (debug-watch 'foo) + continue from *Backtrace*
    (add-variable-watcher 'foo (lambda (symbol newval operation where)
                                 (with-temp-buffer
                                   (kill-all-local-variables))))
    (fundamental-mode)

This results in

../../src/data.c:98: Emacs fatal error: assertion failed: found == !EQ (blv->defcell, blv->valcell)

Backtrace attached.  I guess it has something to do with the recursive
`kill-all-local-variables' call, although I'm not familiar enough with
the local variable machinery to say more about it.

In GNU Emacs 26.0.91 (build 54, x86_64-pc-linux-gnu, X toolkit, Xaw scroll bars)
 of 2018-03-18 built on zebian
Repository revision: 10bd3b3af8acfc226acadc654298865cffc19cc9

Configured using:
 'configure --cache-file=../../debug-config.cache 'CC=ccache gcc'
 'CFLAGS=-O0 -g3 -march=native' --enable-checking=yes
 --enable-check-lisp-object-type --with-x-toolkit=lucid
 --with-toolkit-scroll-bars --with-gif=no --with-jpeg=no'