Hey Emacsers, I'm likely losing my mind. Is this not a bug, below? I tried discussing on #emacs first, and then reported (a slightly more complex version). But, it's perhaps not obvious, and it was suggested I try to produce a simpler example. I realize I should have discussed it here first, before reporting it. A discussion here would probably produce a much better bug report in any case. Do you guys see an obvious bug here? Any simpler versions you can think of? Any hints where the bug could lie? Basically, I define a macro that hardcodes the value of our variable ii that existed before the macro definition. And, then try to use it. (progn (setq lexical-binding nil) (dotimes (ii 10) (defmacro mac () `(message "%S" ,ii) ) (mac))) That's the code. Eval it once. Works. Eval it again. Works. Eval it the third time. Debugger entered. Tested in emacs -Q in 28 and 29. [[a]] In fact, before you eval it the third time, if you change ii to jj, it still complains about ii. [[b]] Bugs are the behaviors (a) and (b) above. The macro expands to (list 'message "%S" ii). That should have worked, right? Because ii was already set at the time of definition? Here's the debugger behavior - Debugger entered--Lisp error: (void-variable ii) (list 'message "%S" ii)