From: Stefan Monnier Date: Sun, 13 Apr 2014 02:51:11 +0000 (-0400) Subject: * src/bytecode.c (exec_byte_code): Rework the volatiles. Most importantly, X-Git-Tag: emacs-24.3.91~155 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=285d6d5d0fde973a31986877fb04a85be0e362ea;p=emacs.git * src/bytecode.c (exec_byte_code): Rework the volatiles. Most importantly, make sure stack.byte_string_start is not de-adjusted by pushhandler. --- diff --git a/src/ChangeLog b/src/ChangeLog index 2d7307412b2..e07e900b27d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2014-04-13 Stefan Monnier + + * bytecode.c (exec_byte_code): Rework the volatiles. Most importantly, + make sure stack.byte_string_start is not de-adjusted by pushhandler. + 2014-04-12 Paul Eggert * keyboard.c (Fopen_dribble_file): Avoid some races. (Bug#17187) diff --git a/src/bytecode.c b/src/bytecode.c index 0ea646a9741..f1bdfd9d9c5 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -501,7 +501,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, Lisp_Object args_template, ptrdiff_t nargs, Lisp_Object *args) { ptrdiff_t count = SPECPDL_INDEX (); - ptrdiff_t volatile count_volatile; #ifdef BYTE_CODE_METER int volatile this_op = 0; int prev_op; @@ -509,14 +508,12 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, int op; /* Lisp_Object v1, v2; */ Lisp_Object *vectorp; - Lisp_Object *volatile vectorp_volatile; #ifdef BYTE_CODE_SAFE - ptrdiff_t volatile const_length; - Lisp_Object *volatile stacke; - ptrdiff_t volatile bytestr_length; + ptrdiff_t const_length; + Lisp_Object *stacke; + ptrdiff_t bytestr_length; #endif struct byte_stack stack; - struct byte_stack volatile stack_volatile; Lisp_Object *top; Lisp_Object result; enum handlertype type; @@ -1122,9 +1119,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, PUSH_HANDLER (c, tag, type); c->bytecode_dest = dest; c->bytecode_top = top; - count_volatile = count; - stack_volatile = stack; - vectorp_volatile = vectorp; if (sys_setjmp (c->jmp)) { @@ -1135,12 +1129,11 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, handlerlist = c->next; PUSH (c->val); CHECK_RANGE (dest); - stack = stack_volatile; + /* Might have been re-set by longjmp! */ + stack.byte_string_start = SDATA (stack.byte_string); stack.pc = stack.byte_string_start + dest; } - count = count_volatile; - vectorp = vectorp_volatile; NEXT; }