diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2018-10-30 20:57:46 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2018-10-30 20:58:48 -0700 |
commit | cf486a7a920d3d95fa9aa98d7b03ebc61b17518a (patch) | |
tree | fa50f7b87708463c36e714078012706b4cefdb23 /src/eval.c | |
parent | b9cbdd045f2d086390b3d0e4412ebac0b19aaead (diff) | |
download | emacs-cf486a7a920d3d95fa9aa98d7b03ebc61b17518a.tar.gz |
Improve fix for Bug#33014
Although the previously-applied fix worked for its platform,
it doesn’t suffice in general.
* src/bytecode.c (exec_byte_code): Save VECTOR into stack slot
so that it survives GC. The stack slot was otherwise unused,
so this doesn’t cost us memory, only a store insn.
* src/eval.c (Ffuncall): Do not make FUN volatile, reverting
2018-10-14T19:12:04Z!gazally@runbox.com. Adding ‘volatile’
does not suffice, since storage for a volatile local can be
reclaimed after its last access (e.g., by tail recursion
elimination), which would make VECTOR invisible to GC.
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/eval.c b/src/eval.c index 32cfda24d8c..a51d0c90831 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2820,11 +2820,8 @@ Thus, (funcall \\='cons \\='x \\='y) returns (x . y). usage: (funcall FUNCTION &rest ARGUMENTS) */) (ptrdiff_t nargs, Lisp_Object *args) { - /* Use 'volatile' here to cause optimizing compilers to keep a - reference on the stack to the function's bytecode object. See - Bug#33014. */ - Lisp_Object volatile fun; - Lisp_Object original_fun, funcar; + Lisp_Object fun, original_fun; + Lisp_Object funcar; ptrdiff_t numargs = nargs - 1; Lisp_Object val; ptrdiff_t count; |