summaryrefslogtreecommitdiff
path: root/cont.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-17 02:11:38 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-17 02:11:38 +0000
commit8ae8afa649e7f59bfddf60dcb9fb844c02b3dc95 (patch)
tree60d9d1c5dce51f10c7772d623433c316b4e4c787 /cont.c
parentf09bcbf96e19959a1a521f174a8b80a1482f02fb (diff)
* cont.c (cont_restore_0): padding size doesn't need to be large
if alloca is used. suppress warnings. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21612 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'cont.c')
-rw-r--r--cont.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/cont.c b/cont.c
index 0e80afd4f1..483fda0ece 100644
--- a/cont.c
+++ b/cont.c
@@ -403,7 +403,11 @@ static void
cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
{
if (cont->machine_stack_src) {
+#ifdef HAVE_ALLOCA
+#define STACK_PAD_SIZE 1
+#else
#define STACK_PAD_SIZE 1024
+#endif
VALUE space[STACK_PAD_SIZE];
#if !STACK_GROW_DIRECTION
@@ -411,9 +415,11 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
/* Stack grows downward */
#endif
#if STACK_GROW_DIRECTION <= 0
- if (&space[0] > cont->machine_stack_src) {
+ volatile VALUE *const end = cont->machine_stack_src;
+ if (&space[0] > end) {
# ifdef HAVE_ALLOCA
- ALLOCA_N(VALUE, &space[0] - cont->machine_stack_src);
+ volatile VALUE *sp = ALLOCA_N(VALUE, &space[0] - end);
+ (void)sp;
# else
cont_restore_0(cont, &space[0]);
# endif
@@ -425,9 +431,11 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
/* Stack grows upward */
#endif
#if STACK_GROW_DIRECTION >= 0
- if (&space[STACK_PAD_SIZE] < cont->machine_stack_src + cont->machine_stack_size) {
+ volatile VALUE *const end = cont->machine_stack_src + cont->machine_stack_size;
+ if (&space[STACK_PAD_SIZE] < end) {
# ifdef HAVE_ALLOCA
- ALLOCA_N(VALUE, cont->machine_stack_src + cont->machine_stack_size - &space[STACK_PAD_SIZE]);
+ volatile VALUE *sp = ALLOCA_N(VALUE, end - &space[STACK_PAD_SIZE]);
+ (void)sp;
# else
cont_restore_0(cont, &space[STACK_PAD_SIZE-1]);
# endif