diff options
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index 56e6c26..d7ce1e7 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -885,8 +885,11 @@ expand_builtin_apply (function, arguments, argsize) /* Perform postincrements before actually calling the function. */ emit_queue (); - /* Push a new argument block and copy the arguments. */ + /* Push a new argument block and copy the arguments. Do not allow + the (potential) memcpy call below to interfere with our stack + manipulations. */ do_pending_stack_adjust (); + NO_DEFER_POP; /* Save the stack with nonlocal if available */ #ifdef HAVE_save_stack_nonlocal @@ -1026,6 +1029,8 @@ expand_builtin_apply (function, arguments, argsize) #endif emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX); + OK_DEFER_POP; + /* Return the address of the result block. */ return copy_addr_to_reg (XEXP (result, 0)); } |