tags 27016 + patch quit Michael Heerdegen writes: > npostavs@users.sourceforge.net writes: > >> I hope someone will correct me if I've gotten mixed up again, but I >> believe the byte-compiled case already works fine: >> >> ~/src/emacs$ cat bug-27016-defsetf.el >> (require 'cl) >> >> (defvar pair nil) >> (setq pair (cons 3 4)) >> (when nil >> (defalias 'foobar 'cons) >> (defsetf foobar setcar)) >> ~/src/emacs$ emacs -Q -batch -f batch-byte-compile bug-27016-defsetf.el >> >> In toplevel form: >> bug-27016-defsetf.el:1:1:Warning: cl package required at runtime >> bug-27016-defsetf.el:3:1:Warning: global/dynamic var ‘pair’ lacks a prefix >> ~/src/emacs$ emacs -Q -batch -l bug-27016-defsetf.elc --eval '(setf (foobar pair) 0)' >> Symbol’s function definition is void: \(setf\ foobar\) > > Yes - if you use two separate Emacs instances. The defsetf gets > evaluated in the Emacs that is used to compile the code > (unconditionally). > > So what you state is not suspicious for a problem with a surprising side > effect when performing macroexpansion, right? Right. ~/src/emacs$ emacs -Q -batch --eval '(byte-compile-file "bug-27016-defsetf.el")' -l bug-27016-defsetf.elc --eval '(progn (setf (foobar pair) 0) (print pair))' In toplevel form: bug-27016-defsetf.el:1:1:Warning: cl package required at runtime bug-27016-defsetf.el:3:1:Warning: global/dynamic var ‘pair’ lacks a prefix (0 . 4) You were indeed correct to point to that FIXME comment in https://debbugs.gnu.org/cgi/bugreport.cgi?bug=27016#28 Here's a patch for it: