diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2013-02-14 14:08:38 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2013-02-14 14:08:38 -0800 |
commit | 974c7646ec5b2985a50007c9d599154d667df349 (patch) | |
tree | ad7e887ee050d4a53dcb52afca14562294ad5636 | |
parent | 35b3a27e67b60e547ac8bc9388e7724d1f829959 (diff) | |
download | emacs-974c7646ec5b2985a50007c9d599154d667df349.tar.gz |
Backport GCPRO fix from trunk.
The bug was reported for AIX before today's changes.
I reproduced the problem on Fedora 17 x86-64 when setting
GC_MARK_STACK by hand, and I presume it occurs with default
configurations on HP-UX and Unixware.
Trunk fix on 2013-01-14 by Dmitry Antipov <dmantipov@yandex.ru>:
Fix compilation with GC_MARK_STACK == GC_USE_GCPROS_AS_BEFORE.
* eval.c (eval_sub): Protect `form' from being GCed before its
car and cdr becomes protected with the backtrace entry.
Fixes: debbugs:13650
-rw-r--r-- | src/ChangeLog | 10 | ||||
-rw-r--r-- | src/eval.c | 3 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index e283d2bb48c..46a466d060d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,15 @@ 2013-02-14 Paul Eggert <eggert@cs.ucla.edu> + Backport GCPRO fix from trunk (Bug#13650). + The bug was reported for AIX before today's changes. + I reproduced the problem on Fedora 17 x86-64 when setting + GC_MARK_STACK by hand, and I presume it occurs with default + configurations on HP-UX and Unixware. + Trunk fix on 2013-01-14 by Dmitry Antipov <dmantipov@yandex.ru>: + Fix compilation with GC_MARK_STACK == GC_USE_GCPROS_AS_BEFORE. + * eval.c (eval_sub): Protect `form' from being GCed before its + car and cdr becomes protected with the backtrace entry. + Fix AIX port (Bug#13650). * lisp.h (XPNTR) [!USE_LSB_TAG && DATA_SEG_BITS]: Fix bug introduced in 2012-07-27 change. DATA_SEG_BITS, if set, diff --git a/src/eval.c b/src/eval.c index a0db6e0745c..a21b2b05762 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2034,7 +2034,10 @@ eval_sub (Lisp_Object form) return form; QUIT; + + GCPRO1 (form); maybe_gc (); + UNGCPRO; if (++lisp_eval_depth > max_lisp_eval_depth) { |